Установка LAMP (Linux, Apache, MySQL/MariaDB и PHP/PhpMyAdmin) в Arch Linux

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

Install LAMP in Arch Linux

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

Требования

  1. Предыдущий процесс установки Arch Linux – пропустите последнюю часть с DHCP.
  2. Предыдущая установка 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
Install Apache Web Server

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
Install MySQL Database
Start MySQL Database

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

Шаг 2: Защита базы данных MySQL

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

$ sudo mysql_secure_installation
Secure MySQL Database
Set MySQL root Password

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

$ mysql -u root -p
Verify MySQL Database Connectivity

Шаг 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 Virtual Host Configuration

Роль заявлений 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
Create a2eniste Apache Script

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

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

$ sudo chmod +x a2ensite a2dissite
$ sudo cp a2ensite a2dissite /usr/local/bin/
Set Execute Permissions

Шаг 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>
Create Virtual Hosts in Apache

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

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

$ sudo a2ensite localhost
$ sudo systemctl restart httpd
Active a2ensite Script

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

Browse Apache

Шаг 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
Enable SSL with Virtual Hosting

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>
Create SSL Virtual Host

Помимо директив 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
Store Apache Certificates and Keys
$ sudo chmod +x apache_gen_ssl

Если вы хотите, чтобы сценарий был доступен в системе, скопируйте его в исполняемый путь $PATH.

$ sudo cp /apache_gen_ssl  /usr/local/bin/

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

$ sudo ./apache_gen_ssl
Create Apache Certificates and Keys
Enter Certificates Details

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

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

$ sudo a2ensite localhost-ssl
$ sudo systemctl restart httpd
Activate SSL Virtual Host

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

Browse Apache over SSL

Шаг 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
Enable PHP Module

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
Enable mod_mpm_prefork Module

22. Для проверки установки создайте PHP-файл с именем info.php в вашем DocumnetRoot (/srv/http/), затем перезапустите Apache и откройте браузер по адресу info.php: https://localhost/info.php.

<?php

phpinfo();

?>
$ sudo systemctl restart httpd
Verify PHP Information

Вот и все! Если все выглядит как на изображении выше, то 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
Install and Configuring PhpMyAdmin

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

Enable open_basedir

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>
Create PhpMyAdmin Virtual Host Configuration

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

Access PhpMyAdmin Web Interface

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

$cfg['blowfish_secret'] = ‘{^QP+-(3mlHy+Gd~FE3mN{gIATs^1lX+T=KVYv{ubK*U0V’ ;
Fix blowfish_secret Error

Шаг 9: Включите LAMP системно

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

$ sudo systemctl enable httpd mysqld
Enable LAMP System Wide

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

Source:
https://www.tecmint.com/install-lamp-in-arch-linux/