2012-10-04 84 views
3

我有我的开发机器上的本地git仓库。使用Git我的Node.js应用程序部署到我的生产服务器

我想使用git推代码到我的生产服务器。并在代码被推送到那里时触发重新启动Web服务器。

什么是做到这一点的命令?我正在使用debian。

/var/www/example.com是我的本地库

生产主机名是production.example.com我有SSH +键已经建立。

回答

2

我会建议在回购您的服务器上后收到钩,用:

GIT_DIR=/path/to/bare/repo/.git 
GIT_WORK_TREE=/var/www/www.example.org git checkout -f 

通过推到裸露的回购协议,你会不会有一个工作树的任何问题你是什​​么推同步(因为裸回购具有没有工作树)。
然后,你就直接签上直播站点的目录结构裸露的回购协议(通过后收到钩)。

这类似于 “git GIT_WORK_TREE post-receive hook deployment remote”。
设置GIT_DIR避免“Git checkout in post-receive hook: “Not a git repository '.'”中提到的问题。

4

它通常是不直接推码直播网站是个好主意。为此,您可以在公用目录之外的服务器上创建裸存储库。这个存储库会将更改推送到您的Live网站存储库,并且将成为您网站的门卫。要设置,请在您的实时网站目录周围创建一个存储库:

$ cd ~/www 
$ git init 
$ git add . 
$ git commit -m"initial import of pre-existing web files" 

创建此目录后,移至无法通过HTTP访问的目录。为了简单起见,我们可以将这个裸目录HUB和网站目录LIVE称为。在这里初始化一个纯仓库:

$ cd; mkdir site_hub.git; cd site_hub.git 
$ git --bare init 

然后,从现有的网站的工作目录内,加这种纯仓库作为远程和实时推送的网站的主分支。

$ cd ~/www 
$ git remote add hub ~/site_hub.git 
$ git remote show hub 
* remote hub 
    URL: /home/rizwan/site_hub.git 
$ git push hub master 

您需要挂钩提交修改到现场仓库。该HUB仓库内创建一个post-update钩:

#!/bin/sh 

echo 
echo "**** Pulling changes into Live [Hub's post-update hook]" 
echo 

cd $HOME/www || exit 
unset GIT_DIR 
git pull hub master 

exec git-update-server-info 

这里面钩,你可以有代码拉完成后重新启动服务器。

此外,在LIVE回购创建post-commit钩送做直播网站回HUB变化。

#!/bin/sh 

echo 
echo "**** pushing changes to Hub [Live's post-commit hook]" 
echo 

git push hub 

在本地计算机上,添加HUB仓库作为远程和更改推到它:

git remote add hub <hub-repository-url> 

这是如何工作的,你写一些代码,并将其推到裸仓库,这使用其更新后的挂钩将更改推送到实时存储库并重新启动服务器。

+0

如果您扩展到拥有多个生产服务器,这将如何工作? – Xerri

+0

您必须编写一个部署脚本,最终在多个遥控器上运行这些命令。 – rizwaniqbal

+0

那么,为什么不直接推动生活,当你最终拉住生活呢? –

相关问题