Как стать автором
Обновить

Deploy проекта прямо на сервер с помощью Git, без регистрации и смс

Всем привет! Покажу небольшой способ деплоя не используя GitHub, только сервер и Git. Его на Хабре не нашел, буду исправлять :-)

После настройки будет достаточно написать команду git push из ветки (например) master и все изменения будут на сервере.

Как деплоить Git репозиторий

Вообще есть много способов, их можно поделить на два типа: копирование файлов на сервер и более продвинутые системы непрерывного развертывания (CI/CD).

Этот способ что-то среднее. Не нужен сторонний сервис (по типу GitHub), просто git и прямые руки.

Для начала скопируем репозиторий на сервер, вот официальное руководство , а вот краткий step by step:

  1. Создаем "голый" репозиторий. Для этого нужно клонировать проект с параметром --bare:

    $ git clone --bare my_project my_project.git

    теперь у тебя есть копия папки .git, и по соглашению имя должно иметь суффикс .git

  2. Отправляем репо на сервер, любым удобным способам:

    $ 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

Чтобы после пуша проект сам разворачивался, нужно настроить хуки:

  1. Переходим на сервер

    $ ssh user@server
  2. Создаем файл /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
  3. Сделаем файл исполняемым, иначе он не запуститься:

    $ chmod +x /path/to/my_project.git/hooks/post-receive

Все настроено и готово, теперь при команде git push проект сам развернется! Все изменения будут видны в папке /path/to/my_project

Источники

Идею подглядел здесь:

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.