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

Вступление

Учитывая склонность 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 {} \;


Leave a Comment

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

6 невероятных фактов о Nintendo Switch

6 невероятных фактов о Nintendo Switch

Многие из вас знают Switch, который выйдет в марте 2017 года, и его новые функции. Для тех, кто не знает, мы подготовили список функций, которые делают «Switch» обязательным гаджетом.

Технические обещания, которые все еще не выполнены

Технические обещания, которые все еще не выполнены

Вы ждете, когда технологические гиганты выполнят свои обещания? проверить, что осталось недоставленным.

Функциональные возможности уровней эталонной архитектуры больших данных

Функциональные возможности уровней эталонной архитектуры больших данных

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

Как ИИ может вывести автоматизацию процессов на новый уровень?

Как ИИ может вывести автоматизацию процессов на новый уровень?

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

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA стало довольно сложно решать пользователям за последние несколько лет. Сможет ли он оставаться эффективным в обнаружении спама и ботов в ближайшем будущем?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

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

Телемедицина и удаленное здравоохранение: будущее уже здесь

Телемедицина и удаленное здравоохранение: будущее уже здесь

Что такое телемедицина, дистанционное здравоохранение и их влияние на будущее поколение? Это хорошее место или нет в ситуации пандемии? Прочтите блог, чтобы узнать мнение!

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Возможно, вы слышали, что хакеры зарабатывают много денег, но задумывались ли вы когда-нибудь о том, как они зарабатывают такие деньги? Давайте обсудим.

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Недавно Apple выпустила macOS Catalina 10.15.4, дополнительное обновление для исправления проблем, но похоже, что это обновление вызывает больше проблем, приводящих к поломке компьютеров Mac. Прочтите эту статью, чтобы узнать больше