Установка PHP 7.4 с компиляцией модуля v8js на ubuntu 22

В README файлах официальных репозиториях V8 и V8JS достаточно информации по установке/компиляции компонентов для PHP 8+, но эти инструкции не работают для PHP 7.4.

Ниже, проверенная инструкция для установки из исходников V8 и компиляция модуля V8JS для PHP 7.4 на операционной системе Ubuntu 22

Получаем рут права:

sudo su

Обновляем компоненты ОС ubuntu 22, чтобы работать с самыми актуальными версиями пакетов :

apt-get update -y --fix-missing && apt-get upgrade -y;

Добавляем репозитория для установки PHP и модулей (так как в стандартных репозитория нету PHP 7.4):

add-apt-repository ppa:ondrej/php

Устанавливаем PHP 7.4 с стандартными модулями:

apt install php7.4 php7.4-fpm php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-mysql php7.4-mbstring php7.4-zip php7.4-curl php7.4-gd php7.4-xml php7.4-dev

Далее, устанавливаем инструмент для сборки программного обеспечения (V8)

apt install ninja-build

И другие, необходимые для сборки проекта V8, инструменты:

apt-get install -y --no-install-recommends \
    libtinfo5 libtinfo-dev \
    build-essential \
    curl \
    git \
    libglib2.0-dev \
    libxml2 \
    python2 \
    patchelf \
    && sudo ln -sf /usr/bin/python2.7 /usr/bin/python \
    && cd /tmp \
    \
    && git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git --progress --verbose \
    && export PATH="$PATH:/tmp/depot_tools" \
    \
    && fetch v8 \
    && cd v8 \
    && git checkout 8.9.255.25 \
    && gclient sync \
    \
    && tools/dev/v8gen.py -vv x64.release -- is_component_build=true use_custom_libcxx=false

В том числе Depot tools — набор утилит Гугла для сборки проектов (V8).

Из важного — используется не последняя версия V8 из репозитория, а версия 8.9.255.25

Процесс сборки представлен ниже:

export PATH="$PATH:/tmp/depot_tools" \
    && cd /tmp/v8 \
    && ninja -C out.gn/x64.release/ \
    && mkdir -p /opt/v8/lib && mkdir -p /opt/v8/include \
    && cp out.gn/x64.release/lib*.so out.gn/x64.release/*_blob.bin out.gn/x64.release/icudtl.dat /opt/v8/lib/ \
    && cp -R include/* /opt/v8/include/ \
    && apt-get install patchelf \
    && for A in /opt/v8/lib/*.so; do patchelf --set-rpath '$ORIGIN' $A;done

После этого, можем скачивать и компилировать модуль V8Js:

cd /tmp \
    && git clone https://github.com/phpv8/v8js.git \
    && cd v8js \
    && git reset --hard e648f43 \
    && git checkout  e648f43 \
    && phpize \
    && ./configure --with-v8js=/opt/v8 LDFLAGS="-lstdc++" CPPFLAGS="-DV8_COMPRESS_POINTERS" \
    && make \
    && make install

В результате успешного выполнения всех процедур будет файл v8js.so в папке /usr/lib/php/20190902

Необходимо добавить его в конфиги ini PHP:

cd /etc/php/7.4/cli/conf.d/

Создаем новый ini файл. Можно использовать любой редактор. В примере ниже используется nano:

nano 50-v8js.ini

Вводим всего одну строчку в свежем файле:

extension=v8js.so

И сохраняет этот файл.

Приступим к проверке работоспособности. Для этого переходим в любую временную папку на сервер и создаем тестовый php файл

cd /tmp
nano test_v8js.php

В который вставляем следующий PHP код, задействующий V8Js :

<?php
$v8js = new V8Js();
$JS = <<< EOT
  var s = 'Hello world';
  s;
EOT;
$r = $v8js->executeString($JS);
var_dump($r);

Сохраняем файл и запускаем:

php test_v8js.php

В случае успеха увидим вывод в консоли:

string(11) "Hello world"

Установка PHP 7.4 с компиляцией модуля v8js на ubuntu 20

В официальных репозиториях V8 и V8JS достаточно информации по PHP 8+, но инструкции не работают для PHP 7.4. Поэтому пришлось самому экспериментировать, чтобы добиться положительных результатов.

Ниже, инструкция для установки из источников V8 и компиляция модуля V8JS для PHP 7.4 на операционной системе Ubuntu 20

Получаем рут права:

sudo su

Обновляем операционную систему, чтобы работать с самыми актуальными версиями пакетов и ПО:

apt-get update -y --fix-missing && apt-get upgrade -y;

Устанавливаем PHP 7.4 с самыми типовыми, необходимыми модулями:

apt install php7.4 php7.4-fpm php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-mysql php7.4-mbstring php7.4-zip php7.4-curl php7.4-gd php7.4-xml php7.4-dev

Далее, устанавливаем инструмент для сборки программного обеспечения (V8)

apt install ninja-build

И другие, необходимые для сборки проекта V8, инструменты:

apt-get install -y --no-install-recommends \
    libtinfo5 libtinfo-dev \
    build-essential \
    curl \
    git \
    libglib2.0-dev \
    libxml2 \
    python \
    patchelf \
    && cd /tmp \
    \
    && git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git --progress --verbose \
    && export PATH="$PATH:/tmp/depot_tools" \
    \
    && fetch v8 \
    && cd v8 \
    && git checkout 8.9.255.25 \
    && gclient sync \
    \
    && tools/dev/v8gen.py -vv x64.release -- is_component_build=true use_custom_libcxx=false

В том числе Depot tools — набор утилит Гугла для сборки проектов (V8).

Из важного — используется не последняя версия V8 из репозитория, а версия 8.9.255.25

Процесс сборки представлен ниже:

export PATH="$PATH:/tmp/depot_tools" \
    && cd /tmp/v8 \
    && ninja -C out.gn/x64.release/ \
    && mkdir -p /opt/v8/lib && mkdir -p /opt/v8/include \
    && cp out.gn/x64.release/lib*.so out.gn/x64.release/*_blob.bin out.gn/x64.release/icudtl.dat /opt/v8/lib/ \
    && cp -R include/* /opt/v8/include/ \
    && apt-get install patchelf \
    && for A in /opt/v8/lib/*.so; do patchelf --set-rpath '$ORIGIN' $A;done

После этого, можем скачивать и компилировать модуль V8Js:

cd /tmp \
    && git clone https://github.com/phpv8/v8js.git \
    && cd v8js \
    && git reset --hard e648f43 \
    && git checkout  e648f43 \
    && phpize \
    && ./configure --with-v8js=/opt/v8 LDFLAGS="-lstdc++" CPPFLAGS="-DV8_COMPRESS_POINTERS" \
    && make \
    && make install

В результате успешного выполнения всех процедур будет файл v8js.so в папке /usr/lib/php/20190902

Необходимо добавить его в конфиги ini PHP:

cd /etc/php/7.4/cli/conf.d/

Создаем новый ini файл. Можно использовать любой редактор. В примере ниже используется nano:

nano 50-v8js.ini

Вводим всего одну строчку в свежем файле:

extension=v8js.so

И сохраняет этот файл.

Приступим к проверке работоспособности. Для этого переходим в любую временную папку на сервер и создаем тестовый php файл

cd /tmp
nano test_v8js.php

В который вставляем следующий PHP код, задействующий V8Js :

<?php
$v8js = new V8Js();
$JS = <<< EOT
  var s = 'Hello world';
  s;
EOT;
$r = $v8js->executeString($JS);
var_dump($r);

Сохраняем файл и запускаем:

php test_v8js.php

В случае успеха увидим вывод в консоли:

string(11) "Hello world"

Система грейдов разработчиков — back-end программист

back-end developer

Ранее, мы исследовали грейды в общем, порассуждали про хард скиллы и рассмотрели пример грейдов фулл-стек программиста.

В этой статье, нас интересуют грейды бэк-енд разработчика

Пример основного стека:

  • язык: PHP, Laravel, Codeigniter (язык программирования и фреймворки на нем: новый, современный и старый, легаси)
  • Основная база данных: MySQL, дополнительные: Sphinx, Redis
  • Сервера Linux, Nginx, PHP-FPM, Docker

А теперь — подробнее и с различением по уровням:

  1. Джуниор

Комментарии: принимаем на этот уровень новичков без значимого опыта. На этот уровень не подымаются по системе грейдов.

  1. Джуниор+
  • Базовые знания composer и фрейворк Laravel (на примере оформления цикла жизни http запроса)
  • знание git, gitflow, 
  • навыки работы с консолью linux

Комментарии: предполагается, что Laravel — основной фреймворк, на котором разрабатываются все новые задачи. Ну а систему контроля версий, тоже, нужно знать как можно раньше

  1. Джуниор++
  • Продвинутые знания Laravel: джобы, гейты, политики, посредники, composer пакеты, продвинутые знания в ОРМ в части родительских и полиморфных связей), 
  • знание Codeigniter на примере цикла жизни http запроса, включая основы безопастности передачи данных
  • понимание принципов юнит тестирования, архитектуры тонких контроллеров, принципов проектирования rest api

Комментарии: более сложные технологии бэкенда, которые увеличивают гибкость реализации задач. Вопросы хорошего кода, безопасного и понятного кода, который легко поддерживать.

  1. Мидл
  • Разбирается в основном проекте на уровне, что может пояснять бизнес процессы коллегам
  • Принимать архитектурные решения. Связка 2 и больше таблиц для решения поставленных требовании
  • Нереляционная база данных, кеширование, Redis
  • юнит тестирование
  • понимание значения индексов MySQL, умение писать оптимальные сырые запросы (без ORM)

Комментарии: программист на уровне Мидл должен быть выше Джуна принципиально. Он может принимать «решения». Например, разрабатывать архитектуру небольших приложений или «фичи». Так же, он более самостоятелен в работе и, постепенно, становится экспертом в своей области. И владеет более сложными технологиями. Так как на этом грейде, речь была про архитектуру, добавляем хорошее знание баз данных.

  1. Мидл+
  • Приличная экспертиза в одном из проектов из экосистемы (наряду с основным проектом), уверенное выполнение задач
  • грамотное применение паттернов проектирования, 
  • работа с Docker, Docker-compose
  • хорошая база знаний чистого php (не в рамках фреймворков)
  • Придерживается принципов программирования: YAGNI (You Ain’t Gonna Need It)

Комментарии: полезные, современные бэкэнд технологии. Алгоритмы. Оптимальный код Экспертиза мидлов не ограничивается кодированием, т.е. активно применяет общепринятые принципы программирования и чистого кода

  1. Мидл++
  • Разбираться в бизнес-процессах одного из эко-системных продуктов на уровне чтобы передать знания
  • описание и дополнение статей  лучших практик в рамках проектов компаний
  • знание Manticore (Sphinx)
  • Jenkins (сборка проектов)
  • Придерживается принципам программирования: KISS (Keep It Simple, Stupid)

Комментарии: еще больше полезных и сложные технологии бэкенда, которые увеличивают гибкость реализации задач. Так же подымаются вопросы сборок, релизов, CI/CD

  1. Сеньор
  • Не менее 5 лет работы в программировании (включая предыдущий опыт)
  • Сильная экспертиза в следующих технологиях  и инструментах:
  • Linux server console / Nginx config
  • Написан новый крупный компонент (соизмеримый с проектом из микро-сервисной архитектуры) или проект, или сделан рефакторинг крупного компонента
  • Наставничество: ученик был повышен с Джуна+ или Джуна++ до Мидла
  • Придерживается принципам программирования: DRY (Don’t Repeat Yourself)

Комментарии: новое серьезное достижение (Сеньор), усиливаются требования, увеличивается отдача от программиста. В теории, можно изучить все предыдущие технологии и даже чуть попробовать их на практике, но без опыта, без большого количества рассмотренных задач, кандидат не сможет заслуженно называться Сеньором. Так же данный грейд подразумевает наставничество. Кроме опыта самого разработчика, наставничество приносит большую пользу компании

  1. Сеньор+
  • Сильная экспертиза в следующих технологиях  и инструментах: создание Composer-пакетов
  • Написан необходимый Composer-пакет для одного из наших модулей (или блока, который необходимо выделить в модуль). Подключение в нашем проекте
  • Написана статья об этом компоненте или того же уровня в общедоступном айти ресурсе с большой аудиторией (habr или чтото подобное) от корпоративного аккаунта, на этом грейде или ранее
  • Занимается релизами в проекте над которым работают 2+ человек
  • Наставник 2+ человек, делает код ревью их кода
  • Придерживается принципам программирования: SOLID

Комментарии: добавляем профильные, очень перспективные технологии, которые должны двинуть разработку за новые горизонты. Еще больше наставничества. А так же социальная активность от имени компании. Все в выигрыше.

  1. Сеньор++
  • Знание работы ядер фреймворков, задействованных в компании
  • Сильная экспертиза в CI/CD. Внедрение промывных процессов в разработке
  • Наставничество: ученик был повышен с Мидла до Мидла++
  • Выступление на айти конференции от лица компании по актуальной теме, на этом грейде или ранее

Комментарии: Уровень «бог программирования». Лидер мнений в компании и айти сфере. Еще больше взаимной пользы: и программисту, и компании

Система грейдов разработчиков — full-stack программист

full-stack developer

В предыдущих статьях, мы рассмотрели взгляд на грейды в целом и на хард скиллы в общем.

Пришло время посмотреть реальные примеры грейдов хард-скиллов программистов.

В этой статье «под прицелом» фулл-стек разработчик со стеком технологий:

  • Бэкенд: PHP, Laravel, Codeigniter (язык программирования и фреймворки на нем: новый, современный и старый, легаси), MySQL
  • Фронтенд: JS, React (основная библиотека), Vue.js (так же используется)

А теперь — подробнее и с различением по уровням

  1. Джуниор.

Комментарии: принимаем на этот уровень новичков без значимого опыта. На этот уровень не подымаются по системе грейдов.

  1. Джуниор+

Необходима сильная экспертиза в следующих технологиях  и инструментах: HTML / CSS / Sass / JS / Jquery / Bootstrap / Git

Комментарии: по сути, это основы. С чего начинают разработчики вебсайтов. Ну а систему контроля версий, тоже, нужно знать как можно раньше

  1. Джуниор++
  • Разбирается в основном проекте
  • Сильная экспертиза в следующих технологиях  и инструментах: PHP / Composer / PhpShtorm / MVC / Codeigniter / REST API

Комментарии: чтобы подняться на этот уровень, начинаем углубляться в бэкенд. Основной пакетный менеджер, среда разработки, более легкий фреймворк, его архитектура

  1. Мидл
  • Разбирается в основном проекте на уровне, что может пояснять бизнес процессы коллегам
  • Принимать архитектурные решения. Связка 2 и больше таблиц для решения поставленных требований
  • Помощь менеджерам в формировании более полных требований с технической точки зрения  
  • Сильная экспертиза в следующих технологиях  и инструментах: mySQL, postgresql, Laravel and Codeigniter ORM

Комментарии: Мидл разработчик подразумевает более высокие компетенции, чем Джуниор. Он может принимать решения. Например, разрабатывать архитектуру небольших приложений или «фичи». Так же, он более самостоятелен в работе и, постепенно, становится экспертом в своей области. Владеет более сложными технологиями. Так как на этом грейде, речь была про архитектуру, добавляем хорошее знание баз данных.

  1. Мидл+
  • Приличная экспертиза в одном из проектов из экосистемы (наряду с основным проектом), уверенное выполнение задач
  • Сильная экспертиза в следующих технологиях  и инструментах:
    • React (фронт основного проекта), npm, WordPress (например),
    • VueJS (фронт второго проекта)
  • Придерживается принципам программирования: YAGNI (You Ain’t Gonna Need It)

Комментарии: так как фул-стек программист должен знать и фронт-енд, то глубже погружается в него. Там же пакетый менеджер, без которого, серьезные вещи значительно сложнее реализовать. Экспертиза мидлов не ограничивается кодированием, т.е. активно применяет общепринятые принципы программирования и чистого кода

  1. Мидл++
  • Разбираться в бизнес-процессах одного из экосистемных продуктов на уровне чтобы передать знания
  • Сильная экспертиза в следующих технологиях  и инструментах: Laravel (сервисы, обработчики очередей, консольные команды, мидлвары, реквесты и валидация)
  • Знакомство и способность редактировать: Jenkins(сборка проектов), Gulp / Webpack для сборки и автоматизации сборок
  • Придерживается принципам программирования: KISS (Keep It Simple, Stupid)

Комментарии: Более сложные технологии бэкенда, которые увеличивают гибкость реализации задач. Вопросы хорошего кода, безопасного и понятного кода, который легко поддерживать. Так же подымаются вопросы сборок, релизов, CI/CD

  1. Сеньор
  • Не менее 5 лет работы в програмировании (включая предыдущий опыт)
  • Сильная экспертиза в следующих технологиях  и инструментах: Linux server console / Nginx config / Docker (для создания локальных сред)
  • Написан новый крупный компонет (соизмеримый с проектом из микросервисной архитектуры) или проект, или сделан рефакторинг крупного компонента
  • Наставничество: ученик был повышен с Джуна+ или Джуна++ до Мидла
  • Придерживается принципам программирования: DRY (Don’t Repeat Yourself)

Комментарии: преодолеваем новый рубеж (сеньор), усиливаются требования, увеличивается отдача от программиста. В теории, и за год можно изучить все предыдущие технологии и даже чуть попробовать их на практике, но без опыта, без большого количества рассмотренных задач, кандидат не сможет заслуженно называться сеньором (5 лет опыта в сфере). Так же данный грейд подразумевает наставничество. Кроме опыта самого разработчика, наставничество приносит большую пользу компании

  1. Сеньор+
  • Сильная экспертиза в следующих технологиях  и инструментах: Node.js, Создание Npm пакетов
  • Создан полезный для проекта npm-пакет, который используется в этом проекте
  • Написана статья об этом компоненте или того же уровня в общедоступном айти ресурсе с большой аудиторией (habr или чтото подобное) от корпоративного аккаунта, на этом грейде или ранее
  • Занимается релизами в проекте над которым работают 2+ человек
  • Наставник 2+ человек, делает код ревью их кода
  • Придерживается принципам программирования: SOLID

Комментарии: добавляем не совсем профильные, но очень перспективные технологии, которые должны двинуть разработку за новые горизонты. Еще больше наставничества. Социальная активность от имени компании. Все в выигрыше.

  1. Сеньор++
  • Сильная экспертиза в следующих технологиях  и инструментах: создание Composer-пакетов
  • Написан необходимый Composer-пакет для одного из наших модулей (или блока, который необходимо выделить в модуль). Подключение в нашем проекте
  • Написана статья об этом компоненте или того же уровня в общедоступном айти ресурсе с большой аудиторией (habr или чтото подобное) от корпоративного аккаунта, на этом грейде или ранее
  • Наставничество: ученик был повышен с Мидла до Мидла++
  • Выступление на айти конференции от лица компании по актуальной теме, на этом грейде или ранее

Комментарии: еще больше взаимной пользы. И программисту и компании. Оптимизация кода. Уровень качества кода на профессиональном уровне.

PHP foreach — как легко переполнить память даже с крошечным массивом

PHP foreach пример

Рассмотрим простой пример перебора элементов одномерного массива с 4мя элементами

<?php
$elements = [1,2,3,4];
echo PHP_EOL;
foreach ($elements as $element) {
    echo $element;
}
echo PHP_EOL;
echo json_encode($elements);

при выполнении все ожидаемо:

1234
[1,2,3,4]

Теперь, перейдем к какой то задаче с пользой, например, если встречается какой то элемент, необходимо добавить его копию в исходный массив

<?php
$elements = [1,2,3,4];
echo PHP_EOL;
foreach ($elements as $element) {
    if ($element === 3) {
        $copy = $element;
        $elements[] = $copy;
    }
    echo $element;
}
echo PHP_EOL;
echo json_encode($elements);

В результате получаем:

1234
[1,2,3,4,3]

А теперь, рассмотрим вполне реальную ситуацию, когда в цикле с элементами массива нужно что то сделать и сохранить это:

<?php
$elements = [1,2,3,4];
echo PHP_EOL;
foreach ($elements as &$element) {
    // do something with every element
    if ($element === 3) {
        $copy = $element;
        $elements[] = $copy;
    }
    echo $element;
}
echo PHP_EOL;
echo json_encode($elements);

И вот тут мы сталкиваемся с проблемой похлеще рекурсии без предусмотренного выхода из нее:

123.....333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 134217736 bytes) in /php on line 7
PHP Stack trace:
PHP   1. {main}() /php:0

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 134217736 bytes) in /php on line 7

Call Stack:
    0.0025     392288   1. {main}() /php:0

Это последствия передачи массива по ссылке

И лучше обойти это с помощью временного массива:

<?php
$elements = [1,2,3,4];
echo PHP_EOL;
$additionalElements = [];
foreach ($elements as &$element) {
    // do something with every element
    if ($element === 3) {
        $additionalElements[] = $element;
    }
    echo $element;
}
echo PHP_EOL;
echo json_encode(array_merge($elements, $additionalElements));

И, необходимый нам результат:

1234
[1,2,3,4,3]

Установка скомпилированной версии v8js в Ubuntu или CentOS для server-side rendering

  • Скачаем архив со скомпилированной версией расширения v8js.so

Получаем рут права

> sudo su
  • Создаем временную папку для скачивания и заходим в нее
# mkdir -p /opt/google
# cd /opt/google
  • Сохраняем архив с расширением для рендеринга на серверной стороне
# wget https://blog.bayrell.org/media/files/archives/v8-ubuntu-18.04-x64-6.4.388.18-2.1.0.tar.gz
  • Распаковываем архив тут же
# tar xvf v8-ubuntu-18.04-x64-6.4.388.18-2.1.0.tar.gz
  • Далее необходимо скопировать расширение в папку расширений для вашего PHP
    Получить папку с расширениями можно следующей командой
# php -i | grep extension_dir

Ниже можно увидеть результат команды

тогда копируем расширение в эту папку, в нашем случае это:

# cp /opt/google/v8/6.4/v8js.so /usr/lib64/php/modules
  • А теперь нужно добавить это расширение в ini конфиг php
    получаем папку, в которой хранятся дополнительные ini конфиги
# php -i | grep "additional .ini files"

Вывод будет примерно как на скриншоте ниже

Заходим в папку и создаем ini файл для v8js расширения
В нашем случае это:

# cd /etc/php.d
# nano 50-v8js.ini

И вставляем в файл следюущий код:

extension=v8js.so

Сохраняем файл (CTRL+O, CTRL+X)

  • Теперь можем проверить работоспособность установленного расширения
    Переходим в какую то временную папку на сервер и создаем тестовый php файл
# nano test_v8js.php

В который вставляем следующий код:

<?php
$v8js = new V8Js();
$JS = <<< EOT
  var s = 'Hello world';
  s;
EOT;
$r = $v8js->executeString($JS);
var_dump($r);

В случае успеха увидим вывод в консоли:

string(11) "Hello world"

Если, в качестве менеджера процессов вы используете, например, php-fpm — необходимо его перезагрузить

# systemctl restart php-fpm

Если у вас PHP 7.4 или инструкции выше не работают, можно обратиться к процедуре компиляции V8Js из официальных репозиториев для Ubuntu 20 или Ubuntu 22

Установка WordPress на CentOS7 c PHP7.2 и MySQL 8

Это последняя статья из серии «Устанавливаем блог WordPress на CentOS 7 с веб-сервером Caddy, PHP 7.2 и MySQL 8.0».

Ранее, для установки блога на вордпресс, мы уже сконфигурировали CentOS 7, установили майскл восьмой версии, пхп и кэдди в качестве быстрого, современного веб-сервера. Последний элемент — сам блог wordpress

Итак, на нашем сервере, переходим в директорию для веб-сайтов

$ cd /var/www

Скачиваем последнюю версию WordPress

$ sudo curl -O https://wordpress.org/latest.tar.gz

Распаковываем (архиватор распакует автоматически в директорию wordpress)

$ sudo tar zxf latest.tar.gz

Удаляем архив с файлами блога вордпресс (он нам больше не нужен)

$ sudo rm latest.tar.gz 

Устанавливаем права на директорию wordpress для caddy пользователя (ранее сконфигурированного при установке Caddy web-сервера)

$ sudo chown -R caddy:caddy wordpress

Теперь, подключим и настроим сайт нашего вордпресса

В данном примере, используем текстовый редактор nano, который мы ставили ранее (при конфигурировании операционной системы CentOS 7), однако вы можете использовать другой редактор, в том числе стандартный vi

Итак, открываем конфишурационный файл веб-сервера кедди

$ sudo nano /etc/caddy/Caddyfile

Копируем код ниже и вставляем его в файл конфигурации (при это необходимо заменить «example.com», в двух местах, доменом, который мы создавали в статье по выбору и приобретению простого и недорогого домена для вашего блога)

example.com {

    tls admin@example.com

    root /var/www/wordpress

    gzip

    fastcgi / 127.0.0.1:9000 php

    rewrite {

        if {path} not_match ^\/wp-admin

        to {path} {path}/ /index.php?_url={uri}

    }

}

Сохраняем (CTRL+O и ENTER для текстового редактора nano) и закрываем файл (CTRL+X).

Перезагружаем веб-сервер Caddy, чтобы применить новую конфигурацию

$ sudo systemctl restart caddy

Теперь наш блог должен открыться через браузер (пока что интерфейс для дальнейшего конфигурирования) — вводим в строке урл любого браузера наш домен (в моем случае это questpro.club), выбираем язык интерфейса (мне удобнее будет английский, но советую выбрать русский).

Жмем кнопку Let’s go

В предлагаемых полях на следующем экране вводим следующие данные (из этого мануала)

Database Name = wordpress

Username = wordpressuser

Password = gHspvn@36nBA

Database Host — оставляем значения по умолчанию

Table Prefix — оставляем значения по умолчанию.

Происходит инсталляция…

По ее завершении, вводим необходимые данные админа, для входа в админский аккаунт в вордпрессе. И далее пробуем заходить в админку с только что сгенерированными данными.

WordPress установлен

В следующей статье опишу процесс создания вашей собственной первой статьи и расскажу про популярный seo-плагин для начальной сео-оптимизации.

Установка PHP 7.2 на Centos 7 для WordPress

Это статья из серии «Устанавливаем блог WordPress на CentOS 7 с веб-сервером Caddy, PHP 7.2 и MySQL 8.0».

Для установки блога на WordPress мы уже сконфигурировали CentOS 7, установили майскл восьмой версии и кэдди в качестве быстрого, современного веб-сервера. Осталось поставить пхп с необходимыми плагинами.

На момент написании статьи CentOS 7 в стандартном репозитории имеет на борту php версии 5.4. И установить ее можно одной командой. Однако у меня было желание работать с более актуальной версией PHP (стабильной 7.2). В моем случае, необходимо заменить репозиторий (попутно установив утилиты для работы с репозиториями).

Последовательно выполняем команды ниже (может потребоваться ввод пароля от аккаунта операционной системы)

$ sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
$ sudo yum install epel-release
$ sudo yum install yum-utils
$ sudo yum-config-manager --disable remi-php54
$ sudo yum-config-manager --enable remi-php72

И, вот тут то, устанавливаем PHP с необходимыми для блога плагинами

$ sudo yum -y install php-cli php-fpm php-mysql php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath

проверяем установленную версию

$ php -v

Вывод должен быть наподобие

PHP 7.2.30 (cli) (built: Apr 15 2020 07:23:04) ( NTS )

Copyright (c) 1997-2018 The PHP Group

Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

Теперь, слегка модифицируем конфигурационный файл, чтобы PHP сервис мог запускаться от имени пользователя веб-сервера caddy.

Будем использовать текстовый редактор nano, который мы ставили ранее (описано в статье), однако вы можете использовать другой редактор, в том числе стандартный vi. Итак

$ sudo nano /etc/php-fpm.d/www.conf

Ищем фрагмент с user =  и group =  

; Unix user/group of processes

; Note: The user is mandatory. If the group is not set, the default user's group

;       will be used.

; RPM: apache Choosed to be able to access some dir as httpd

user = apache

; RPM: Keep a group allowed to write in log dir.

group = apache

И меняем apache на caddy. Сохраняем (CTRL+O и ENTER для nano) и закрываем файл (CTRL+X).

Запускаем PHP сервис

$ sudo systemctl start php-fpm

Вуаля!