Переместить приложение из усадьбы в докер - PullRequest
1 голос
/ 14 июня 2019

Мое приложение состоит из трех доменов:

  • example.com
  • admin.example.com
  • partner.example.com

Все эти домены обрабатываются одним и тем же приложением Laravel. Каждый домен имеет свои контроллеры и вид. Модели и другие основные функции совместно используются всеми тремя доменами.

В настоящее время моя локальная среда разработки построена с использованием Homestead (на основе Vagrant), где каждый локальный домен (example.test, admin.example.test и partner.example.test) указывает на один и тот же каталог (например, /home/vagrant/app/public).

Из-за проблем с развертыванием различных версий ОС, NPM, PHP и т. Д. Я хочу перейти на докер. Я прочитал много статей о нескольких доменах или приложениях с помощью Docker. Лучше всего настроить обратный прокси-сервер Nginx, который перенаправляет все входящие запросы в нужное приложение. К сожалению, я не нашел примеров для моего случая, когда все домены указывают на одно и то же приложение.

Если возможно, я бы избегал клонирования одного и того же хранилища трижды для каждого контейнера-докера, на котором запущена одна конкретная часть приложения.

Итак, каков наилучший подход к настройке среды докера?

1 Ответ

1 голос
/ 14 июня 2019

Я создал для вас простую суть, чтобы посмотреть, как я это сделаю https://gist.github.com/karlisabe/f7d91594c004e227e504473ce2c60508

Файл конфигурации nginx основан на документации Laravel (https://laravel.com/docs/5.8/deployment#nginx) и, конечно, на производстве выТакже хотелось бы обработать SSL и сопоставить порт 443. Но это должно послужить вам POC.

Обратите внимание, что в конфигурации nginx я использую имя службы php-fpm для передачи запроса в php-fpm.В докере имена сервисов могут использоваться как имена хостов для соответствующих сервисов, поэтому строка fastcgi_pass php-fpm:9000; означает, что вы передаете запрос в порт 9000 контейнеров php-fpm (порт по умолчанию для прослушиваемого образа fpm)

По сути, вы просто должны определить в nginx, что все 3 ваших поддомена обрабатываются одной и той же конфигурацией сервера, а затем nginx просто передает запрос php-fpm для его фактической обработки.

Чтобы проверить, вы можете просто скопировать два файла из gist в директорию вашего проекта, заменив YOUR_PROJECT_FOLDER в файле docker-compose.yml на acфактическое местоположение вашего проекта (может быть просто.: / var / www / html, если вы поместите docker-compose.yml в корень вашего проекта), затем запустите docker-compose up -d.Добавьте домены в файл hosts (/ etc / hosts и linux / mac), и вы сможете посетить example.test и увидеть ваш сайт.

Примечание. В зависимости от того, где находится ваша база данных, вы можетенужно изменить хост для него, если это localhost в данный момент, потому что он будет пытаться подключиться к серверу mysql из контейнера php-fpm, на котором, конечно, не работает собственный mysql-сервер.

...