Простой способ разворачивать (деплоить) проекты на боевом (production) сервере через git

Иногда встречаются заказчики использующие git для хранения своих проектов и, вместе с этим, выгружающие их на боевые серверы через FTP (sFTP). Эта простая инструкция покажет способ разворачивать и обновлять проекты через git.

Для тестирования данного рецепта необходимы базовые навыки работы с git.

Для начала нам нужен основной репозиторий проекта с веткой master. Скорее всего, он у вас уже есть. Если же нет, то создайте его и отправьте в него свой проект. В master-ветке будет происходить разработка. Эта версия проекта (master) будет работать на компьютере разработчика со всеми необходимыми настройками (данными для подключению к БД, логами и т.д.). Чтобы другие разработчики могли участвовать в проекте, выложите master-ветку на один из git-сервисов, например, на github.com, bitbucket.org, свой gitlab-сервер и так далее.

Подготовка боевой версии проекта

Для боевой версии сайта создадим отдельную ветку – “production”. Её мы подготовим для работы с боевым сервером, то есть берем нашу master-ветку и выставляем все необходимые настройки: подключение к БД production-сервера, отключение вывода ошибок, отключения лишнего логирования, деактивация модулей тестирования и так далее. Проще говоря, ветка “production” будет представлять из себя полностью подготовленный проект для работы на боевом сервере. После подготовки выгружаем нашу новую ветку на git-сервер, где уже хранится master-ветка. Именно с этого git-сервера мы будем получать production-ветку для боевого сервера.

Первая выгрузка проекта на боевой сервер

Создаем репозиторий на боевом сервере и закачиваем в него нашу production-ветку. После этого проводим дополнительную настройку, например, обновляем библиотеки composer’a, активируем миграции и так далее. Вот пример того как это можно сделать:

# Закачиваем на production-сервер production-ветку проекта.
git init
git remote add origin https://bitbucket.org/ваш_логин/наименование_проекта.git
git pull origin production
git checkout production
git branch -D master # на боевом сервере master-ветке делать нечего
 
# Осуществляем дополнительную настройку проекта для работы. Примеры:
composer update
php init_magrate_command
other_initial_command...

Обновление проекта на боевом сервере

Сливаем master-ветку в production-ветку для обновления кода (переходим на ветку production и делаем merge с master). Проверяем все выставленные настройки, все ли нормально соединилось. Отправляем все изменения на git-сервер. Обновляем production-ветку на сервере с git-сервера через pull, вот так:

git pull origin production

После обновления кода может потребоваться повторно обновить библиотеки composer’a, миграции и так далее.

Желательно подключить веб-хук в используемом git-хранилище. Он будет запускать скрипт развертывания проекта. Плюс к этому, все локальные настройки окружения, как для локальной машины, так и для боевого сервера, стоит хранить в .env-файле.

Безопасность

Чтобы не допустить утечек исходников проекта, вам необходимо закрыть доступ к .git папке, так как в ней находятся исходники. Также желательно, чтобы корневая директория проекта (DocumentRoot имеется ввиду) вела на какую-нибудь публичную директорию без git. Например:

- .git
- project_folder_1
- project_folder_2
- project_folder_3
- ...
- project_folder_N
- project_public_directory (DocumentRoot должен вести на неё)

Таким образом, ваш репозиторий окажется в большей безопасности. В разных проектах/cms/фреймворках “project_public_directory” именуется по-разному, например, “public”, “web”, “www” и так далее. Эта директория нужна для размещения в ней публичных файлов (эти файлы предназначены для обычных пользователей и доступны всем), таких как фронт-контроллеры (index.php), css-стили, js-скрипты, изображения, шрифты и другие.

Другие способы разворачивания проектов

В сети вы можете найти большое количество различных инструкций по разворачиванию проектов не только через git, но и через специальные инструменты наподобие Capistrano и Deployer. Эти инструменты лучше использовать для крупных проектов, где процесс разворачивания и обновления требует большого количества действий, а для малых и небольших или личных проектов вполне подойдет эта инструкция.

Полезные ссылки:

Добавить комментарий