繁体   English   中英

git / github和Web服务器部署配置

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM