Обзор развертывания LAMP на сервере¶
Предпосылки и предварительные требования¶
- Операционная система – Ubuntu 22.04 (LTS “Jammy Jellyfish”).
- Права суперпользователя – для установки пакетов и изменения системных файлов.
- Доступ к сети – требуется открытый доступ к HTTP/HTTPS (80/443) для корректной работы веб‑сервера и сертификатов.
- Docker – установленный и настроенный для запуска контейнеров. Если Docker не установлен, его можно установить по официальной документации:
apt-get install docker.io docker-compose.
Структура файлов и каталогов¶
После выполнения сценариев установки вы увидите следующую структуру на сервере:
/etc/apache2/
├─ apache2.conf
└─ ...
/var/www/html/
└─ info.php
/usr/share/keyrings/
└─ mariadb-keyring.gpg
/data/nginx/
├─ nginx-certbot.env
└─ user_conf.d/
docker-compose.yml (файл compose.yml.j2, отрендеренный без шаблонов)
/var/www/html/info.php– тестовый PHP‑файл, подтверждающий работу PHP через Apache.docker-compose.yml– конфигурация контейнера Nginx с Certbot для автоматического получения и обновления сертификатов Let’s Encrypt./data/nginx/nginx-certbot.env– переменные окружения, которые вы можете дополнить по своему усмотрению.
Права доступа и безопасность¶
| Объект | Минимальные права | Комментарий |
|---|---|---|
/var/www/html/info.php | 644 | Чтение для всех, запись только для владельца. |
/etc/apache2/ | 750 | Владелец – root, группа – root. |
/usr/share/keyrings/mariadb-keyring.gpg | 644 | Содержит ключи подписи, доступ для чтения всем. |
/data/nginx/ | 750 | Для контейнера Nginx требуется доступ к секретам. |
При работе с базой данных рекомендуется использовать отдельного пользователя MariaDB с минимальными правами, однако в приведенной конфигурации никаких дополнительных действий не прописано.
Базы данных¶
- MariaDB 10.11 – установленный из официального репозитория.
- После установки вам необходимо выполнить первоначальную настройку:
Это позволит задать пароль для root‑пользователя и удалить небезопасные параметры. - Для создания пользовательской базы и пользователя можно подключиться к MariaDB:
и выполнить нужные командыCREATE DATABASE,GRANT,FLUSH PRIVILEGES;.
Контейнеры Docker и их запуск¶
Nginx + Certbot¶
Файл docker-compose.yml описывает один сервис nginx:
services:
nginx:
image: jonasal/nginx-certbot:latest
restart: unless-stopped
environment:
- CERTBOT_EMAIL=hkadm@hostkey.com
env_file:
- /data/nginx/nginx-certbot.env
network_mode: host
volumes:
- nginx_secrets:/etc/letsencrypt
- /data/nginx/user_conf.d:/etc/nginx/user_conf.d
- Сеть –
network_mode: host, поэтому контейнер слушает порты 80 и 443 напрямую на хосте. - Секреты – том
nginx_secretsхранит сертификаты Let’s Encrypt. - Конфигурации – каталог
/data/nginx/user_conf.dможно использовать для размещения пользовательских файлов конфигурации Nginx.
Запуск¶
Команда создаст необходимый том, загрузит образ jonasal/nginx-certbot:latest и запустит контейнер в фоне. После запуска контейнера Nginx будет автоматически запрашивать сертификаты для доменов, указанных в переменной CERTBOT_DOMAINS в файле /data/nginx/nginx-certbot.env.
Остановка¶
Обновление¶
Для обновления образа и перезапуска контейнера:
Прокси серверы (Nginx, Traefik и т.п.)¶
В текущей конфигурации используется контейнер Nginx, работающий как обратный прокси и одновременно предоставляющий HTTPS. Если потребуется подключить дополнительные прокси (Traefik, HAProxy и т.п.), можно добавить новые сервисы в docker-compose.yml и настроить маршрутизацию в каталоге /data/nginx/user_conf.d. Важно помнить, что при network_mode: host каждый новый контейнер будет пытаться привязать одни и те же порты, поэтому необходимо использовать отдельные сети Docker.
Настройки прав, запуск, остановка и обновление¶
Установка и обновление пакетов¶
Перезапуск Apache¶
Проверка работоспособности¶
Откройте браузер и перейдите по адресу сервера (или домену, если настроено DNS). Если всё выполнено корректно, вы увидите страницу с phpinfo(). При наличии Nginx с Certbot вы получите SSL‑подтверждение и перенаправление на HTTPS.
Управление контейнером Nginx¶
docker compose up -d– запускает контейнер в фоне.docker compose stop– останавливает контейнер, но оставляет данные.docker compose rm -f– удаляет контейнер и связанные ресурсы.docker compose logs -f nginx– выводит логи в реальном времени.
Эти команды позволяют быстро управлять жизненным циклом прокси‑сервера и гарантировать, что сертификаты обновляются автоматически.