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

Основная цель данного руководства – провести вас через полные пошаговые инструкции, которые в конце приведут к установке одного из самых используемых комбинаций программного обеспечения в веб-разработке: LAMP (Linux, Apache, MySQL/MariaDB и PHP/PhpMyAdmin), а также представить некоторые полезные функции (быстрые и грязные сценарии Bash), которые отсутствуют в системе Arch Linux, но могут облегчить создание нескольких Виртуальных хостов, генерацию SSL-сертификатов и ключей, необходимых для безопасных транзакций по протоколу HTTS.
Требования
- Предыдущий процесс установки Arch Linux – пропустите последнюю часть с DHCP.
- Предыдущая установка LEMP на Arch Linux – только часть с настройкой статического IP-адреса и удаленным доступом через SSH.
Шаг 1: Установка базового программного обеспечения LAMP
1. После минимальной установки системы с фиксированным IP-адресом и удаленным доступом к системе с использованием <действие18>SSH обновите вашу систему Arch Linux с использованием утилиты pacman.
$ sudo pacman -Syu
2. Когда процесс обновления завершится, установите LAMP по частям, сначала установите веб-сервер Apache и запустите/проверьте каждый процесс службы сервера.
$ sudo pacman -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 systemctl start mysqld $ sudo systemctl status mysqld


Теперь у вас установлен и запущен базовый ПО LAMP с текущими настройками по умолчанию.
Шаг 2: Защита базы данных MySQL
5. Следующим шагом является обеспечение безопасности базы данных MySQL путем установки пароля для учетной записи root, удаления учетных записей анонимных пользователей, удаления тестовой базы данных и запрета удаленного входа для пользователя root (введите [Enter] для текущего пароля учетной записи root и ответьте на все вопросы о безопасности Да).
$ 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
В самом низу файла добавьте следующие две строки.
IncludeOptional conf/sites-enabled/*.conf IncludeOptional conf/mods-enabled/*.conf

Роль заявлений Include здесь заключается в том, чтобы сообщить Apache, что отныне он должен читать дальнейшие конфигурации из всех файлов, которые находятся в папках /etc/httpd/conf/sites-enabled/ (для Виртуального Хостинга) и /etc/httpd/conf/mods-enabled/ (для включенных серверных модулей) в системных путях, заканчивающихся на .conf.
8. После того как 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 a2ensite и a2dissite
9. Теперь пришло время создать сценарии Apache a2ensite и a2dissite, которые будут служить командами для включения или отключения файла конфигурации виртуального хоста. Введите команду cd, чтобы вернуться в свой путь пользователя $HOME и создайте сценарии bash a2ensite и 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

Теперь создайте файл сценария bash 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

10. После того как файлы были созданы, назначьте права на выполнение и скопируйте их в исполняемый каталог $PATH, чтобы сделать их доступными для всей системы.
$ sudo chmod +x a2ensite a2dissite $ sudo cp a2ensite a2dissite /usr/local/bin/

Шаг 5: Создание виртуальных хостов в Apache
11. Конфигурационный файл виртуального хоста по умолчанию для веб-сервера Apache на Arch Linux предоставляется файлом httpd-vhosts.conf, находящимся в папке /etc/httpd/conf/extra/, но если у вас есть система, которая использует много виртуальных хостов, то может быть очень сложно отслеживать, какой веб-сайт активирован и какой – нет. Если вы хотите отключить веб-сайт, вам придется закомментировать или удалить все его директивы, что может быть сложной задачей, если ваша система предоставляет много веб-сайтов и у вашего сайта много директив настроек.
Использование путей sites-available и sites-enabled значительно упрощает работу по включению или отключению веб-сайтов и также сохраняет все файлы настроек ваших веб-сайтов, даже если они активированы или нет.
На следующем шаге мы собираемся создать первый виртуальный хост, который указывает на 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. После того как файл localhost создан, активируйте его, а затем перезапустите демон httpd, чтобы увидеть изменения.
$ sudo a2ensite localhost $ sudo systemctl restart httpd

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

Шаг 6: Включение SSL с виртуальным хостингом на LAMP
SSL (Secure Sockets Layer) – протокол, разработанный для шифрования HTTP-соединений по сети или Интернету, который обеспечивает передачу данных по безопасному каналу с использованием симметричных/асимметричных криптографических ключей и предоставляется в Arch Linux пакетом OpenSSL.
14. По умолчанию модуль SSL на Apache в Arch Linux отключен и может быть активирован раскомментированием модуля mod_ssl.so из основного файла конфигурации httpd.conf и файла Include httpd-ssl.conf, расположенного в дополнительном httpd пути.
Но для упрощения мы собираемся создать новый файл модуля для 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. Теперь создайте файл виртуального хоста, который указывает на тот же локальный хост, но использует настройки сервера SSL на этот раз, и слегка измените его имя, чтобы вам было напомнено, что это локальный хост с 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. Затем создайте следующий сценарий bash, который автоматически создает и сохраняет все ваши сертификаты Apache и ключи в системном пути /etc/httpd/conf/ssl/.
$ sudo 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
Если вы хотите, чтобы сценарий был доступен в системе, скопируйте его в исполняемый путь $PATH.
$ sudo cp /apache_gen_ssl /usr/local/bin/
18. Теперь создайте свой сертификат и ключи, запустив сценарий. Укажите ваши SSL-опции и не забудьте, чтобы название сертификата и общее имя совпадали с вашим официальным доменом (FQDN).
$ sudo ./apache_gen_ssl


После создания сертификата и ключей не забудьте изменить конфигурации сертификата и ключей вашего виртуального хоста SSL, чтобы они соответствовали названию этого сертификата.
19. Последний шаг – активировать новый виртуальный хост SSL и перезапустить сервер, чтобы применить конфигурации.
$ sudo a2ensite localhost-ssl $ sudo systemctl restart httpd

Вот и все! Чтобы проверить его, откройте браузер и добавьте IP-адрес Arch в URL, используя протокол HTTPS: https://localhost или https://system_IP.

Шаг 7: Включите PHP на Apache
20. По умолчанию Apache обслуживает только статические файлы HTML в Arch Linux без поддержки динамических языков сценариев. Чтобы активировать PHP, сначала откройте основной файл конфигурации Apache, затем найдите и раскомментируйте следующее утверждение LoadModule (php-apache не работает с mod_mpm_event в Arch Linux).
$ sudo nano /etc/httpd/conf/httpd.conf
Используя [Ctrl]+[w], найдите и закомментируйте следующую строку, чтобы она выглядела так.
#LoadModule mpm_event_module modules/mod_mpm_event.so

21. Затем создайте новый файл для модуля PHP в пути mods-enabled со следующим содержимым.
$ sudo nano /etc/httpd/conf/mods-enabled/php.conf
Добавьте ровно следующее содержимое (вам нужно использовать mod_mpm_prefork).
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so LoadModule php5_module modules/libphp5.so Include conf/extra/php5_module.conf

22. Для проверки установки создайте PHP-файл с именем info.php в вашем DocumnetRoot (/srv/http/), затем перезапустите Apache и откройте браузер по адресу info.php: https://localhost/info.php.
<?php phpinfo(); ?>
$ sudo systemctl restart httpd

Вот и все! Если все выглядит как на изображении выше, то PHP – динамический язык сценариев на стороне сервера теперь включен в Apache, и теперь вы можете разрабатывать веб-сайты, используя CMS с открытым исходным кодом, например, WordPress.
Если вы хотите проверить синтаксис конфигураций Apache и увидеть список загруженных модулей без перезапуска службы httpd, выполните следующие команды.
$ sudo apachectl configtest $ sudo apachectl -M
Шаг 8: Установка и настройка PhpMyAdmin
23. Если вы не владеете командной строкой MySQL и хотите простой удаленный доступ к базе данных MySQL через веб-интерфейс, вам потребуется пакет PhpMyAdmin установленный на вашем Arch.
$ sudo pacman -S phpmyadmin php-mcrypt
24. После установки пакетов вам нужно включить некоторые расширения PHP (mysqli.so, mcrypt.so – для внутренней аутентификации) и вы также можете включить другие модули, необходимые для будущих платформ CMS, например, openssl.so, imap.so или iconv.so и т. д.
$ sudo nano /etc/php/php.ini
Найдите и раскомментируйте вышеперечисленные расширения.
extension=mcrypt.so extension=mssql.so extension=mysqli.so extension=openssl.so extension=iconv.so extension=imap.so extension=zip.so extension=bz2.so

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

25. Последнее, что вам нужно сделать, чтобы получить доступ к веб-интерфейсу PhpMyAdmin, – добавить операторы Apache PhpMyAdmin в виртуальные хосты. В качестве меры безопасности удостоверитесь, что веб-интерфейс 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'] = ‘{^QP+-(3mlHy+Gd~FE3mN{gIATs^1lX+T=KVYv{ubK*U0V’ ;

Шаг 9: Включите LAMP системно
28. Если вы хотите, чтобы стек LAMP автоматически запускался после перезагрузки системы, выполните следующие команды.
$ sudo systemctl enable httpd mysqld

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