Иногда встречаются заказчики использующие 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. Эти инструменты лучше использовать для крупных проектов, где процесс разворачивания и обновления требует большого количества действий, а для малых и небольших или личных проектов вполне подойдет эта инструкция.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.