There is short instruction for deployment Laravel site on AWS EC2 with Load Balancer.
Предварительно не забываем создать на каждом сервере уникальный html файл, чтобы видеть открывая его запросом на сайт и понимать, какой именно из серверов в данный момент дал ответ по 80 или 443 порту
a) отключить от балансировщика 2ой сервер
Для этого в EC2 в разделе Target Groups в каждой нужной группе портов отключить нужный сервер, поставив на него чекбокс и нажав Deregister
или сделать в заголовка ответ отличающийся от 200, тогда Лоад Балансер сам его исключит из правил. Тоесть избавиться от ответа по Heath check Path, предположим переименовать страницу, чтобы по заданном адресу не приходил ответ 200, на нужном сервере. По Health Check-у Лоад балансер пингует доступен сервер или нет. Таким образом мы имитируем для него отказ и Лоад Балансер выкидывает сервер из связки.
b) настроить на 2-ом сайт на Laravel и запустить —
Для этого в AWS:
смотрим IP адрес сервера EC2 отключенного в Лоад Балансер и в файле Вашего локального компьютера прописываем в DNS hosts настраиваемый домен на IP адрес отключенного сервера
В настройках фаервола AWS EC2 -> Network & Security -> Security groups открываем порт 80 и 443 для Вашего домашнего IP адреса, потому что по этому домену теперь будет обращаться напрямую только на этот сервер, пока настраиваем.
c) Как сайт заработал — проверяем в Google Chrome Dev Tools по заголовкам пакетов, что на настраиваемый домен идет обращение на это IP адрес отключенного сервера
d) Настраиваем отключенный сервер, его сайт видим только мы с нашего компьютера, другие не видят
1) На всякий случай, если есть делаем копию старого сайта — cp -R laravel old_laravel
2) Делаем 2 снапшета для серверов вручную — бекапы
3) Сжать файлы — CSS, JS, удобны способом
4) Делаем тупо копированием файлов в папку cp -R laravel-demo laravel, если заранее подготовленная то переносом mv laravel2 laravel
5) Не забываем, что будут проблемы с правами на файлы, поэтому — sudo chown -R ubuntu:www-data laravel
6) Поменять все необходимые настройки в .env
7) Перенастроить конфиг апатча (пути) на новую папку сайта
или скопировать заранее подготовленный
sudo cp /mnt/efs/files/22.09.2020/apache/clone/www.site.com.conf /etc/apache2/sites-available/www.site.com.conf
8) Перечитать конфиг Апатч сервера сервера без разрыва активных соединений — sudo apachectl -k graceful
9) Зайти в папку /storage/framework/views и удалить все файлы кеша сгенерированные ранее blade
10) Напоследок выполнить данную последовательность комманд в главное директории сайта laravel
composer update && composer dumpautoload && php artisan route:clear && php artisan config:clear && php artisan cache:clear
Данный сервер настроен идем его подключать обратно к Лоад Баланс
Проверяем, как все запустилось и ошибки в Ларавел логах и логах сервера.
e) если норм, то подключить к балансировщику 2ой
Не забыть удалить из hosts файла IP этого сервера.
f) Теперь отключаем 1ый и все повторяем на нём
g) потом активировать сервер обратно
Для этого в EC2 в разделе Target Groups в каждой нужной группе портов включить нужный сервер зайдя в группу нажав Register Server, далее нажать Include as pending below, а далее Register pending targets, ждем несколько минут пока не подключится.
и так по этому циклу со всеми серверами, если их много
Как сервера готовы идем дальше
h) Далее идем на CDN или S3 бакет, куда надо положить фронтенд новые сжатые файлы .css и .js и с помощью веб панели или AWS console их туда заливаем и не забываем изменить время кеша по стандартам Google Page Speed — max-age=31536000
k) Далее идем и сбрасываем кеш в CloudFront нужного Origin и CNAME в конкретном случае во табе Invalidation нажимаем create Invalidation, пишем правила путей по которым очистить кеш новых файлов