18 Август, 2014

Простой деплой веб-приложения при помощи Git

В далекие времена все изменения на сайтах долго закачивались на сервер по FTP и это было жутко медленно. Потом люди стали заливать на сервера изменения уже в виде архивов которые стало возможным разворачивать из панели управления хостингом либо же зайдя по ssh. Сейчас же очень удобно разрабатывать веб-приложения на локальной машине и деплоить их на удаленный сервер одной простой командой - git push. Чуть ниже пошаговая инструкция по настройке сервера для автоматического деплоя по срабатыванию хука post-receive. Означения: ЛМ - локальная машина и УС - удаленный сервер.

Тут все тоже распишу по шагам:

  1. На локальной машине (ЛМ) инициализируем репозиторий - git init

  2. На сервере (УС) создаем bare-репозиторий - git --bare init

  3. (ЛМ) добавляем адрес удаленного репозитория - git remote add production user@ip:/dir/git/reponame/

  4. (ЛМ) Делаем изменения в проекте и коммитим их - git add -A и git commit -m "commit comment"

  5. (ЛМ) Создаем новую ветку под названием production - git checkout -b production

Вдальнейшем на сервере будут деплоиться изменения только из этой ветки. В ней мы не работаем! Туда только мержим из других веток тогда когда все готово!

  1. (ЛМ) Сливаем изменения в ветку production и отправляем изменения на сервер - git push -u production

  2. (УС) На сервере переходим в директорию с сайтом - cd ~/website/

Именно туда мы будем деплоить изменения из продакшн-ветки

  1. (УС) Клонируем репозиторий указав конкретную ветку - git clone -b production /dir/git/reponame

  2. (УС) Создаем хук в bare-репозитории - vim /dir/git/reponame/hooks/post-receive

Содержание:

#!/bin/sh
git --git-dir ~/website/.git --work-tree ~/website/ pull
  1. (УС) Делаем файл исполняемым - chmod +x /dir/git/reponame/hooks/post-receive

  2. (ЛМ) Пробуем делать изменения в файлах и пушим их на сервер - git push production production

Наблюдаем нет ли в выводе команды строчек с fatal error. Если нету то все ок.

  1. (УС) Проверяем - в ~/website/ должны отразиться свежие изменения

Если их нет то пробуем запустить хук вручную - /dir/git/reponame/hooks/post-receive

Вот и все. Ничего сложного =)

Новый комментарий

comments powered by Disqus