Вводная часть
Постановка задачи и создание структуры
Автоматизировать развертывание среды исполнения для Laravel приложений с
помощью Docker.
Генерировать локально-доверенные сертификаты с собственным центром сертификации для локальных
доменов, определенных в файле /etc/hosts с помощью утилиты
Mkcert.
Получать бесплатные сертификаты от Let's Encrypt
для реальных доменов на VPS c помощью утилиты
certbot
На локальном компьютере и на VPS реализовать
Nginx Reverse Proxy для проверки сертификатов и транслирования запросов на
соответствующие приложения позади него.
Это обеспечит идентичность локальной среды разработки и VPS и позволит
на одном VPS разместить несколько приложений, а на локальном компьютере
обращаться к приложению через браузер по локальному доменному имени, примерно так
http://site-1.local
Прежде чем приступить к решению задачи, определим требования к локальному компьютеру или VPS. Все описанное ниже было протестировано на OS Linux (Ubuntu 18), на других ОS возможны нюансы, в частности, связанные с различием в структуре файловых систем. Это необходимо учитывать при создании volume между Docker контейнерами и OS.
На компьютере или VPS должны быть
- OS Linux
- Docker версия 19.03.0 +
- Docker Compose версия 1.25.0 +
- Система управления версиями Git
- Утилита Mkcert - только для локального компьютера!!!
Функциональная схема
Файловая структура
Так выглядит файловая структура в общем случае. Конкретно для локального сервера и для VPS будут свои подробности внутри папок о которых поговорим отдельно в соответствующих разделах
- Все проекты собраны в папке my-projects
- Файлы для запуска контейнера reverse proxy собраны в папке docker-reverse-proxy
- Каждый проект лежит в отдельной папке project-1,2,3
- В каждом проекте есть своя папка с файлами для запуска контейнеров обеспечивающих создание среды исполнения конкретного приложения Laravel laravel-docker -1,2,3
- В каждом проекте есть своя папка с кодом конкретного приложения Laravel laravel-app-1,2,3
Подготовьте эту файловую структуру у себя на локальном компьютере или VPS, чтобы в дальнейшем
заполнить ее соответствующим содержанием. Но прямо сейчас сделаем заглушки, вместо реальных
Laravel приложений, чтобы иметь возможность сразу проверить работу
Docker контейнеров.
cd ~/my-projects/project-1/laravel-app-1
mkdir public
nano public/index.html
вставим в index.html строку
<h1>Hello, laravel-app-1</h1>
повторить для laravel-app-2 и laravel-app-3