Deploy проекта прямо на сервер с помощью Git, без регистрации и смс
Всем привет! Покажу небольшой способ деплоя не используя GitHub, только сервер и Git. Его на Хабре не нашел, буду исправлять :-)
После настройки будет достаточно написать команду git push
из ветки (например) master
и все изменения будут на сервере.
Как деплоить Git репозиторий
Вообще есть много способов, их можно поделить на два типа: копирование файлов на сервер и более продвинутые системы непрерывного развертывания (CI/CD).
Этот способ что-то среднее. Не нужен сторонний сервис (по типу GitHub), просто git и прямые руки.
Для начала скопируем репозиторий на сервер, вот официальное руководство , а вот краткий step by step:
Создаем "голый" репозиторий. Для этого нужно клонировать проект с параметром --bare:
$ git clone --bare my_project my_project.git
теперь у тебя есть копия папки
.git
, и по соглашению имя должно иметь суффикс .gitОтправляем репо на сервер, любым удобным способам:
$ scp -r my_project.git user@server:/path/to/
Путь до него:
/path/to/my_project.git
Если на сервере будут несколько пользователей, нужно дать им права на изменения репозитория:
$ ssh user@server $ cd /path/to/my_project.git $ git clone --bare --shared
Готово, гит репозиторий на сервере. К нему можно получить доступ и даже отправлять изменения из своего компа:
$ git push --set-upstream user@server:/path/to/my_project.git master
# После этого любой пуш (с той же ветки с которой была запущена команда)
# будет отправляться на сервер в ветку master
Чтобы после пуша проект сам разворачивался, нужно настроить хуки:
Переходим на сервер
$ ssh user@server
Создаем файл
/path/to/my_project.git/hooks/post-receive
, открываем любимым редактором, вставляем следующие строки:#!/bin/sh # С помощью команды checkout, извлекается файлы из git-dir в work-dir git --work-tree=/path/to/my_project \ --git-dir=/path/to/my_project.git checkout # Дальше могут идти любые другие команды для развертывания. Например: # cd /path/to/my_project # sudo docker-compose up -d --build
Сделаем файл исполняемым, иначе он не запуститься:
$ chmod +x /path/to/my_project.git/hooks/post-receive
Все настроено и готово, теперь при команде git push
проект сам развернется! Все изменения будут видны в папке /path/to/my_project