Запуск WordPress на OpenBSD 6.6 с помощью HTTPD OpenBSD

Вступление

Учитывая склонность OpenBSD к безопасности, имеет смысл использовать для этого ваш сайт WordPress, особенно потому, что WordPress и PHP, как правило, являются движущимися мишенями для детей сценариев. Так как httpd в OpenBSD предназначен главным образом для обслуживания статических страниц, операции POST зарезервированы для процессов fastcgi и slowcgi. Это усложняет мошенническому действующему субъекту возможность потенциально нарушить процесс веб-сервера и получить доступ к вашему серверу. Операции POST передаются процессу fastcgi и используют внешний интерпретатор. В этой статье мы обсудим не только настройку вашего сайта WordPress, но и некоторые основные методы обслуживания, а также способы резервного копирования и восстановления вашего сайта и его базы данных. Везде, где вы видите example.comдомен, замените его своим доменом.

Начальная конфигурация

Если вы еще этого не сделали, вам нужно будет создать /etc/doas.confфайл. Команда doas - это простая замена OpenBSD для sudo. Для удобства я добавил опцию nopass, чтобы вам не пришлось повторно вводить пароль при использовании doas. Если вы предпочитаете не иметь этого, просто опустите nopass.
su -
echo "permit nopass keepenv :wheel" > /etc/doas.conf
В зависимости от того, как OpenBSD был упакован для развертывания, иногда диспетчер пакетов может не иметь настроенного хранилища. Чтобы настроить официальный репозиторий OpenBSD, нам нужно создать /etc/installurlфайл.
doas su
echo "https://cdn.openbsd.org/pub/OpenBSD" > /etc/installurl
exit
Теперь нам нужно добавить PHP и некоторые дополнительные модули, которые понадобятся WordPress для обработки таких вещей, как изображения и шифрование. При появлении запроса выберите установку новейшего пакета PHP. Единственное, что вам нужно сделать, это скопировать INI-файлы модуля из каталога примеров в основной. Это должно быть сделано для того, чтобы включить дополнительные модули PHP.
doas pkg_add -r mariadb-client mariadb-server php php-curl php-mysqli php-zip pecl73-mcrypt pecl73-imagick wget
doas cp /etc/php-7.3.sample/* /etc/php-7.3/.

Получить зашифрованные сертификаты

В сегодняшнем мире веб-сайты должны обслуживаться через SSL или с помощью поисковых систем. К счастью, в OpenBSD есть отличное приложение acme-client. Клиент acme автоматически сгенерирует новый закрытый ключ и запросит новый полностью действующий сертификат. Клиент acme зависит от наличия веб-сервера, поэтому нам нужно быстро создать определение сервера по умолчанию.
С вашим любимым редактором, создавать /etc/httpd.conf. Мы добавим другие определения сервера в файл позже. На данный момент этого будет достаточно для правильной работы acme-клиента.
prefork 5
types { include "/usr/share/misc/mime.types" }

server "default" {
    listen on egress port 80
    root "/htdocs"
    directory index "index.html"

    location "/.well-known/acme-challenge/*" {
        request strip 2
        root "/acme"
    }
}
Также используя ваш любимый редактор, создайте /etc/acme-client.conf.
authority letsencrypt {
    api url "https://acme-v02.api.letsencrypt.org/directory"
    account key "/etc/acme/letsencrypt-privkey.pem"
}

authority letsencrypt-staging {
    api url "https://acme-staging-v02.api.letsencrypt.org/directory"
    account key "/etc/acme/letsencrypt-staging-privkey.pem"
}

domain example.com {
    alternative names { www.example.com }
    domain key "/etc/ssl/private/example.com.key"
    domain full chain certificate "/etc/ssl/example.com.crt"
    sign with letsencrypt
}
Теперь мы должны включить и запустить httpd. Как только мы это сделаем, мы сможем запустить acme-client и ждать, пока он получит наш новый, новый сертификат. После этого мы добавим задание cron для автоматического запроса нового каждые 7 дней, чтобы нам не приходилось беспокоиться об истечении срока действия.
doas rcctl enable httpd
doas rcctl start httpd
doas acme-client -v example.com
Теперь мы создаем работу cron. Добавьте эту строку ниже самой последней записи. В этом случае мы говорим клиенту acme запрашивать новый сертификат в 1:00 утра каждую субботу.
doas crontab -e
0       1       *       *       6       acme-client -F example.com && rcctl reload httpd

Настройка HTTPD для WordPress

Теперь пришло время настроить httpd для WordPress. Вместо того, чтобы помещать определение нашего веб-сайта непосредственно в него /etc/httpd.conf, мы собираемся поместить его в отдельный файл с именем /etc/httpd.conf.example.comи включить его в основной файл конфигурации. Как правило, рекомендуется разделять их, сохраняя определения для всего сайта в главном файле конфигурации, а настройки для конкретного домена - в другом.
Добавьте следующую строку в конец вашего /etc/httpd.confфайла:
include "/etc/httpd.conf.example.com"
Теперь, используя ваш любимый редактор, создайте свой /etc/httpd.conf.example.com. Для удобства мы собираемся создать отдельные файлы журнала для вашего домена. Это облегчает поиск потенциальных проблем с вашим сайтом.
server "example.com" {
    listen on egress port 80
    alias "www.example.com"

    # Automatically redirect to SSL
    block return 302 "https://$SERVER_NAME$REQUEST_URI"

    log {
            access "access-example.com"
            error "error-example.com"
    }
}

server "example.com" {
    listen on egress tls port 443
    alias "www.example.com"
    root "/htdocs/wordpress"
    directory index "index.php"

    log {
            access "access-example.com"
            error "error-example.com"
    }
    tcp { nodelay, backlog 10 }

    tls {
            certificate "/etc/ssl/example.com.crt"
            key "/etc/ssl/private/example.com.key"
    }
    hsts {
            # max-age value is the number of seconds in 1 year
            max-age 31556952
            preload
            subdomains
    }

    location "/.well-known/acme-challenge/*" {
            root "/acme"
            request strip 2
    }
    location "/posts/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "/htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
    location "/page/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "/htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
    location "/feed/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "/htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
    location "/comments/feed/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
     location "/wp-json/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
    location "/wp-login.php*" {
            authenticate "WordPress" with "/htdocs/htpasswd"
            fastcgi socket "/run/php-fpm.sock"
    }
    location "*.php*" {
            fastcgi socket "/run/php-fpm.sock"
    }
}
Для большей безопасности мы собираемся внедрить дополнительный запрос на ввод имени пользователя и пароля при входе на сайт администрирования WordPress. Поскольку сценаристы любят повторять попытки входа в WordPress, мы создаем дополнительную учетную запись на уровне веб-сервера. Как правило, они получают около 5 догадок, прежде чем WordPress выдаст 401 несанкционированную ошибку.
doas su
cd /var/www/htdocs
doas htpasswd htpasswd <user>
doas chown www:www htpasswd
doas chmod 0640 htpasswd
doas rcctl reload httpd

Подготовьте и настройте PHP и PHP-FPM

Мы должны внести изменения в php, чтобы ваша установка WordPress могла отправлять электронные письма. WordPress и некоторые плагины полагаются на возможность отправлять электронные письма, уведомляющие вас об обновлениях, оповещениях и изменениях. Невозможность отправлять электронные письма может нарушить некоторые функции WordPress. Поскольку httpd работает в среде chrooted, мы должны сообщить php, как отправлять электронные письма. Кроме того, мы должны сделать некоторые твики производительности для php-fpm.
Найдите sendmail_pathстроку /etc/php-7.3.iniи внесите следующие изменения:
; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; sendmail_path =
sendmail_path = /bin/femail -t -i
Найдите следующие строки /etc/php-fpm.confи измените их следующим образом:
pm.start_servers = 5
pm.min_spare_servers = 1
pm.max_spare_servers = 6
Следующим шагом является включение и запуск php-fpm.
doas rcctl enable php73_fpm
doas rcctl start php73_fpm

Подготовьте и настройте MariaDB

MariaDB - это вставная замена MySQL. Нам нужно выполнить некоторые начальные настройки и подготовить базу данных для WordPress.
Прежде чем мы сможем эффективно использовать MariaDB, нам нужно разрешить демону mysql использовать больше ресурсов, чем по умолчанию. Для этого внесите следующие изменения /etc/login.conf, добавив эту запись внизу.
mysqld:\
    :openfiles-cur=1024:\
    :openfiles-max=2048:\
    :tc=daemon:
Мы должны внести некоторые изменения в конфигурационный файл MariaDB /etc/my.cnf. Благодаря тому, что клиент и сервер mysql обмениваются данными через сокет домена UNIX вместо TCP, использование памяти вашего сервера может быть снижено. Вам не нужно вносить все изменения, предложенные ниже. Двумя важными изменениями являются socketстрока и закомментирование bind-addressстроки. Это перемещает сокет внутри /var/wwwсреды chroot, чтобы WordPress мог подключиться к базе данных. Закомментируя bind-addressстроку, мы запрещаем MariaDB прослушивать порт TCP.
[client-server]
socket=/var/www/var/run/mysql/mysql.sock
#port=3306

# This will be passed to all MariaDB clients
[client]
#password=my_password

# The MariaDB server
[mysqld]
# To listen to all IPv4 network addresses, use "bind-address = 0.0.0.0"
#bind-address=127.0.0.1
# Directory where you want to put your data
#data=/var/mysql
# This is the prefix name to be used for all log, error and replication files
#log-basename=mysqld
# Logging
#log-bin=/var/mysql/mariadb-bin
#max_binlog_size=100M
#binlog_format=row
#expire_logs_days = 7
#general-log
#slow_query_log
query_cache_type = 1
query_cache_limit = 1M
query_cache_size = 16M
Теперь нам нужно запустить двоичный файл установки MariaDB, включить и запустить MariaDB. Эта процедура установит пароль root и при необходимости удалит тестовую базу данных. Рекомендуется следовать всем советам на этапе безопасной установки.
doas mysql_install_db
doas rcctl enable mysqld
doas rcctl start mysqld
doas mysql_secure_installation
Создайте базу данных WordPress и пользователя базы данных. Не забудьте заменить <wp_user>имя пользователя базы данных и <password>сложный пароль по вашему выбору.
mysql -u root -p 
CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO '<wp_user>'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
EXIT

Установить и настроить WordPress

У WordPress не было официального порта OpenBSD в течение достаточно долгого времени, потому что он в значительной степени работает прямо из коробки. Загрузите, распакуйте и переместите папку установки WordPress.
cd /tmp
wget https://wordpress.org/latest.tar.gz
tar xvfz latest.tar.gz
doas mv wordpress /var/www/htdocs/.
doas chown -R www:www /var/www/htdocs/wordpress
doas chmod 0755 /var/www/htdocs/wordpress
cd /var/www/htdocs/wordpress/
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
Мы должны скопировать /etc/resolv.confи /etc/hostsв каталог, который мы собираемся создать, с именем /var/www/etc. Это так, что WordPress может успешно выйти на рынок. Это понадобится вам для загрузки плагинов и тем через сайт администратора WordPress. Также важно, чтобы плагин Jet Pack работал правильно.
doas mkdir /var/www/etc
doas cp /etc/hosts /var/www/etc/.
doas cp /etc/resolv.conf /var/www/etc/.
Отсюда перейдите на свой веб-сайт WordPress, используя https, по URL-адресу, который вы указали в определении веб-сервера. Если все работает правильно, вы должны увидеть мастер установки WordPress. Когда вы получаете возможность указать сервер базы данных, вы должны использоватьlocalhost:/var/run/mysql/mysql.sock
После установки WordPress пришло время настроить постоянные ссылки, чтобы они выглядели более дружественными к SEO. На экране администратора WordPress перейдите к Settings -> Permalinks. Нажмите на пользовательскую структуру и введите /posts/%postname%. После внесения этого изменения нажмите кнопку «Сохранить изменения». Теперь у вас есть намного приятнее выглядящие ссылки. Например, постоянная ссылка будет выглядеть так:https://example.com/posts/example-blog-post
Отсюда у вас должен быть базовый веб-сайт, готовый к работе. Убедитесь, что вы устанавливаете плагины, такие как Jet Pack и WP-Super Cache. Плагин WP-Super Cache помогает ускорить ваш веб-сайт за счет кэширования веб-страниц и устранения постоянных поисков в базе данных, а JetPack предоставляет вам отличную статистику просмотров.

Резервное копирование вашего сайта и базы данных WordPress

Само собой разумеется, что резервное копирование вашего сайта и базы данных очень важно. К счастью, это довольно легко сделать. Сделайте резервную копию как в свой домашний каталог, а затем вы можете скопировать их через scp в другое место. Вы также можете создать снимок через панель управления Vultr. Это хорошая идея, чтобы сделать оба.
cd /var/www/htdocs
tar cvfz wordpress.tgz wordpress/
cp wordpress.tgz /home/user
mysqldump -u root -p wordpress > wordpress.sql && gzip wordpress.sql

Восстановление вашего сайта WordPress

Если ваша база данных была повреждена и восстановление необходимо, выполните следующие действия:
gunzip wordpress.sql.gz
mysql -u root -p wordpress
DROP USER '<user>'@'localhost';
DROP DATABASE wordpress;
CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO '<wp_user>'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
EXIT
mysql -u root -p wordpress < wordpress.sql
Если вы внесли изменения в файл сценария WordPress, который что-то сломал, вы всегда можете переустановить WordPress через панель управления администратора. Найдите Updatesраздел и нажмите на ссылку. Ищите кнопку с надписью Re-install Now. Это по крайней мере исправит то, что сломано, но большая часть вашей конфигурации должна остаться нетронутой.
Если ваша база данных в хорошем состоянии, но вы случайно отредактировали файл и сломали его до такой степени, что вы даже не можете добраться до консоли администратора WordPress, то выполните следующие действия:
rm /var/www/htdocs/wordpress
cp /home/user/wordpress.tgz /tmp
tar xvfz wordpress.tgz
mv wordpress /var/www/htdocs/.
chown -R www:www /var/www/htdocs/wordpress
cd /var/www/htdocs/wordpress
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

Добавить комментарий

Автору будет очень приятно узнать обратную связь о своем руководстве.

Комментариев 0