Вы хотите использовать git
нажать приложения на сервер, много how Heroku
does it
Мы достигли этой функциональности на собственном стеке в Rackspace, в котором мы должны были сделать несколько важных вещей, чтобы GTE это работает ,
Deploy
Как правило:
Развертывание приложений отличается от модификации кода. В то время как я не знаю технической терминологии, я знаю, что если вы нажимаете код на одно приложение, это будет совершенно другое для «развертывания» нескольких приложений.
С этой целью я рекомендую рассматривать оба процесса отдельно друг от друга. IE вы должны только нажимать код на определенные репозитории и развертывать «приложение» по своему усмотрению.
Поскольку вы не указали какие-либо особенности своего стека, позвольте мне рассказать вам о моей интерпретации, основанной на нашей работе с нашим собственным стеком RackSpace.
Гит
Костяк то, что вы ищете, git
- который даст вам возможность выполнять "single click deploy":
Хитрость заключается в том, чтобы создать a bare
репозиторий на вашем сервере (почти так же, как Github & Heroku do), а затем дает вам abili чтобы «нажимать» ваш код на эти крючки.Чтобы сделать это, вам нужно сделать несколько вещей (а именно создать git
репо, маршрут на своем сервере, а затем создать любое post-receive hooks
для управления развертыванием):
-
Bare Repo
Первый шаг заключается в создании bare repo
, что может быть сделано очень просто
Если вы SSH в экземпляр EC2, просто запустите следующую команду:
$ git init --bare /git/your_app.git
Это даст вам репозиторий, в котором вы сможете «надавить» ваш код. Разница между этим и рабочим репозиторием заключается в том, что у голого не будет никаких файлов - просто ссылки & другая информация. Уловка - use a hook
, чтобы создать рабочий каталог, который затем можно использовать для запуска приложения.
Голый репо позволит вам нажать код, который вам нужен, и, по сути, предоставить вам функциональность, которую обладают Github & - возможность «отправить» ваш код на сервер лаконично.
-
Хост
Во-вторых, вы тогда должны быть в состоянии «маршрут» любые запросы на этот мерзавец репо, и по-видимому, другие Git репо у вас тоже. Для этого вам нужно будет захватить любые запросы с вашего веб-сервера. Вот как сделать это с Nginx:
#/etc/nginx/sites-available/git
server {
listen 80;
server_name your_domain.com;
root /git;
auth_basic "RESTRICTED ACCESS";
auth_basic_user_file /etc/nginx/.htpasswd;
location ~ ^.*\.git/(HEAD|info/refs|objects/info/.*|git-(upload|receive$
root /gitk;
client_max_body_size 100M;
fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend
fastcgi_param REMOTE_USER $remote_user;
fastcgi_param GIT_HTTP_EXPORT_ALL "";
fastcgi_param GIT_PROJECT_ROOT /git;
fastcgi_param PATH_INFO $uri;
fastcgi_pass unix:/var/run/fcgiwrap.socket
include fastcgi_params;
}
}
Вы хотите use htpasswd to create an authentication file (не создали разрешение на это пока), который затем должен позволять обрабатывать следующие локально:
> git remote add production http://your_domain.com/your_repo.git
> git add .
> git commit -a -m "Production"
> git push production master
Это попросит вас подтвердить подлинность, на которую вам придется использовать данные, указанные в файле auth
.
-
Hook
Наконец, вы затем сможете использовать многие git hooks создать механизм "развернуть". Как правило, вы будете использовать post-receive
:
#git/your_app.git/hooks
cd /app/your_app
git --work-tree=${APP_PATH} --git-dir=${GIT_DIR} checkout -f
bundle install
touch tmp/restart.txt
Это, очевидно, является очень простой. Вы можете сделать его таким же сложным, как вам нравится, даже если хотите комбинировать другие репозитории!
Надеюсь, это даст вам некоторые идеи!
вы об этом http://ru.wikipedia.org/wiki/Stack_%28abstract_data_type%29 – IS04
Извините за путаницу ... стеками Я имел в виду приложения, только что отредактированные, чтобы сделать его более читаемым – Elie
@Elie these приложения взаимосвязаны или отличаются? – Mandeep