Краткая инструкция по быстрой установке и настройке веб-сервера в связке Gentoo GNU/Linux, Apache HTTP Server, PHP и MariaDB (MySQL).
Установка сервера баз данных
Для начала необходимо установить MariaDB (MySQL) сервер. В подавляющем большинстве веб-сайтов это — один из главных шагов, без которого нет смысла запускать проект.
Ниже приведены несколько команд, которые помогут запустить сервер БД на начальном этапе:
- установка и конфигурирование
# emerge --ask mariadb # emerge --config mariadb
- запуск службы mysql и включение её в автозагрузку
# rc-service mysql start # rc-update add mysql default
- начальная настройка с помощью mysql_secure_installation
# /usr/bin/mysql_secure_installation
Более подробно об установке сервера БД MariaDB (MySQL) можно почитать здесь: https://dondub.com/2021/05/zapusk-subd-mariadb-v-gentoo/
Установка веб-сервера
Теперь необходимо установить Apache HTTP Server
# USE="ithreads ssl apache2" emerge apache
Затем запускаем службу apache2 и включим её в автозагрузку
# rc-service apache2 start # rc-update add apache2 default
Теперь на другой машине в сети в браузере впишем адрес сервера:
http://IP-адрес-сервера или https://IP-адрес-сервера
И видим долгожданное It works!
Это — страница по умолчанию. Она расположена в директории /var/www/localhost/htdocs. При наличии виртуальных хостов её также можно применять как страницу ошибки ввода субдомена в адресную строку браузера. Поэтому настройки хоста по умолчанию можно оставить как есть, а содержимое самой страницы можно поменять на сообщение пользователю об ошибке.
Установка PHP
Пришло время установить интерпретатор PHP
# USE="apache2 mysql mysqli postgres pdo zip unicode cgi curl gd json ssl session flatfile fileinfo opcache" emerge --ask php
После этого необходимо будет внести изменения в параметры запуска Apache HTTP Server
Для этого открываем файл /etc/conf.d/apache2
# nano /etc/conf.d/apache2
находим такую строчку:
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D LANGUAGE"
и в неё перед закрытием кавычек добавим -D PHP
Должно получиться вот так:
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D LANGUAGE -D PHP"
Далее перезапускаем службу apache2
# rc-service apache2 restart
Теперь можно проверить работу PHP. Для этого создадим файл /var/www/localhost/htdocs/info.php
# touch /var/www/localhost/htdocs/info.php
откроем его
# nano /var/www/localhost/htdocs/info.php
и внесём такие строчки:
<?php phpinfo(); ?>
Проверяем: в адресной строке браузера вводим http://IP-адрес-сервера/info.php или https://IP-адрес-сервера/info.php и видим данные и настройки php.
Настройка виртуальных хостов
Перед созданием виртуальных хостов необходимо убедиться в наличии соответствующих A или AAAA записей на DNS-сервере. Эти записи создаются в личном кабинете в панели управления регистратора доменных имён, или на собственном DNS-сервере https://dondub.com/tag/nameserver/.
В первую очередь создадим две директории для хранения файлов сайта webserver.local
# mkdir /var/www/webserver.local /var/www/webserver.local/htdocs
Создадим файлик /var/www/webserver.local/htdocs/index.html
# touch /var/www/webserver.local/htdocs/index.html
откроем его
# nano /var/www/webserver.local/htdocs/index.html
и впишем:
<html> <body> <h1>webserver.local works!</h1> </body> </html>
Затем создадим 3 файла с конфигурацией хоста
# touch /etc/apache2/vhosts.d/webserver.local.conf /etc/apache2/vhosts.d/webserver.local.ssl.conf /etc/apache2/vhosts.d/webserver.local.include
Открываем файл /etc/apache2/vhosts.d/webserver.local.conf
# nano /etc/apache2/vhosts.d/webserver.local.conf
впишем
<VirtualHost *:80> ServerName www.webserver.local ServerAlias webserver.local Include /etc/apache2/vhosts.d/webserver.local.include <IfModule mpm_peruser_module> ServerEnvironment apache apache </IfModule> </VirtualHost>
затем /etc/apache2/vhosts.d/webserver.local.ssl.conf
# nano /etc/apache2/vhosts.d/webserver.local.ssl.conf
<IfDefine SSL> <IfModule ssl_module> <VirtualHost *:443> ServerName www.webserver.local ServerAlias webserver.local Include /etc/apache2/vhosts.d/webserver.local.include ErrorLog /var/log/apache2/ssl_error_log <IfModule log_config_module> TransferLog /var/log/apache2/ssl_access_log </IfModule> SSLEngine on SSLProtocol ALL -SSLv2 -SSLv3 SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:HIGH:!RC4:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK SSLHonorCipherOrder On SSLCertificateFile /etc/ssl/apache2/server.crt SSLCertificateKeyFile /etc/ssl/apache2/server.key #SSLCertificateChainFile /etc/ssl/apache2/ca.crt #SSLCACertificatePath /etc/ssl/apache2/ssl.crt #SSLCACertificateFile /etc/ssl/apache2/ca-bundle.crt #SSLCARevocationPath /etc/ssl/apache2/ssl.crl #SSLCARevocationFile /etc/ssl/apache2/ca-bundle.crl #SSLVerifyClient require #SSLVerifyDepth 10 #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/var/www/webserver.local/cgi-bin"> SSLOptions +StdEnvVars </Directory> <IfModule log_config_module> CustomLog /var/log/apache2/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </IfModule> </VirtualHost> </IfModule> </IfDefine>
и наконец
# nano /etc/apache2/vhosts.d/webserver.local.include
ServerAdmin root@webserver.local DocumentRoot "/var/www/webserver.local/htdocs" <Directory "/var/www/webserver.local/htdocs"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> <IfModule alias_module> ScriptAlias /cgi-bin/ "/var/www/webserver.local/cgi-bin/" </IfModule> <Directory "/var/www/webserver.local/cgi-bin"> AllowOverride None Options None Require all granted </Directory>
аналогично сделаем для хоста homeserver.local
# mkdir /var/www/homeserver.local /var/www/homeserver.local/htdocs # touch /var/www/homeserver.local/htdocs/index.html # nano /var/www/homeserver.local/htdocs/index.html
<html> <body> <h1>homeserver.local works!</h1> </body> </html>
# touch /etc/apache2/vhosts.d/homeserver.local.conf /etc/apache2/vhosts.d/homeserver.local.ssl.conf /etc/apache2/vhosts.d/homeserver.local.include # nano /etc/apache2/vhosts.d/homeserver.local.conf
VirtualHost *:80> ServerName www.homeserver.local ServerAlias homeserver.local Include /etc/apache2/vhosts.d/homeserver.local.include <IfModule mpm_peruser_module> ServerEnvironment apache apache </IfModule> </VirtualHost>
# nano /etc/apache2/vhosts.d/homeserver.local.ssl.conf
<IfDefine SSL> <IfModule ssl_module> <VirtualHost *:443> ServerName www.homeserver.local ServerAlias homeserver.local Include /etc/apache2/vhosts.d/homeserver.local.include ErrorLog /var/log/apache2/ssl_error_log <IfModule log_config_module> TransferLog /var/log/apache2/ssl_access_log </IfModule> SSLEngine on SSLProtocol ALL -SSLv2 -SSLv3 SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:HIGH:!RC4:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK SSLHonorCipherOrder On SSLCertificateFile /etc/ssl/apache2/server.crt SSLCertificateKeyFile /etc/ssl/apache2/server.key #SSLCertificateChainFile /etc/ssl/apache2/ca.crt #SSLCACertificatePath /etc/ssl/apache2/ssl.crt #SSLCACertificateFile /etc/ssl/apache2/ca-bundle.crt #SSLCARevocationPath /etc/ssl/apache2/ssl.crl #SSLCARevocationFile /etc/ssl/apache2/ca-bundle.crl #SSLVerifyClient require #SSLVerifyDepth 10 #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/var/www/homeserver.local/cgi-bin"> SSLOptions +StdEnvVars </Directory> <IfModule log_config_module> CustomLog /var/log/apache2/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </IfModule> </VirtualHost> </IfModule> </IfDefine>
# nano /etc/apache2/vhosts.d/homeserver.local.include
ServerAdmin root@homeserver.local DocumentRoot "/var/www/homeserver.local/htdocs" <Directory "/var/www/homeserver.local/htdocs"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> <IfModule alias_module> ScriptAlias /cgi-bin/ "/var/www/homeserver.local/cgi-bin/" </IfModule> <Directory "/var/www/homeserver.local/cgi-bin"> AllowOverride None Options None Require all granted </Directory>
и test.webserver.local
# mkdir /var/www/test.webserver.local /var/www/test.webserver.local/htdocs # touch /var/www/test.webserver.local/htdocs/index.html # nano /var/www/test.webserver.local/htdocs/index.html
<html> <body> <h1>test.webserver.local works!</h1> </body> </html>
# touch /etc/apache2/vhosts.d/test.webserver.local.conf /etc/apache2/vhosts.d/test.webserver.local.ssl.conf /etc/apache2/vhosts.d/test.webserver.local.include # nano /etc/apache2/vhosts.d/test.webserver.local.conf
<VirtualHost *:80> ServerName test.webserver.local ServerAlias test.webserver.local Include /etc/apache2/vhosts.d/test.webserver.local.include <IfModule mpm_peruser_module> ServerEnvironment apache apache </IfModule> </VirtualHost>
# nano /etc/apache2/vhosts.d/test.webserver.local.ssl.conf
<IfDefine SSL> <IfModule ssl_module> <VirtualHost *:443> ServerName test.webserver.local ServerAlias test.webserver.local Include /etc/apache2/vhosts.d/test.webserver.local.include ErrorLog /var/log/apache2/ssl_error_log <IfModule log_config_module> TransferLog /var/log/apache2/ssl_access_log </IfModule> SSLEngine on SSLProtocol ALL -SSLv2 -SSLv3 SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:HIGH:!RC4:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK SSLHonorCipherOrder On SSLCertificateFile /etc/ssl/apache2/server.crt SSLCertificateKeyFile /etc/ssl/apache2/server.key #SSLCertificateChainFile /etc/ssl/apache2/ca.crt #SSLCACertificatePath /etc/ssl/apache2/ssl.crt #SSLCACertificateFile /etc/ssl/apache2/ca-bundle.crt #SSLCARevocationPath /etc/ssl/apache2/ssl.crl #SSLCARevocationFile /etc/ssl/apache2/ca-bundle.crl #SSLVerifyClient require #SSLVerifyDepth 10 #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/var/www/test.webserver.local/cgi-bin"> SSLOptions +StdEnvVars </Directory> <IfModule log_config_module> CustomLog /var/log/apache2/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </IfModule> </VirtualHost> </IfModule> </IfDefine>
# nano /etc/apache2/vhosts.d/test.webserver.local.include
ServerAdmin root@test.webserver.local DocumentRoot "/var/www/test.webserver.local/htdocs" <Directory "/var/www/test.webserver.local/htdocs"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> <IfModule alias_module> ScriptAlias /cgi-bin/ "/var/www/test.webserver.local/cgi-bin/" </IfModule> <Directory "/var/www/test.webserver.local/cgi-bin"> AllowOverride None Options None Require all granted </Directory>
Перезапускаем службу apache2
# rc-service apache2 restart
на другой машине в адресной строке вводим
http://webserver.local
https://webserver.local
http://homeserver.local
https://homeserver.local
http://test.webserver.local
https://test.webserver.local
Подключение SSL-сертификатов
Один из самых эффективных способов настройки SSL-сертификатов — это через специализированные сервисы. Например — Certbot — https://certbot.eff.org/lets-encrypt/gentoo-apache
Там находится инструкция по установке и настройке сертификатов для Gentoo.