Доброго времени суток, уважаемые читатели. Сегодня статья на тему: "Установка LAMP в Ubuntu Server 20.04". Рассмотрим процесс установки и настройки веб-окружения LAMP, в операционной системе Ubuntu Server 20.04.

LAMP – это комплект серверного ПО (Linux, Apache, MySQL, PHP), для работы сайтов, cms, веб-приложений.

Я буду использовать доменное имя test.ru, которое предварительно прописал в файле hosts, за ip-адресом сервера.

Создание директорий для работы сайта

  • Сначала создадим инфраструктуру для работы сайта.
  • Создаем директорию с именем сайта, а в ней - директорию для файлов, и директорию для логов.
# mkdir -p /var/www/test.ru/{site,log}

Установка веб-сервера Apache в Ubuntu Server 20.04

  • Установку веб-сервера, можно произвести либо из архива пакетов подключенного при установке ОС, либо подключив сторонний архив приватных пакетов (PPA). Во втором случае, будет установлена более новая версия Apache.
  • В первом случае, достаточно одной команды:
# apt install apache2 apache2-utils
  • Во втором случае, понадобится произвести установку дополнительных пакетов:
# apt install software-properties-common dirmngr apt-transport-https lsb-release ca-certificates
  • Подключаем сторонний PPA, и производим установку Apache.
# add-apt-repository ppa:ondrej/apache2
# apt install apache2  apache2-utils
  • В процессе установки, Apache будет запущен, и добавлен в автозагрузку.
  • Для управления веб-сервером, можно использовать стандартный набор команд:
# systemctl stop apache2.service
# systemctl start apache2.service
# systemctl restart apache2.service

Создание конфигурационного файла в Apache

В мануалах по настройке Apache, предлагается создавать конфигурационный файл в одной директории, потом создавать ссылку на этот конфиг в другой директории, потом запускать команду на активацию этой ссылки… Я предлагаю не городить огороды, а делать всё намного проще.

  • В директориях /etc/apache2/sites-available и /etc/apache2/sites-enabled, удаляем файл 000-default.conf, и ссылку на него.
конфигурационный файл дефолтного сайта apache
  • Создаем файл базовой конфигурации в директории /etc/apache2/sites-enabled. В моём случае, это будет /etc/apache2/sites-enabled/test.ru.conf.

<VirtualHost 0.0.0.0:80>
ServerName test.ru
ServerAlias www.test.ru
DocumentRoot /var/www/test.ru/site
ErrorLog /var/www/test.ru/log/error.log
CustomLog /var/www/test.ru/log/access.log common
<Directory /var/www/test.ru/site>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
php_admin_value date.timezone 'Europe/Moscow'
php_admin_value max_execution_time 60
php_admin_value upload_max_filesize 30M
</VirtualHost>

  • С веб-сервером пока закончим. Перезапускать его нет смысла, так как в конфиге мы указали настройки php, который у нас ещё не установлен.

Настройка Firewall для работы Apache в Ubuntu Server 20.04

  • Чтобы к веб-серверу была возможность подключения из вне, нужно открыть порты в системном брандмауэре. Для доступа к веб-серверу по протоколу HTTP, достаточно открыть 80 порт. В случае же с HTTPS, нужно открыть два порта 80 и 443.
  • Если Вы используете UFW, то команды будут такие:
# ufw allow 80/tcp
# ufw allow 443/tcp
  • Для iptables, нужно будет выполнить:
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# iptables-save > /etc/iptables/rules.v4

Установка и настройка сервера баз данных в Ubuntu Server 20.04

  • Переходим к установке MariaDB.
  • Установку MariaDB, можно произвести из внутреннего архива пакетов, либо произведя подключение официального архива MariaDB.
  • В случае с внутренним архивом, достаточно одной команды:
# apt install mariadb-server mariadb-client
  • Если Вы решили произвести установку из официального архива MariaDB, то его сначала нужно подключить. Для этого нужно зайти на страницу с репозиториями на сайте MariaDB, выбрать свою ОС, нужный релиз, и ближайшее зеркало:

https://downloads.mariadb.org/mariadb/repositories

  • В итоге, Вам будет предложено произвести подключение одним из доступных способов:
Спомощью команд:

# apt install software-properties-common dirmngr apt-transport-https lsb-release ca-certificates
# apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
# add-apt-repository 'deb [arch=amd64,arm64,ppc64el] https://mirror.docker.ru/mariadb/repo/10.6/ubuntu
 focal main'


С помощью добавления в файл /etc/apt/sources.list:

deb [arch=amd64] https://mirror.docker.ru/mariadb/repo/10.6/ubuntu focal main
deb-src https://mirror.docker.ru/mariadb/repo/10.6/ubuntu focal main


После подключения архива, запускаем установку:

# apt install mariadb-server mariadb-client
  • В процессе установки, сервер баз данных будет запущен, и добавлен в автозагрузку.
  • Запускаем скрипт первоначальной настройки MariaDB.
# mysql_secure_installation
  • Первым вопросом, нам будет предложено ввести пароль root, но так мы его ещё не создавали, то просто жмём на «Enter». Далее создаём пароль для root, и соглашаемся со всеми вопросами.
  • Сервер баз данных настроен, и мы можем создать базу данных для нашего сайта, и пользователя со всеми правами для неё.

# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE test;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON test.* TO 'admin'@'localhost' IDENTIFIED BY '123';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> quit;

  • Я для примера создал базу данных test, и пользователя admin с паролем 123.

Установка PHP в Ubuntu Server 20.04

  • Производим установку PHP, и наиболее используемых модулей. Если в команде присутствуют не нужные Вам модули, то можно их исключить. В случае же, если Вам нужен какой-нибудь дополнительный модуль, Вы можете добавить его к команде, через пробел.
# apt install php libapache2-mod-php php-cli php-mysqlnd php-json php-gd php-ldap php-odbc php-pdo php-opcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap php-zip
  • После установки, можно проверить работу веб-сервера и PHP. Для этого перезагружаем веб-сервер, и создаём в корневой директории сайта /var/www/test.ru/site, файл index.php, такого содержания:
<?php
 phpinfo();
  • После создания файла, заходим на наш сайт через браузер. Если всё сделано правильно, то откроется страница с информацией об установленном PHP и его модулях.
страница phpinfo
  • Теперь можно загружать файлы сайта в коревую директорию, и после этого добавлять нужные права:
# chown www-data:www-data -R /var/www/test.ru/site
# chmod -R 0775 /var/www/test.ru/site

Сертификат Let’s Encrypt для Apache в Ubuntu Server 20.04

  • Пришло время получить бесплатный сертификат от Let’s Encrypt. Для этого нам нужно установить утилиту certbot.
# apt install certbot python3-certbot-apache
  • В процессе установки, в системный cron будет добавлено задание на обновление сертификата. Проверка будет производится через каждые 12 часов.
  • Проверить таймер автообновления, можно запустив команду:
# systemctl status certbot.timer
  • Для запуска обновления сертификата вручную, можно использовать команду:
# certbot renew --dry-run
  • Утилита установлена, и настроена для автообновления сертификата. Но сам сертификат мы ещё не получили.
  • Для получения сертификата, нужно выполнить определённую команду. В моём случае, команда будет такой:
# certbot certonly --apache -d test.ru -d www.test.ru
  • В результате выполнения данной команды, Вам будет задано несколько вопросов. Нужно указать свой email, согласиться с условиями использования, отказаться от рассылок, и отказаться от настройки редиректа. Редирект в конфигурационном файле, мы настроим сами вручную.
  • По завершении, в консоли появляется поздравление, адреса директорий в которых находятся сертификат и ключи, и дата окончания сертификата.

Настройка Apache для работы по HTTPS в Ubuntu Server 20.04

  • Сертификат у нас на руках, но чтобы Apache работал по протоколу HTTPS, нужно произвести некоторые действия.
  • Сначала нужно активировать два модуля. Это mod ssl, и mod rewrite.
# a2enmod ssl
# a2enmod rewrite
  • После активации модулей, нужно отредактировать конфигурационный файл нашего сайта /etc/apache2/sites-enabled/test.conf:

<VirtualHost _default_:80>
ServerName test.ru
ServerAlias www.test.ru
DocumentRoot /var/www/test.ru/site
ErrorLog /var/www/test.ru/log/error.log
CustomLog /var/www/test.ru/log/access.log common
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>


<VirtualHost _default_:443>
ServerName test.ru
ServerAlias www.test.ru
DocumentRoot /var/www/test.ru/site
ErrorLog /var/www/test.ru/log/ssl.error.log
CustomLog /var/www/test.ru/log/ssl.access.log common
<Directory /var/www/test.ru/site>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
php_admin_value date.timezone 'Europe/Moscow'
php_admin_value max_execution_time 60
php_admin_value upload_max_filesize 30M
SSLEngine on
SSLCertificateFile /etc/ssl/cert.pem
SSLCertificateKeyFile /etc/ssl/cert.key
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder on
</VirtualHost>

В конфигурационном файле представленном выше, не забудьте изменить доменное имя test.ru, на своё доменное имя.

  • В конфиге представлена базовая конфигурация для работы по протоколу HTTPS.
  • После внесённых изменений, перезапускаем веб-сервер:
# systemctl restart apache2.service
  • Теперь если мы попытаемся попасть на наш сайт, то получим доступ по защищённому соединению.

Установка phpMyAdmin для Apache в Ubuntu Server 20.04

  • Переходим к установке веб-приложения phpMyAdmin, для работы с сервером баз данных.
  • Установка phpMyAdmin, производится одной командой:
# apt install phpmyadmin php-curl
  • В процессе установки, появляется окно, в котором предлагается выбрать веб-сервер для автоматической конфигурации. Выбираем Apache, нажав на пробел, и жмём на «ОК».
выбор веб-сервера для реконфигурации при установке phpMyAdmin
  • Во втором окне, предлагается автоматическая настройка базы данных для phpMyAdmin.
  • Соглашаемся, и жмём на «Yes».
 выбор настройки базы данных при установке phpMyAdmin
  • После установки, рекомендуется принудительно активировать модуль mbstring.
# phpenmod mbstring
  • Конфигурационный файл phpMyAdmin, находится по адресу /etc/phpmyadmin/apache.conf. Чтобы задействовать phpMyAdmin, нужно подключить его конфигурационный файл к конфигу сайта.
  • Добавляем одну строчку, в конце блока 443 порта конфигурационного файла сайта /etc/apache2/sites-enabled/test.conf:
Include /etc/phpmyadmin/apache.conf
  • Для настройки безопасности phpMyAdmin, предлагаю настроить доступ с одного ip-адреса. Для этого в файле /etc/phpmyadmin/apache.conf, внутри блока <Directory /usr/share/phpmyadmin>, нужно добавить три строчки:
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
Allow from 192.168.1.200 
  • 192.168.1.200 – замените на Ваш ip-адрес.
  • Чтобы нововведения вступили в силу, нужно перезапустить веб-сервер.
# systemctl restart apache2.service
  • Теперь если ввести в браузере, в моём случае:
https://test.ru/phpmyadmin
  • То откроется форма входа phpMyAdmin. Пройдя авторизацию, можно получить доступ к управлению сервером баз данных.
форма авторизации phpMyAdmin

Настройка ротации логов Apache в Ubuntu Server 20.04

  • Последнее что осталось сделать, это настроить ротацию логов. Так как мы использовали нестандартные директории, то нужно отредактировать файл /etc/logrotate.d/apache2.
  • Добавляем одну строчку:

/var/www/*/log/*log

ротация логов веб-сервера apache
  • Вот и всё, теперь с ротацией всё будет в порядке.

Сегодня мы рассмотрели тему: "Установка LAMP в Ubuntu Server 20.04". Рассмотрели установку LAMP, настройку работы веб-сервера по HTTPS, установку phpMyAdmin, и перенастройку ротации логов. Смотрите так же, видео по теме.

Надеюсь статья была вам полезна. До встречи в новых статьях.

С уважением, Андрей Бондаренко.


Видео на тему "Установка LAMP в Ubuntu Server 20.04":