apacheApache, Nginx, PHP и Percona DB

Эта инструкция расскажет вам о том, как установить одну из самых часто используемых связок в веб-разработке: LAMP (Linux, Apache, MySQL/MariaDB и PHP/PhpMyAdmin). Кроме подробной пошаговой инструкции по настройке сервера вам также будут представлены несколько замечательных возможностей (быстрых и грязных Bash скриптов), которые отсутствуют в системе Arch Linux, но которые могут облегчить работу по созданию множества виртуальных хостов, генерации SSL сертификатов и ключей, необходимых для безопасных транзакций HTTS.

Шаг 1: Установка базового программного обеспечения LAMP

1. Обновим нашу систему с помощью утилиты pacman.

sudo pacman -Syu

2. Когда процесс обновления завершиться, установим LAMP по частям, начнём с установки веб-сервера Apache Web Server и запустим/проверим демон каждого серверного процесса.

sudopacman -S apache
sudo systemctl start httpd
sudo systemctl status httpd
01

3. Установим динамический скриптовый язык на стороне сервера PHP и его модуль для Apache.

sudo pacman -S php php-apache

4. Последним шагом установим систему управления базами данных MySQL, выберите вариант 1 (MariaDB) – форк от сообщества.

sudo pacman -S mysql

Выполним инициализацию:

sudo mysql_install_db --user=mysql --basedir=/usr--datadir=/var/lib/mysql

ЛИБО следующей командой (запустите только одну из двух):

sudo mariadb-install-db --user=mysql --basedir=/usr--datadir=/var/lib/mysql

Запустите и проверьте статус демона.

sudo systemctl start mysqld
sudo systemctl status mysqld
02

Не запутайтесь. Мы устанавливаем MariaDB, но она настолько совместима с MySQL, что служба запускается аналогичной командой. Аналогичной же командой производится подключение к БД. Вы можете установить оригинальную MySQL из AUR – если это кому-то интересно, то пишите в комментариях и материал будет добавлен.

Теперь мы имеем установленное базовое программное обеспечение LAMP с настройками по умолчанию.

Шаг 2: Обезопасим СУБД MySQL

5. Следующим шагом обезопасим СУБД MySQL настроив пароль для аккаунта root, удалив анонимные пользовательские аккаунты, удалив тестовую базу данных и отключив удалённый вход для пользователя root (когда попросят ввести текущий пароль, то просто нажмите клавишу [Enter] затем введите два раза новый пароль, на все вопросы выбирайте ответы по умолчанию, т.е. Да).

sudo mysql_secure_installation

6. Проверьте подключение к базе данных MySQL следующей командой, для выхода наберите quit или exit.

mysql -u root -p

Шаг 3: Модификация главного конфигурационного файла Apache

7. Следующие настройки, в первую очередь, относятся к веб-серверу Apache для обеспечения динамического интерфейса для виртуального хостинга со скриптовым языком PHP, виртуальных хостов SSL или не-SSL; это можно сделать модификацией файла настроек службы httpd.

Для начала откройте конфигурационный файл Apache вашим любимым текстовым редактором.

sudo nano /etc/httpd/conf/httpd.conf

И в низ этого файла добавьте следующие две строки.

Include Optional conf/sites-enabled/*.conf Include Optional conf/mods-enabled/*.conf

Смысл этих строк в том, мы говорим Apache, что начиная с этого момента ему следует читать последующие настройки из всех файлов, которые расположены в /etc/httpd/conf/sites-enabled/ (виртуальный хостинг) и /etc/httpd/conf/mods-enabled/ (для включения модулей сервера) и системный путь которых заканчивается расширением .conf.

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

sudo mkdir/etc/httpd/conf/sites-available
sudo mkdir/etc/httpd/conf/sites-enabled
sudo mkdir/etc/httpd/conf/mods-enabled

Путь sites-available содержит файлы настроек всех виртуальных хостов, которые не активированы на Apache, но следующий скрипт Bash будет использовать эту директорию для связи и задействования веб-сайтов, которые там расположены.

Шаг 4: Создание команд Apache a2eniste и a2diste

9. Теперь время создать скрипты Apache a2ensite и a2dissite, которые будут выполнять команды по включению и отключению файлов настроек виртуальных хостов. Наберите команду cd для возвращения в вашу домашнюю директорию и создайте a2eniste и a2dissite используя ваш любимый редактор.

sudo nano a2ensite

Добавьте следующие содержимое в этот файл.

#!/bin/bashiftest-d /etc/httpd/conf/sites-available&& test-d /etc/httpd/conf/sites-enabled; thenecho"-------------------------------"elsemkdir/etc/httpd/conf/sites-availablemkdir/etc/httpd/conf/sites-enabledfiavail=/etc/httpd/conf/sites-available/$1.confenabled=/etc/httpd/conf/sites-enabledsite=`ls/etc/httpd/conf/sites-available/`if[ "$#"!= "1"]; then        echo"Use script: n2ensite virtual_site"        echo-e "\nAvailable virtual hosts:\n$site"        exit0elseiftest-e $avail; thensudoln-s $avail $enabledelseecho-e "$avail virtual host does not exist! Please create one!\n$site"exit0fiiftest-e $enabled/$1.conf; thenecho"Success!! Now restart Apache server: sudo systemctl restart httpd"elseecho-e "Virtual host $avail does not exist!\nPlease see avail virtual hosts:\n$site"exit0fifi

Теперь создайте файл баш скрипта a2dissite.

sudo nano a2dissite

Добавьте следующее содержание.

#!/bin/bashavail=/etc/httpd/conf/sites-enabled/$1.confenabled=/etc/httpd/conf/sites-enabledsite=`ls/etc/httpd/conf/sites-enabled`if[ "$#"!= "1"]; then        echo"Use script: n2dissite virtual_site"        echo-e "\nAvailable virtual hosts: \n$site"        exit0elseiftest-e $avail; thensudorm$availelseecho-e "$avail virtual host does not exist! Exiting"exit0fiiftest-e $enabled/$1.conf; thenecho"Error!! Could not remove $avail virtual host!"elseecho-e "Success! $avail has been removed!\nsudo systemctl restart httpd"exit0fifi

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

sudo chmod+x a2ensite a2dissite
sudo cpa2ensite a2dissite /usr/local/bin/

10. Установка ServerName для подавления предупреждения

Далее мы добавим одну строку в файл /etc/httpd/conf/httpd.conf чтобы убрать сообщение с предупреждением. Хотя это и безвредно, если вы не установили ServerName на глобальном уровне, вы будете получать следующее сообщение о синтаксической ошибке в конфигурации Apache:

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

Откройте главный конфигурационный файл текстовым редактором:

sudo nano /etc/httpd/conf/httpd.conf

Внутри, в конце файла добавьте директиву ServerName, указывающую на ваше основное доменное имя. Если у вас нет связанного с вашим сервером доменного имени, вы можете использовать внешний IP сервера:

. . .ServerName server_domain_или_IP

Если вы забыли внешний IP сервера, то проверить его можно так:

curl suip.biz/ip/

Для локального веб-сервера можно сделать следующую запись:

ServerName localhost

Когда закончите, сохраните и закройте файл.

Для того, чтобы изменения вступили в силу, перезапустите Apache:

sudo systemctl restart httpd

Шаг 5: Создание виртуальных хостов в Apache

11. Дефолтный конфигурационный файл виртуальных хостов для веб-сервера Apache на Arch Linux является файлом httpd-vhosts.conf, который размещён в директории /etc/httpd/conf/extra/, но если у вас система, которая использует множество виртуальных хостов, то может быть трудно отследить, какой веб-сайт был активирован, а какой нет. Если вы хотите отключить веб-сайт, вы должны закомментировать или удалить все его директивы, и это может быть трудной миссией, если ваша система обслуживает множество веб-сайтов и ваш веб-сайт имеет больше конфигурационных директив.

Использование путей sites-available и sites-enable, здорово упрощает работу по включению и отключению веб-сайтов и также сохраняет конфигурационные файлы всех веб-сайтов в независимости от того, активированы они или нет.

Следующим шагом мы собираемся сконструировать первый виртуальный хост, который указывает на дефолтный localhost с дефолтным путём DocumentRoot для обслуживания файлов веб-сайта (/srv/http).

sudo nano /etc/httpd/conf/sites-available/localhost.conf

Здесь добавьте следующие директивы Apache.

<VirtualHost *:80>        DocumentRoot "/srv/http"        ServerName localhost        ServerAdmin [email protected]        ErrorLog "/var/log/httpd/localhost-error_log"        TransferLog "/var/log/httpd/localhost-access_log"<Directory />    Options +Indexes +FollowSymLinks +ExecCGI    AllowOverride All    Order deny,allow    Allow from allRequire all granted</Directory></VirtualHost>

Самыми важными выражениями здесь являются директивы Port и ServerName, которые инструктируют Apache открыть сетевое подключение на порту 80 и перенаправлять все запросы с именем localhost на обслуживаемые файлы, размещённые по пути /srv/http/.

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

sudo a2ensite localhost
sudo systemctl restart httpd

13. Затем перейдите в своём браузере по адресе http://localhost, если вы работаете с локальной системой Arch или по адресу http://Arch_IP если вы используете удалённую систему.

03

Шаг 6: Включение SSL с виртуальным хостингом на LAMP (опционально)

Этот шаг можно пропустить. На локальном сервере (localhost) этот шаг рекомендуется пропустить.


SSL (Secure Sockets Layer) – это протокол, созданный для безопасных HTTP соединений по сети или в Интернете, который делает так, что поток данных переправляется через безопасный канал, используя симметричные/ассиметричные ключи шифрования, которые предоставляются в Arch Linux пакетом OpenSSL.

14. По умолчанию модоуль SSL на включен на Apache в Arch Linux и может быть активирован раскомментированием строки модуля mod_ssl.so в конфигурационном файле httpd.conf и Include httpd-ssl.conf файла, размещённом в директории httpd extra.

Но для упрощения, мы собираемся создать новый модульный файл для SSL в директории mods-enabled, главный конфигурационный файл Apache оставить нетронутым. Создайте следующий файл для модуля SSL и добавьте следующее содержимое.

sudo nano /etc/httpd/conf/mods-enabled/ssl.conf

Добавьте туда.

LoadModule ssl_module modules/mod_ssl.soLoadModule socache_shmcb_module modules/mod_socache_shmcb.soListen 443SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5SSLPassPhraseDialog  builtinSSLSessionCache        "shmcb:/run/httpd/ssl_scache(512000)"SSLSessionCacheTimeout  300

15. Теперь создайте файл виртуального хоста, который указывает на то же самое имя localhost, но использует в это же время конфигурационный файл сервера SSL и слега измените его имя на то, которое бы напоминало вам, что он здесь для localhost с SSL.

sudo nano /etc/httpd/conf/sites-available/localhost-ssl.conf

Добавьте следующее содержимое в этот файл.

<VirtualHost *:443>        DocumentRoot "/srv/http"        ServerName localhost        ServerAdmin [email protected]        ErrorLog "/var/log/httpd/localhost-ssl-error_log"        TransferLog "/var/log/httpd/localhost-ssl-access_log"SSLEngine onSSLCertificateFile "/etc/httpd/conf/ssl/localhost.crt"SSLCertificateKeyFile "/etc/httpd/conf/ssl/localhost.key"<FilesMatch "\.(cgi|shtml|phtml|php)$">    SSLOptions +StdEnvVars</FilesMatch><Directory "/srv/http/cgi-bin">    SSLOptions +StdEnvVars</Directory>BrowserMatch "MSIE [2-5]"\         nokeepalive ssl-unclean-shutdown\         downgrade-1.0 force-response-1.0CustomLog "/var/log/httpd/ssl_request_log"\          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"<Directory />    Options +Indexes +FollowSymLinks +ExecCGI    AllowOverride All    Order deny,allow    Allow from allRequire all granted</Directory></VirtualHost>

Кроме директив Port и ServerName, другие важные директивы это указание на файл сертификата SSL и файл ключей SSL, которые ещё не созданы, поэтому не перезапускайте веб-сервер Apache или вы получите ошибки.

16. Для создания требуемых файлов сертификата SSL установите пакет OpenSSL набрав нижеприведённую команду.

sudo pacman -S openssl

17. Затем создайте следующий баш скрипт, который автоматически создаёт и сохраняет все ваши сертификаты и ключи Apache в системной директории /etc/httpd/conf/ssl/.

nano apache_gen_ssl

Добавьте в этот файл следующий контент, сохраните его и сделайте исполнимым.

#!/bin/bashmkdir/etc/httpd/conf/sslcd/etc/httpd/conf/sslecho-e "Enter your virtual host FQDN: \nThis will generate the default name for Nginx  SSL certificate!"readcertopenssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out $cert.keychmod600 $cert.keyopenssl req -new -key $cert.key -out $cert.csropenssl x509 -req -days 365 -in$cert.csr -signkey $cert.key -out $cert.crtecho-e " The certificate "$cert" has been generated!\nPlease link it to Apache SSL available website!"ls-all /etc/httpd/conf/sslexit0
sudo chmod+x apache_gen_ssl

Если вы хотите, чтобы этот скрипт был доступен во всей системе по короткой команде, то сделайте так.

sudo cp./apache_gen_ssl/usr/local/bin/

18. Теперь сгенерируйте ваш сертификат и ключи запустив этот скрипт. Предоставьте ваши SSL опции и не забудьте чтобы имя сертификата и общее имя соответствовали вашему официальному имени домена (FQDN).

sudo apache_gen_ssl

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

Для соответствия вышеприведённым настройкам, переименуем файлы сертификатов:

sudo mv/etc/httpd/conf/ssl/.crt /etc/httpd/conf/ssl/localhost.crtsudomv/etc/httpd/conf/ssl/.key /etc/httpd/conf/ssl/localhost.key

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

sudo a2ensite localhost-ssl
sudo systemctl restart httpd

Вот оно! Для проверки откройте в вашем браузере адрес и добавьте HTTPS протокол: https://localhost или https://system_IP.

Шаг 7: Включение PHP 8 на Apache

20. По умолчанию сервер Apache в Arch Linux обслуживает только содержимое статичных HTML файлов без поддержки динамических скриптовых языков. Для активации PHP начните с открытия главного конфигурационного файла Apache, найдите и закомментируйте следующую строку LoadModule (php-apache не работает с mod_mpm_event в Arch Linux).

sudo nano /etc/httpd/conf/httpd.conf

Для поиска используйте /.

Исходная строка:

Load Module mpm_event_module
modules/mod_mpm_event.so

Должно получиться:

#Load Module mpm_event_module
modules/mod_mpm_event.so

Найдите и раскомментируйте строку:

#Load Module mpm_prefork_module
modules/mod_mpm_prefork.so

Должно получиться:

Load Module mpm_prefork_module
modules/mod_mpm_prefork.so

21. Затем создайте новый файл PHP модуля php.conf в папке /etc/httpd/conf/extra/:

sudo nano /etc/httpd/conf/extra/php.conf

Добавьте в точности следующий контент (вы должны использовать mod_mpm_prefork).

Load Module php_module modules/libphp.soInclude conf/extra/php_module.confAddHandler application/x-httpd-php .php

Чтобы подключить PHP к Apache создайте символьную ссылку:

sudo ln-s /etc/httpd/conf/extra/php.conf /etc/httpd/conf/mods-enabled/php.conf

Перезапустите службу веб-сервера чтобы вступили в силу сделанные изменения:

sudo systemctl restart httpd

22. Для проверки настроек PHP создайте файл с именем info.php в DocumnetRoot (/srv/http/), 

sudo nano /srv/http/info.php

И скопируйте в него следующее содержимое:

<?phpphpinfo();
04

Затем перейдите в вашем браузере по адресу: https://localhost/info.php.

Вот и оно! Если ваш результат похож на картинку выше, значит PHP работает на Apache и теперь вы можете заниматься разработкой веб-приложений или использовать готовые решения вроде WordPress.

Если вы хотите проверить синтаксис настроек Apache и просмотреть список загруженных модулей без перезапуска демона httpd, то используйте следующие команды.

sudo apachectl configtest
sudo apachectl -M

Шаг 8: Установка и настройка PhpMyAdmin

23. Если вы не мастер по командной строке MySQL и хотите простой удалённый доступ к СУБД MySQL через веб-интерфейс, тогда вам нужен установленный пакет phpMyAdmin на ваш Arch.

sudo pacman -S phpmyadmin

24. После того, как пакеты были установлены вам нужно включить некоторые расширения PHP (mysqli.so) и вы также можете включить другие модули, которые необходимы для будущих платформ CMS, к примеру openssl.so, или iconv.so и т.д..

sudo nano /etc/php/php.ini

Найдите и раскомментируйте следующие расширения.

extension=bz2.
soextension=iconv.
soextension=mysqli.
soextension=pdo_mysql.
soextension=zip.so

В этом же файле найдите строку

;session.save_path = "/tmp"

если она закоментирована, то раскоментируйте её, чтобы получилось

session.save_path = "/tmp"

Также в этом же файле найдите и укажите расположение для выражения open_basedir и добавьте системный путь phpMyAdmin (/etc/webapps/ и /usr/share/webapps/) чтобы убедиться, что PHP имеет доступ для чтения файлов в этих директориях (Если вы ещё меняете путь виртуальных хостов DocumentRoot с /srv/http на другое расположение вам также нужно добавить сюда новые пути). При использовании путей по умолчанию, эта директива должна выглядеть так:

open_basedir = /srv/http/:/etc/webapps/:/usr/share/webapps/:/tmp/

25. Последнее что нужно, чтобы получить доступ к веб-интерфейсу phpMyAdmin, это добавить записи Apache на виртуальные хосты. В целях безопасности убедимся, что веб-интерфейс phpMyAdmin будет доступен только из локалхоста (или системного IP адреса) с использованием HTTPS протокола и не с других виртуальных хостов. Итак, откройте ваш файл Apache localhost-ssl.conf  и внизу, перед последней записью, добавьте следующее содержимое.

sudo nano /etc/httpd/conf/sites-enabled/localhost-ssl.conf
Alias /phpmyadmin"/usr/share/webapps/phpMyAdmin"<Directory "/usr/share/webapps/phpMyAdmin">    DirectoryIndex index.html index.php    AllowOverride All    Options FollowSymlinks    Require all granted</Directory>

26. После всего перезапустите демон Apache и перейдите в вашем браузере по следующему адресу, чтобы получить доступ к веб-интерфейсу вашего phpMyAdmin: https://localhost/phpmyadmin или https://system_IP/phpmyadmin.

27. Если после входа в phpMyAdmin, вы видите внизу сообщение об ошибке относящееся к blowfish_secret, то откройте и отредактируйте файл /etc/webapps/phpmyadmin/config.inc.php и вставьте случайную строку вроде следующей, затем перезагрузите страницу.

$cfg['blowfish_secret'] = 'kjLGJ8g;Hj3mlHy+Gd~FE3mN{gIATs^1lX+T=KVYv{ubK*U0V';

28. Включение дополнительных возможностей phpMyAdmin. Это необязательно, но для получения дополнительной функциональности и отсутствия предупреждений, добавьте в файл /etc/webapps/phpmyadmin/config.inc.php строку

$cfg['Servers'][$i]['pmadb'];

И импортируйте файл /usr/share/webapps/phpMyAdmin/sql/create_tables.sql.

Шаг 9: Включение LAMP при загрузке

29. Если вы хотите, чтобы стек LAMP загружался автоматически после перезагрузки системы, то выполните следующую команду.

sudo systemctl enable httpd mysqld

Здесь были описаны главные конфигурационные настройки LAMP, которые нужны для превращения вашей системы на Arch Linux в простую, но мощную и крепкую веб-платформу с самым последним серверным программным обеспечением для маленький некритичных окружений. Но для использования в рабочем окружении вам нужно продолжить изучение опций и особенностей обслуживания веб-серверов, уделять особое внимание обновлению пакетов и делать регулярное резервное копирование образов для быстрого восстановления системы в случае аварий.   

От KaligulBorhes

"How long, ignoramuses, will you love ignorance? How long will fools hate knowledge?"