четверг, марта 07, 2013

Развертывание веб приложений с помощью GIT


Время от времени приходится сталкиваться с типовой и до боли банальной, но не тривиальной задачей, как же установить приложение на удаленный сервер или как организовать continues delivery.
Для решения этой задачи для ASP.NET приложений, пожалуй самый простой способ это использовать Web Deploy, но а в случае со скриптовыми языками, да еще запущенными на Linux среде открываться огромное пространство для пытливого ума.

Способ, который мне приглянулся, основан на использовании популярного в мире опенсурса GIT и является относительно простым.

Дано: есть виртуальная машина ec2 или любая Linux машина, далее по тексту "сервер".

Надо: организовать возможность обновлять приложение.

Делаем:

1. Нам понадобятся ssh ключи, по которым наша виртуальная машина будет аутентифицировать, желающих выполнить обновление приложения. Для этого генерируем SSH ключи, следуя инструкциям описанным на gihhub: https://help.github.com/articles/generating-ssh-keys


2. Чтоб добавить сгенерированные ключи, на "сервер" и выполняем команду:

cat ~/.ssh/id_rsa.pub | ssh -i ~/.ssh/your_pemfile.pem <YourUserName>@<Your_IP_Addr> "cat>> .ssh/authorized_keys"

Подробней о происходящем на этом шаге можно прочитать тут: http://rizloff.com/linux/ssh-login-without-password-use-authorized-keys

3. Создаем bare Git репозиторий:

$ cd ~
$ mkdir <YourApplication>.git && cd <YourApplication>.git
$ git init --bare

4. Coздаем папку, где будем размещать наш веб сайт:
$ mkdir /var/www/<YourApplication>

5. Создаем Post-Receive hook, который срабатывает после того как кто-то выполнил push в Git:
$ cd ~/<YourApplication>.git$ cat > hooks/post-receive#!/bin/shGIT_WORK_TREE=/var/www/<YourApplication> git checkout -f
$ chmod +x hooks/post-receive

6. Переключаем на рабочую станцию:

$ git remote add web ssh://<YourUserName>@<Your_IP_Addr>/home/<RemoteUserName>/<YourApplication>.git$ git push web +master:refs/heads/master

7. Теперь для того, чтобы обновить веб сайт на удаленной машине делаем:

$ git push web master

8. Для того, чтобы иметь возможность выполнять git push в несколько удаленных репозиториев одновременно редактируем .git/config локального репозитория:

[remote "all"]
url = https://github.com/YourGitAccount/ProjectDir.git
url = ssh://<YourUserName>@<Your_IP_Addr>/home/<RemoteUserName>/<YourApplication>.git

9. Профит:)

Комментариев нет: