[英]git / github and web server deployment configuration
我正在运行一个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
如果它看起来很腥,我可以在没有-n的情况下进行eget
,然后只需要做一个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 init --bare; git config core.worktree ~/sites/example.com/
。 这使~/git/example.com.git
就像~/sites/example.com/
的.git
目录一样。
创建一个中央存储库,使用git的分支为不同的目的创建不同的分支,并且永远不会公开地为您的所有存储库提供服务,也不应该公开地提供您的.git目录(因为这与提供您使用的所有内容相同)代码或将存储库放入公共场所)。 从我自己的经验来看,这是我推荐的步骤:
为代码创建中央/中心存储库。 (可选,但建议。更好的是使用github.com作为中央存储库)。 然后,您可以查看本地部署的本地副本,例如,当您想要在笔记本电脑上重新创建站点时。 没必要,但非常方便,确保您的网站是便携式的。 您可以使用暂存存储库和暂存分支进行开发。 您还可以使用回购和分支进行生产。
在存储库中创建一个显式公共目录,该目录不是存储库的根目录 :例如,在存储库中创建/ www /或/ served /或/ public /目录。 这些内容将由搜索引擎公开提供并可编入索引,因此请注意其中的内容。 假设那里的任何东西都是公共知识,缓存为永恒,并且将成为安全漏洞攻击的目标(因为这很容易就是事实)。
创建开发者存储库:git克隆服务器上的中央存储库(例如cd /home/tchal
然后是git clone git@github.com:tchalvak/ninjawars.git
),尽管理想情况下是在对开发人员组具有共享权限的文件夹中。
为您的开发站点创建一个符号链接: cd /var/www/
, ln -s /url/to/shared/repository/public/ nickNameForDevSiteHere
,创建仅指向站点的服务/公共文件的符号链接,创建一个简单的发展水平的网站。 (可选,但建议)。 通过这种方式,可以通过一些ip和昵称轻松访问开发站点,例如http://10.0.1.123/publicdevelopmentsitenickname
而无需真正的域名。
指定实时和部署的代码提交。 您可能希望为当前“活动”的任何代码创建live-branch
,只要知道该分支可能必须被周期性地强制覆盖,例如git branch live-branch
git push -f origin live-branch
。 将其视为代码的快照,而不是保持稳定的分支。
当您确定开发站点已经过足够好的测试时,可以通过自定义部署脚本手动部署live-branch
代码,也可以使用在其中签出实时分支的不同存储库,仅为明确公开提供服务内容,类似于开发站点。
在apache中为域名创建虚拟主机。 例如,你可以使用类似的东西: <VirtualHost *> ServerName greatdomain.com ServerAlias www.greatdomain.com DocumentRoot /srv/greatdomain/www/ </VirtualHost>
这是一个很大的话题,所以如果你不清楚所有的话题细节,我建议进一步研究在apache中设置虚拟主机。
将DNS指向服务器IP的域名。
总之,您可以非常轻松地使用git使用特定于每个部署类型的分支来部署所有代码。 无法帮助同步(例如,部署之间的数据库),但这是您在运行之后可以弄清楚的一个步骤,作为部署站点的第二层,并在此期间手动执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.