Эта страница была переведена сообществом и не обязательно является актуальной. Обратитесь к справочной версии.
Эта страница была переведена сообществом и не обязательно является актуальной. Обратитесь к справочной версии.
Эта страница была переведена сообществом и не обязательно является актуальной. Обратитесь к справочной версии.
В этом руководстве мы рассмотрим, как развернуть PHP-приложение на одном сервере с использованием Docker Compose.
Если вы используете Symfony, рекомендуется прочитать раздел “Deploy in production” документации проекта Symfony Docker (в котором используется FrankenPHP).
Если вы используете API Platform (который также работает с FrankenPHP), ознакомьтесь с документацией по деплою этого фреймворка.
Сначала создайте файл Dockerfile
в корневой директории вашего PHP-проекта:
FROM dunglas/frankenphp
# Замените "your-domain-name.example.com" на ваш домен
ENV SERVER_NAME=your-domain-name.example.com
# Если вы хотите отключить HTTPS, используйте вместо этого:
#ENV SERVER_NAME=:80
# Включите настройки PHP для продакшн
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
# Скопируйте файлы PHP вашего проекта в публичную директорию
COPY . /app/public
# Если вы используете Symfony или Laravel, необходимо скопировать весь проект:
#COPY . /app
Ознакомьтесь с разделом “Создание кастомных Docker-образов” для получения дополнительных подробностей и настроек, а также для установки PHP-расширений и модулей Caddy.
Если ваш проект использует Composer, убедитесь, что он включён в Docker-образ, и установите все зависимости.
Затем добавьте файл compose.yaml
:
services:
php:
image: dunglas/frankenphp
restart: always
ports:
- "80:80" # HTTP
- "443:443" # HTTPS
- "443:443/udp" # HTTP/3
volumes:
- caddy_data:/data
- caddy_config:/config
# Томы, необходимые для сертификатов и конфигурации Caddy
volumes:
caddy_data:
caddy_config:
Note
Примеры выше предназначены для использования в продакшне.
В процессе разработки вы можете использовать том для монтирования, другую конфигурацию PHP и другое значение для переменной окруженияSERVER_NAME
.Посмотрите проект Symfony Docker (который использует FrankenPHP) для более сложного примера с использованием мультистейдж-образов, Composer, дополнительных PHP-расширений и т.д.
Наконец, если вы используете Git, закоммитьте эти файлы и отправьте их в репозиторий.
Для деплоя приложения в продакшн требуется сервер. В этом руководстве мы будем использовать виртуальную машину, предоставляемую DigitalOcean, но подойдёт любой Linux-сервер.
Если у вас уже есть Linux-сервер с установленным Docker, вы можете сразу перейти к следующему разделу.
В противном случае, используйте эту ссылку, чтобы получить $200 на баланс, создайте аккаунт, затем нажмите “Create a Droplet”.
Перейдите во вкладку “Marketplace” в разделе “Choose an image” и найдите приложение “Docker”. Это создаст сервер на Ubuntu с установленными Docker и Docker Compose.
Для тестов подойдут самые дешёвые тарифы. Для реального продакшна выберите тариф из раздела “general purpose” в зависимости от ваших потребностей.
После этого подключитесь к серверу через SSH:
ssh root@<droplet-ip>
В большинстве случаев вам потребуется связать доменное имя с вашим сайтом.
Создайте запись DNS типа A
, указывающую на IP вашего сервера:
your-domain-name.example.com. IN A 207.154.233.113
Пример настройки через DigitalOcean (“Networking” > “Domains”):
Note
Let’s Encrypt, сервис, используемый FrankenPHP для автоматической генерации TLS-сертификатов, не поддерживает использование IP-адресов. Для работы необходим домен.
Скопируйте ваш проект на сервер с помощью git clone
, scp
или любого другого инструмента.
Если вы используете GitHub, настройте ключи развёртывания.
Пример с использованием Git:
git clone git@github.com:<username>/<project-name>.git
Перейдите в директорию проекта и запустите приложение в режиме продакшн:
docker compose up -d --wait
Сервер готов, а HTTPS-сертификат был автоматически сгенерирован. Перейдите на https://your-domain-name.example.com
и наслаждайтесь!
Caution
Docker может кэшировать слои. Убедитесь, что вы используете актуальную сборку, или используйте опцию
--no-cache
для предотвращения проблем с кэшем.
Если вам нужно развернуть приложение на кластер машин, используйте Docker Swarm, который совместим с предоставленными файлами Compose.
Для деплоя на Kubernetes ознакомьтесь с Helm-чартом API Platform, который использует FrankenPHP.