В настоящее время мне поручено настроить три отдельных веб-приложения на одном сервере Windows. Веб-приложения построены с помощью PHP/Laravel и используют MySql для базы данных.
Я обычно подхожу к такой задаче, вручную настраивая Apache, PHP и MySql на сервере и запуская веб-приложения PHP со своим собственным vhost на Apache. Проблема, с которой я сталкиваюсь в этом подходе, заключается в том, что если для одного из веб-приложений требуется некоторое обслуживание, что приводит к необходимости закрытия службы, такой как Apache или MySql, тогда другие сети также страдают от простоя.
Итак, я хотел бы изучить другие варианты, где я могу запускать множество веб-приложений и их зависимых сервисов в качестве независимых процессов. Насколько я знаю, я должен был бы сделать что-то подобное с помощью Docker (или другого решения для виртуализации), но я не уверен, что это слишком сложно, или если есть какие-либо другие решения, которые я могу исследовать.
Итак, чтобы подвести итог...
Я использовал докер в течение многих лет, и очень легко развернуть несколько приложений на одном сервере. Каждое приложение работает независимо, может иметь разные конфигурации даже разные ОС.
Подход:
1 (или 3) сервера mysql (image: mysql)
3 php-сервера (изображение: php)
1 nginx для перенаправления запроса в качестве прокси (image: jwilder/nginx-proxy)
Это может быть пример для сервисов в docker-compose (повторные службы для mysql и приложения по мере необходимости):
services:
nginx:
image: jwilder/nginx-proxy
restart: on-failure:3
hostname: nginx
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- /opt/docker/nginx/vhost.d:/etc/nginx/vhost.d:ro
- /opt/docker/nginx/certs:/etc/nginx/certs
- /opt/docker/nginx/htpasswd:/etc/nginx/htpasswd
- ./html:/usr/share/nginx/html:rw
environment:
- "DEFAULT_HOST=www.example.com"
- "ENABLE_IPV6=true"
ports:
- "80:80"
- "443:443"
cpuset: "0"
mem_limit: 256M
mysql:
image: mysql:5.7
volumes:
- ./mysql/data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=password
aplication:
image: php:7
links:
- mysql
volumes:
- ./www/:/var/www/html
environment:
- "VIRTUAL_HOST=application.example.com"
Для получения дополнительной информации см. Описание каждого изображения.
О накладных расходах читайте:
Какова стоимость исполнения для контейнера Docker
На мой взгляд, это ЛУЧШИЙ способ достижения вашей цели.