Что же, в антитезу рефлексиям самое время заняться установкой и тюнингом веб-сервера.
Обычно работаю с rpm-based дистрибутивами линукса: RHEL, Centos, Fedora, OpenSUSE. Имеющий место быть далее порядок действий я изложил, открыв историю команд на веб-сервере под Centos Stream 9. Отлично, поехали.
Сходу обозначу ряд моментов: все манипуляции описаны на основе работы с инстансом AWS, который по-прежнему без особых проблем доступен для граждан России, при условии наличия счета в иностранном банке, конечно. В принципе, проблема несложно решается путем взаимодействия с друзьями-знакомыми, уехавшими из страны.
На момент публикации данного материала - AWS при регистрации легко и непринужденно проглатывает номер мобильного телефона российских операторов. Вам лишь нужно указать Казахстан в качестве своей страны, у казахов (пока что) тоже префикс +7. Контрольная эсэмэска от AWS единожды придет на ваш смартфон без малейших проблем.
Обратите внимание, когда речь об Amazon Web Service - нет нужды настраивать firewall. Он уже настроен уровнем выше вашего линукса, по умолчанию открыт лишь ssh, вы можете дополнительно открыть другие порты, при необходимости, в веб-консоли AWS.
Обновление дистрибутива. Первое, что необходимо сделать после того, как вы войдете по ssh на свой виртуальный сервер:
sudo dnf update --refresh
sudo reboot
Второе, что необходимо. Здесь напомню, первый год работы на AWS для вас бесплатен, но при условии крайне ограниченных ресурсов. Например, instance type t3.micro, доступный на Free Tier, предусматривает лишь 1GB RAM, зато позволен объем физической памяти до 30 GB. Отсюда следует, что нам нужен файл подкачки. Как его сформировать, описано в конце этой статьи.
EC2 Free Tier
The EC2 Free Tier lets you explore and experiment with EC2 at no cost. You get a limited amount of free access to EC2 for 12 months, starting when you sign up for an AWS account.
Once your usage exceeds the Free Tier limits, or you’ve been an AWS customer for more than 12 months, we start charging you for usage. Therefore, it’s crucial that you keep track of your usage to avoid billing surprises.
When we calculate your Free Tier usage, we count all the resources you’re using in all the AWS Regions. To easily locate and manage your EC2 resources across all the different AWS Regions, you can use the EC2 Global View.
Заметьте, ничто не мешает вам реализовать описанный алгоритм настройки сервера в любом другом, помимо AWS, облаке.
Поставим Midnight Commander, либо иной, на ваш выбор, файловый менеджер:
sudo dnf install mc
Далее PHP. Очень рекомендую репозиторий Remi, там находим отличный wizard, который, в зависимости от требуемой версии PHP и дистрибутива, предлагает простую последовательность команд установки. Например, чтобы установить PHP 8.3 на Centos мне понадобилось следующее:
sudo dnf config-manager --set-enabled crb
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
sudo dnf module install php:remi-8.3
sudo dnf install php-opcache
База данных Mariadb:
sudo curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
sudo dnf install MariaDB-server MariaDB-client
sudo systemctl enable mariadb
sudo systemctl start mariadb
sudo systemctl status mariadb
sudo mariadb-secure-installation
Как-то так. Впрочем, всегда можно уточнить актуальную процедуру инсталляции на сайте разработчиков, также здесь, на форуме.
Редактируем конфигурационный файл MariaDB:
sudo mcedit -b /etc/my.cnf
Оттолкнуться можно от простого, учитывая, опять-таки, что сервер у нас явно не космический:
[mysqld]
innodb_buffer_pool_size = 128M
innodb_log_buffer_size = 32M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
init_connect='SET collation_connection = utf8_unicode_ci'
character-set-server = utf8
collation-server = utf8_unicode_ci
[client]
default-character-set = utf8
[mysqld_safe]
# log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
sudo service mariadb restart
Ставим апач:
sudo dnf in httpd
sudo systemctl enable httpd.service
sudo systemctl start httpd.service
sudo service httpd restart
phpMyAdmin:
sudo dnf in phpmyadmin
Редактируем два файла, как описано здесь. Очень вероятно, пригодятся две эти странички форума: раз и два.
Слегка тюнингуем, при желании, префорк апача. Возможно, поможет сохранить сервер на плаву, если накинется ботосетка. Впрочем, сахар, соль и фломастеры сугубо по вкусу:
sudo mcedit -b /etc/httpd/conf.modules.d/00-mpm.conf
Полностью рабочий пример можно глянуть, как всегда, на форуме.
Не забываем про отправку писем (посредством внешнего SMTP сервера в данном случае, подробнее), разрешаем апачу доступ вовне:
sudo setsebool -P httpd_can_network_connect 1
sudo dnf in openssl mod_ssl
Если у вас несколько сайтов, вам понадобится virtualhost:
sudo mcedit -b /etc/httpd/conf.d/vhosts.conf
Примеров конфигов в Сети немало. Например, так:
<VirtualHost *:443>
ServerName vash_site
DocumentRoot /var/www/vash_site
ErrorLog /var/www/logs/vash_site_ssl.error.log
CustomLog /var/www/logs/vash_site_ssl.access.log common
SSLEngine on
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLHonorCipherOrder on
SSLCompression off
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
<Directory /var/www/vash_site>
Options FollowSymlinks
AllowOverride All
Require all granted
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/vash_site/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/vash_site/privkey.pem
</VirtualHost>
Как видите, в данном случае Virtual Host Configuration File сконфигурирован с учетом того, что вы используете бесплатный трехмесячный сертификат LetsEncrypt, автоматически обновляемый посредством certbot:
sudo dnf install epel-release
sudo dnf in snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap
sudo reboot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --apache
Впрочем, оптимально воспользоваться инструкциями страницы разработчика.
Перенос сертификата и настроек cerbot с другого сервера.
SSL/TLS Strong Encryption: настройка безопасного HTTPS для Apache, статья на тему. В общем, если вы ограничитесь включением OCSP Stapling, этого для начала вполне достаточно:
SSLUseStapling On
SSLStaplingCache shmcb:/run/httpd/ssl_stapling(32768)
Если ваш веб-сервер предназначен для публикации сайта под управлением Joomla - вам, вероятно, пригодится описание Joomla CLI в контексте работы с cron. По ссылке.
Вот, в принципе, и все, о чем хотел сегодня рассказать. Ряд статей блога, часть которых послужила основой этого краткого обзора - по тегу Red Hat Enterprise Server, легко найдете на этой страничке. Вопросы, если возникнут - как обычно, на форуме. До встречи.
Комментарии в блоге