Эффективный запуск нескольких веб / php приложений

0

В настоящее время мне поручено настроить три отдельных веб-приложения на одном сервере Windows. Веб-приложения построены с помощью PHP/Laravel и используют MySql для базы данных.

Я обычно подхожу к такой задаче, вручную настраивая Apache, PHP и MySql на сервере и запуская веб-приложения PHP со своим собственным vhost на Apache. Проблема, с которой я сталкиваюсь в этом подходе, заключается в том, что если для одного из веб-приложений требуется некоторое обслуживание, что приводит к необходимости закрытия службы, такой как Apache или MySql, тогда другие сети также страдают от простоя.

Итак, я хотел бы изучить другие варианты, где я могу запускать множество веб-приложений и их зависимых сервисов в качестве независимых процессов. Насколько я знаю, я должен был бы сделать что-то подобное с помощью Docker (или другого решения для виртуализации), но я не уверен, что это слишком сложно, или если есть какие-либо другие решения, которые я могу исследовать.

Итак, чтобы подвести итог...

  • Как я могу самостоятельно запускать несколько веб-приложений на одном сервере?
  • Является ли докер правильным подходом (например, примеры), или это слишком сложно?
  • Есть ли альтернативы, которые я должен рассмотреть?
  • Что-нибудь еще (потенциальные проблемы, решения), я должен рассмотреть?
Теги:
docker
virtualhost

1 ответ

1

Я использовал докер в течение многих лет, и очень легко развернуть несколько приложений на одном сервере. Каждое приложение работает независимо, может иметь разные конфигурации даже разные ОС.

Подход:

  • 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

На мой взгляд, это ЛУЧШИЙ способ достижения вашей цели.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню