You are here: Home » Инструкции » Установка LAMP (Linux, Apache, MySQL/MariaDB, PHP7 и phpMyAdmin) в Arch Linux / BlackArch

Установка LAMP (Linux, Apache, MySQL/MariaDB, PHP7 и phpMyAdmin) в Arch Linux / BlackArch

Основывается на материале (но актуализировано для PHP7, для MySQL 5.7 и т.д.): http://www.tecmint.com/install-lamp-in-arch-linux/

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

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

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

sudo pacman -Syu

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

sudo pacman -S apache
sudo systemctl start httpd
sudo systemctl status httpd

01

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

sudo pacman -S php php-apache php-imap

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

sudo pacman -S mysql

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

sudo mysql_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 vim /etc/httpd/conf/httpd.conf

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

IncludeOptional conf/sites-enabled/*.conf
IncludeOptional 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 vim 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 vim 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. После того, как файлы были созданы, назначьте им права выполнения и скопируйте их в директорию для исполнимых файлов, чтобы они были доступны во всей системе.

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-enable, здорово упрощает работу по включению и отключению веб-сайтов и также сохраняет конфигурационные файлы всех веб-сайтов в независимости от того, активированы они или нет.

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

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

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

<VirtualHost *:80>
        DocumentRoot "/srv/http"
        ServerName localhost
        ServerAdmin you@example.com
        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 если вы используете удалённую систему.

03

Шаг 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 extra.

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

sudo vim /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 vim /etc/httpd/conf/sites-available/localhost-ssl.conf

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

<VirtualHost *:443>
        DocumentRoot "/srv/http"
        ServerName localhost
        ServerAdmin you@example.com
        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/.

vim 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.crt
sudo mv /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 7 на Apache

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

sudo vim /etc/httpd/conf/httpd.conf

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

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

LoadModule mpm_event_module modules/mod_mpm_event.so

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

#LoadModule mpm_event_module modules/mod_mpm_event.so

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

#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

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

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

21. Затем создайте новый файл PHP модуля в директории mods-enabled со следующим содержимым.

sudo vim /etc/httpd/conf/mods-enabled/php.conf

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

LoadModule php7_module modules/libphp7.so
Include conf/extra/php7_module.conf
AddHandler application/x-httpd-php .php

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

sudo vim /srv/http/info.php
<?php
phpinfo();
sudo systemctl restart httpd

04

Вот и оно! Если ваш результат похож на картинку выше, значит PHP работает на Apache и теперь вы можете заниматься разработкой веб-приложений или использовать готовые решения вроде 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 vim /etc/php/php.ini

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

extension=bz2.so
extension=iconv.so
extension=imap.so
extension=mcrypt.so
extension=mysqli.so
extension=pdo_mysql.so
extension=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 vim /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 в простую, но мощную и крепкую веб-платформу с самым последним серверным программным обеспечением для маленький некритичных окружений. Но для использования в рабочем окружении вам нужно продолжить изучение опций и особенностей обслуживания веб-серверов, уделять особое внимание обновлению пакетов и делать регулярное резервное копирование образов для быстрого восстановления системы в случае аварий.   

8 комментариев

  1. Квест прошел. 🙂
    Единственное в конце с логином в phpmyadmin затупил. Надо было ввести логин\пароль которые задавал к базе в начале. 🙂
     

  2. Не понятно про SSL.
    На какой имя генерировать их если я собираюсь запускать https в лок. сети.
    Сделал на локальный адрес в свой сети 192.168.0.62, захожу с браузера, сайт рабоатет, но соединение не защищено, ругается на несоответствие имени сайта.

    • Для локалки это неизбежно. Т.е. если вас это устраивает, можете добавить сертификат в брауезре в доверенные (не уверен, как это называется) и тогда не будет этого сообщения до следующей смены сертификатов.

      Проще и при этом абсолютно бесплатно можно получить валидные сертификаты для домена. Т.е. домен в любом месте покупаете за деньги, а настоящие валидные сертификаты (на которые браузерs не ругаются) получаете абсолютно бесплатно, например, в Let's Encrypt.

      Сертификаты действуют три месяца, но продлевать и получать новые можно неограниченное количество раз на любые свои домены (хоть по три раза на дню меняйте). Это можно сделать автоматически с помощью программы acme-tiny ( https://github.com/diafygi/acme-tiny ).

      Вот здесь я пытался как можно подробнее описать работу с этой программой (хотя, на мой взгляд, получилось немного сумбурно): https://zalinux.ru/?p=530

      Я таким образом получаю сертификаты для сайтов https://suip.biz/ru/ и https://softocracy.ru/ - можете перейти – браузер не ругается, а если посмотреть свойства сертификатов, то они действительны на три месяца – как я написал, это абсолютно не проблема. Кстати, сервак (VPS) для тех сайтов работает на Arch Linux.

      • Спасибо за ответ.
        У меня нет цели покупать домены и выводить сервера в онлайн. 
        Я делаю Облачко для офиса внутри локалки или с доступом по VPN в него.
        Интересует что браузер показывает иконку "замок перечеркнут" и пишет что "соединение не защищено"

        Клиент на Андроиде показал что сертфикат не действителен и теперь на форме соединения при указании IP сервера пишет что сервер не найден. Хотя он есть и впервый раз он его увидел но сертификат не пропустил. 

        • Я могу ошибаться, но для защиты данных при передаче между локальной сетью и теми клиентами, которые снаружи, VPN'а вполне достаточно - трафик уже хорошо зашифрован. 

          Если требуется также защитить данные внутри локальной сети, чтобы один клиент не мог перехватывать данные другого клиента, то, возможно, достаточно добавить самоподписанные сертификаты в доверенные. Возможно, что-то придумать с топологией VPN: все локальные компьютеры подключаются к VPN и только через него имеют доступ к облаку. Другие соединения (доступ к общим папкам и т.д.) между клиентами локальной сети не блокировать, а только не давать доступ к облаку без VPN. Соответственно, нужда в HTTPS отпадает, его просто не использовать, чтобы не смущать сообщениями.

          Всё это ИМХО: я сам в процессе обучения, вполне возможно, что что-то понимаю неправильно.

  3. Андроид клиент сцепился, просто я указывал IP без /owncloud. 🙂

    Все заработало!

  4. У тебя не правильно в пункте 6, а именно sudo cp /apache_gen_ssl  /usr/local/bin/  

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

     ssl не работает короче. Да кстати Arch хороший дистрибутив. 

    • Там действительно было неправильно. Сейчас поправил. Спасибо, что обратили внимание!

      Пропустил этот момент, т.к. сам его никогда не делаю – на локалхосте сертификат не нужен. На сайтах – нужен, а на локалхосте – нет.

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

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