Установка WordPress на Alpine Linux

Для установки WordPress необходимо чтобы на сервере установлены следующие компоненты:

  • PHP версии 8.2 или выше
  • MySQL 8.0, 8.4 или MariaDB 10.11, 11.4
  • Web-Сервер Nginx или Apache

Установить данные компоненты можно с помощью следующей команды:

apk add php84-fpm php84-cgi php84-mysqli php84-curl php84-dom php84-exif php84-fileinfo php84-pecl-imagick php84-mbstring php84-zip php84-gd php84-iconv php84-intl php84-xml php84-cli php84-simplexml pcre nginx certbot certbot-nginx mariadb mariadb-client

После этого необходимо настроить php-fpm таким образом, чтобы его запуск осуществлялся из под пользователя Nginx. Сделать это можно, изменив группу и пользователя в файле /etc/php84/php-fpm.d/www.conf, необходимо изменить данные строчки:

user=nobody
group=nobody

на эти:

user=nginx
group=nginx

Далее добавляем Nginx и php-fpm в автозапуск:

rc-update add nginx
rc-update add php-fpm84

И запускаем их:

rc-service nginx start
rc-service php-fpm84 start

Для запуска базы данных MariaDB необходимо сначала создать её файлы. По документации Alpine Linux сделать это можно с помощью данной команды:

mariadb-install-db --user=mysql --datadir=/var/lib/mysql

После данных действий запускаем добавляем MariaDB в автозапуск и запускаем её:

rc-update add mariadb
rc-service mariadb start

В директории /etc/nginx/http.d/ создаем конфигурационный файл wordpress.conf со следующим содержимым:

server {
        listen 80;
        server_name example.ru www.example.ru;

        root /var/www/wordpress;

        index index.php;

        location / {
                try_files $uri $uri/ /index.php$args;
        }

        location ~ \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                include fastcgi.conf;
        }
        location ~* /(?:uploads|files)/.*\.php$ {
                deny all;
        }
        location ~ /\. {
                deny all;
        }

        location ~ \.(js|css|png|jp?eg|gif|ico)$ {
                expires 30d;
        }
}

Где вместо example.ru используем своё доменное имя. Данный пример конфигурациооного файла был взят из официальной документации WordPress. Необного о правилах, используемых в конфигурационном файле. Следующее правило необходимо для запрета выполнения скриптов в директориях uploads и files:

location ~* /(?:uploads|files)/.*\.php$ {
    deny all;
}

Правило ниже действует аналогично и запрещает доступ к скрытым файлам (которые начинаются с точки):

location ~ \.(js|css|png|jp?eg|gif|ico)$ {
    expires 30d;
}

Следующий блок указывает, сколько будут кэшироваться в браузере файлы формата js, css, png, jpeg, gif, ico:

location ~ \.(js|css|png|jp?eg|gif|ico)$ {
    expires 30d;
}

После создания файла /etc/nginx/http.d/wordpress.conf перечитываем все конфигурационные файлы Nginx с помощью следующей команды:

nginx -s reload

Далее переходим в директорию /var/www, скачиваем дистрибутив WordPress и распаковываем его:

wget https://wordpress.org/latest.zip
unzip latest.zip

Меняем владельца всех файлов WordPress с root на nginx, чтобы WordPress мог их читать и менять в случае необходимости:

chown -R nginx:nginx /var/www/wordpress

Следующим шагом необходимо создать базу данных для WordPress. Для этого подключаемся к серверу баз данных:

mariadb

После чего создаем пользователя базы данных:

create user 'wordpress'@'localhost' IDENTIFIED BY 'password';

Где вместо password — ваш пароль. Далее создаем саму базу данных:

create database wordpress;

И предоставляем доступы к базе данных пользователю wordpress@localhost:

grant all on wordpress.* to 'wordpress'@'localhost';

После отключаемся от сервера баз данных. Сделать это можно введя в командной строке MariaDB \q.

Далее необходимо проверить, что по вашему домену открывается WordPress. Для этого введите в браузере ваш домен и если вы видите установку WordPress как на изображении, значит всё сделано верно.

После этого можно выпустить бесплатный SS Let’s Encrypt сертификат с помощью команды:

certbot --nginx -n -m admin@example.ru --agree-tos -d www.example.ru -d example.ru

Данная команда выпустит SSL-сертификат и автоматически сделает перенаправление с HTTP на HTTPS. Сертификат действует 90 дней, после чего его необходимо будет перевыпустить с помощью команды:

certbot renew --nginx

В качестве альтернативы вы можете настроить Crontab таким образом, чтобы сертификат выпускался автоматически каждые 2-3 месяца. Информацию про настройку Crontab вы можете прочитать в официальной Wiki Alpine Linux.