Автор: SiberiaBread

  • Установка 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.