Задать вопрос
@Sukesada

Как правильно шарить код между PHP-FPM и nginx?

Использую Docker / Docker Compose для PHP-проекта и хочу понять общепринятый production-подход, а не "запустилось ура!".
Сразу уточню: опыта в it у меня нет, поэтому интересует именно корректная архитектура.
Исходные условия:
PHP-приложение (PHP-FPM)
nginx как фронт
Главная страница - index.php
Статика (css, js, изображения, и тд) лежит рядом с PHP-кодом, строгой директории public/ нет

Я так понисаю что nginx должен отдавать статику.
PHP-FPM должен обрабатывать только .php.

Что я придумал:
1. Весь код в volume на сервере
Проект лежит в named volume
Volume шарится между PHP-FPM и nginx
Обновление через CI (GitHub Actions) и локальный git на сервере.
2. Отдельный app-image (артефакт приложения)
app-image содержит только код проекта
При старте контейнеров код из app-image раскладывается в named volume
Этот volume используется PHP-FPM и nginx
storage (uploads, пользовательские файлы) вынесен в отдельный volume
При деплое через GitHub action volume с кодом должен пересоздаваться и инициализируется заново?
Git на сервере не используется в таком случаи.
3. Один образ с PHP и nginx
Внутри образа PHP-FPM, nginx и код приложения.
Отдельный внешний nginx работает как reverse-proxy
4. Код внутри PHP-image
PHP-image содержит код проекта
При старте контейнера код копируется в volume
Этот volume используется PHP-FPM и nginx
Git на сервере не нужен. ( Туту я еще не подумал про инициализацию volume каждый раз)
5. COPY кода в PHP-FPM и nginx образы
Код дублируется в двух образах
Варианты 3, 4 и 5 выглядят плохо.
Варианты с volume кажутся более правильными, но при этом часто встречаю утверждение, что:
Docker-image должен быть самодостаточным
код приложения должен быть внутри image.
volume допустим только для базы даных ну максимум еще storage.
Вопросы:
Какой подход считается корректным для production?
Есть ли более правильный вариант, о котором я не подумал?
Интересует практический правильный опыт.
Ps. Пока писал вопрос придумал вариант 2.
  • Вопрос задан
  • 107 просмотров
Подписаться 1 Простой 6 комментариев
Помогут разобраться в теме Все курсы
  • Stepik
    Docker + Ansible - с нуля, деплой и управление Swarm
    1 неделя
    Далее
  • Учебный центр IBS
    ADM-019 Основы Docker
    1 неделя
    Далее
  • Слёрм
    Docker для админов и разработчиков
    4 недели
    Далее
Решения вопроса 1
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
"Docker-image должен быть самодостаточным код приложения должен быть внутри image." - это важно, если вы:
1. передаете изменения заказчику и он самостоятельно их разворачивает.
2. Должны запускать код на куче стендов для смоука, ИФТ и т.п.
Если у вас статический прод на одном сервере - нет никакой разницы, какой подход вы используете, чтобы обновить там данные. Вам и докер то там не нужен судя по всему.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы