Docker Compose сборка для быстрого развертывания PHP-приложений. Конфигурация поддерживает режимы разработки и продакшена, используя легковесные Alpine-образы для уменьшения размера контейнеров. Включает основные и опциональные сервисы для удобной работы.
- Гибкость: Легко настраивайте сервисы под нужды проекта.
- Изоляция: Запускайте несколько проектов на одном компьютере без конфликтов.
- Готовность к продакшену: Встроенная поддержка HTTPS с Certbot.
- Удобство: Включает Composer, Redis, MariaDB, Ofelia и другие полезные инструменты.
- Включенные сервисы
- Опциональные сервисы (для локальной разработки)
- Структура проекта и настройка
- Основные команды
- Конфигурация сервисов
- SSL-сертификаты
- Доступ к сайтам по доменному имени
- Ограничение доступа к сервисам
- Дополнительная информация
- Nginx
- PHP-FPM
- Composer
- Redis
- MariaDB
- Ofelia: Планировщик задач (cron).
- Certbot: Автоматическое получение SSL-сертификатов (для продакшена).
- Traefik: HTTP-прокси для доменов.
- Adminer: Веб-интерфейс для MariaDB.
- MailHog: Тестирование почты.
-
Копирование файлов: Скопируйте
.docker/,docker-compose.ymlиmakefileиз репозитория проекта в корень вашего проекта.makefileсодержит основные команды для работы с Docker Compose. -
Выбор конфигурации: Скопируйте
docker-compose.dev.yml(для разработки) илиdocker-compose.prod.yml(для продакшена) из каталога.docker/вdocker-compose.override.yml, который должен находиться в корне проекта.cp .docker/docker-compose.dev.yml docker-compose.override.yml
-
Настройка SSL (для разработки и продакшена): Используйте следующую команду для копирования сертификатов. Убедитесь, что имя конечной папки соответствует значению
APP_HOSTиз.env.cp -R .docker/certbot/conf/live/test-app.loc .docker/certbot/conf/live/my-app.loc
-
Удаление ненужных сервисов: Отредактируйте
docker-compose.ymlиdocker-compose.override.yml, удалив ненужные сервисы. -
Настройка окружения: Отредактируйте
.envфайл.
- Запуск:
make upилиdocker compose up -d - Остановка:
make stopилиdocker compose stop - Пересборка:
make rebuildилиdocker compose up -d --build - Консоль PHP:
make shell
-
Nginx: Настраивается через
default.conf.template(для продакшена) иdefault.conf.dev.template(для разработки), расположенные в каталоге.docker/nginx/. -
PHP-FPM:
- Версия PHP изменяется в
.docker/php-fpm/Dockerfile. - Общие настройки находятся в
.docker/php-fpm/app.ini. - Конфигурация для prod версии находится в файле
.docker/php-fpm/app.prod.ini. - Конфигурация для dev версии находится в файле
.docker/php-fpm/app.dev.ini.
- Версия PHP изменяется в
-
Ofelia: Настраивается в
docker-compose.override.ymlчерезlabels.Пример конфигурации для запуска скрипта
cli.phpкаждую минуту:ofelia.enabled: "true" ofelia.job-exec.php-cli.schedule: "@every 1m" ofelia.job-exec.php-cli.user: www-data ofelia.job-exec.php-cli.command: "php /app/public/cli.php"
-
Получение: Используйте следующую команду для получения SSL-сертификатов. Замените
domain.comиwww.domain.comна ваши доменные имена.docker compose run --rm certbot certonly --webroot --webroot-path /var/www/certbot/ -d domain.com -d www.domain.com
-
Обновление: Используйте следующую команду для обновления истекших SSL-сертификатов.
docker compose run --rm certbot renew
-
Автоматизация: Добавьте следующую задачу в cron для автоматического обновления сертификатов. Замените
/home/user/project_pathна путь к вашему проекту.0 5 * * * cd /home/user/project_path && docker compose run --rm certbot renew
По умолчанию ваш сайт будет доступен по адресу localhost:port, где port — номер порта, заданный в .env файле в переменных NGINX_HTTP_PORT и NGINX_HTTPS_PORT.
Для доступа к сайту по доменному имени можно использовать Traefik в качестве прокси-сервера.
Домен, по которому будет доступен ваш локальный сайт, задается в .env файле в переменных APP_HOST и NGINX_SERVER_NAME.
В переменной NGINX_SERVER_NAME можно указать несколько доменов через пробел.
Чтобы сайт был доступен в браузере, нужно добавить в файл hosts на вашем компьютере строку с доменом и IP-адресом:
127.0.0.1 test-app.loc
Замените test-app.loc на ваш домен, указанный в файле .env.
Подробнее с конфигурацией Traefik можно ознакомиться в каталоге traefik.
Если вы не хотите использовать Traefik, вам нужно будет удалить секцию networks из docker-compose.override.yml:
networks:
web:
name: traefik_default
external: trueПо умолчанию в production режиме для контейнеров mariadb и redis доступ извне ограничен. В зависимости от конфигурации сети вам может не понадобиться данное ограничение или же оно может работать неправильно.
В этом случае удалите 127.0.0.1: из docker-compose.override.yml для соответствующих сервисов, но не забудьте ограничить доступ к портам т.к. это влияет на безопасность.
- Документация Ofelia: https://github.com/mcuadros/ofelia
- Версии PHP: https://hub.docker.com/_/php/tags