Эта инструкция расскажет вам о том, как установить одну из самых часто используемых связок в веб-разработке: 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 |
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 |
Не запутайтесь. Мы устанавливаем 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/bash if test -d /etc/httpd/conf/sites-available && test -d /etc/httpd/conf/sites-enabled ; then echo "-------------------------------" else mkdir /etc/httpd/conf/sites-available mkdir /etc/httpd/conf/sites-enabled fi avail= /etc/httpd/conf/sites-available/ $1.conf enabled= /etc/httpd/conf/sites-enabled site=` ls /etc/httpd/conf/sites-available/ ` if [ "$#" != "1" ]; then echo "Use script: n2ensite virtual_site" echo -e "\nAvailable virtual hosts:\n$site" exit 0 else if test -e $avail; then sudo ln -s $avail $enabled else echo -e "$avail virtual host does not exist! Please create one!\n$site" exit 0 fi if test -e $enabled/$1.conf; then echo "Success!! Now restart Apache server: sudo systemctl restart httpd" else echo -e "Virtual host $avail does not exist!\nPlease see avail virtual hosts:\n$site" exit 0 fi fi |
Теперь создайте файл баш скрипта a2dissite.
sudo nano a2dissite |
Добавьте следующее содержание.
#!/bin/bash avail= /etc/httpd/conf/sites-enabled/ $1.conf enabled= /etc/httpd/conf/sites-enabled site=` ls /etc/httpd/conf/sites-enabled ` if [ "$#" != "1" ]; then echo "Use script: n2dissite virtual_site" echo -e "\nAvailable virtual hosts: \n$site" exit 0 else if test -e $avail; then sudo rm $avail else echo -e "$avail virtual host does not exist! Exiting" exit 0 fi if test -e $enabled/$1.conf; then echo "Error!! Could not remove $avail virtual host!" else echo -e "Success! $avail has been removed!\nsudo systemctl restart httpd" exit 0 fi fi |
После того, как файлы были созданы, назначьте им права выполнения и скопируйте их в директорию для исполнимых файлов, чтобы они были доступны во всей системе.
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 all Require 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 если вы используете удалённую систему.
Шаг 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 .so LoadModule socache_shmcb_module modules /mod_socache_shmcb .so Listen 443 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 SSLPassPhraseDialog builtin SSLSessionCache "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 on SSLCertificateFile "/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.0 CustomLog "/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 all Require 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/bash mkdir /etc/httpd/conf/ssl cd /etc/httpd/conf/ssl echo -e "Enter your virtual host FQDN: \nThis will generate the default name for Nginx SSL certificate!" read cert openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out $cert.key chmod 600 $cert.key openssl req -new -key $cert.key -out $cert.csr openssl x509 -req -days 365 - in $cert.csr -signkey $cert.key -out $cert.crt echo -e " The certificate " $cert " has been generated!\nPlease link it to Apache SSL available website!" ls -all /etc/httpd/conf/ssl exit 0 |
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 |
И скопируйте в него следующее содержимое:
<?php phpinfo(); |
Затем перейдите в вашем браузере по адресу: 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 в простую, но мощную и крепкую веб-платформу с самым последним серверным программным обеспечением для маленький некритичных окружений. Но для использования в рабочем окружении вам нужно продолжить изучение опций и особенностей обслуживания веб-серверов, уделять особое внимание обновлению пакетов и делать регулярное резервное копирование образов для быстрого восстановления системы в случае аварий.