Запуск LAMP-сервера в Gentoo

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *