Краткая инструкция по быстрой установке и настройке веб-сервера в связке 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.







