我正在运行一个Apache Web服务器,并想知道将更改(从github)部署到Web服务器的最佳方法是什么?
/ var/www /现在只能由root写入.
我应该直接在/ var/www /中使用我的git项目吗?(所以创建/var/www/.git/?)
但是,当我需要运行命令(即sudo git push)时不起作用(因为我的ssh键不在sudo下).
我自己(而不仅仅是root)制作/ var/www/writable会更好吗?或者我应该向root用户添加ssh密钥?或者我应该完全做其他事情?
谢谢.
我使用rsync将本地计算机的内容与服务器同步,如果你只是部署到一台服务器,那么它非常简单(而且Capistrano有点过分.).我把以下别名放在~/.bash_profile
:
alias eget='rsync -avie ssh matt@example.com:sites/example.com/www/ ~/Projects/example/example.com/www/ --exclude .DS_Store --exclude ".git*" --delete-after' alias edep='rsync -avuie ssh ~/Projects/example/example.com/www/ matt@example.com:sites/example.com/www/ --exclude .DS_Store --exclude ".git*" --delay-updates --delete-after'
然后,从我本地机器上的git repo.我做:
git commit -am 'commit some changes' git pull --rebase # pull any new changes from remote (--rebase prevents an unnecessary merge commit.) eget -n # confirm which files I've changed
如果它看起来很腥,我可以eget
不用-n然后做一个git diff -w
.然后,我可以git checkout -- path/to/file
为我想要保留更改的文件做.然后,我提交了我尚未获得的服务器上的更改.只有当服务器上的文件以不同于部署的方式更改时,才会发生这种情况.否则,您知道本地版本总是比服务器上的文件更新,因此不必担心覆盖您本地尚未拥有的服务器上的内容.继续...
edep -n # just see what files will be deployed/updated/etc. edep # looks good. Deploy for real.
完成!
有关详细信息,请查看rsync(1)Mac OS X手册页.
另一种选择是使用Git post-receive hook.但是,你必须在服务器上安装Git才能做到这一点.此外,出于安全性和清洁原因,我建议将.git
目录放在公共www
目录之外.您可以使用Git core.worktree
配置选项执行此操作.例如,从~/git/example.com.git
,做git init --bare; git config core.worktree ~/sites/example.com/
.这~/git/example.com.git
就像.git
dir 一样~/sites/example.com/
.