innaM 的修改版本:
概念
拥有三个存储库
- devel - 在本地开发机器上开发
- 中央 - 存储库服务器 - 像 GitHub、Bitbucket 或其他任何东西
- prod - 生产服务器
然后,您将事情从开发提交到中央,并且只要您想在产品上部署,就要求产品从产品中提取数据。
“要求” prod 服务器拉取更新可以由 cron 管理(然后您必须等待片刻),或者您可以使用其他方式,例如 ssh 要求执行 git pull 并可能重新启动您的应用程序。
一步步
更详细地说,你可以这样。
在开发上准备回购
在您的开发服务器上开发和测试应用程序。
将其放入本地存储库:
$ git init
$ git add *
$ git commit -m "initial commit"
在中央服务器上创建 repo
例如 bitbucket 提供了这样的描述:https ://confluence.atlassian.com/display/BITBUCKET/Import+code+from+an+existing+project
通常,您在 Bitbucket 上创建项目,找到它的 url,然后从您的 devel repo 调用中找到它:
$ git remote add origin <bitbucket-repo-url>
$ git push origin
将中央仓库克隆到产品服务器
登录到您的产品服务器。
转到 /var/www 并克隆形式 bitucket:
$ cd /var/www
$ git clone <bitbucket-repo-url>
$ cd mysite.com
你应该准备好你的目录。
触发对 prod3 的更新发布
有很多选择。一个是 cron 任务,它会定期调用
$ git pull
如果您的应用程序需要在更新后重新启动,那么您必须确保重新启动会发生(这应该可以使用 git log 命令,它会在更新后显示新行,或者您可以检查,如果状态码会告诉你。
就我个人而言,我会使用“单次 ssh”(您要求不使用 ssh,但我假设您要求“更简单”的解决方案,因此单次调用应该比使用 ftp、scp 或其他魔法更简单。
从您的开发机器(假设您在那里有 ssh 访问权限):
$ ssh user@prod.server.com "cd /var/www/mysite.com && git pull origin && myapp restart"
优点是,您确实控制了更新发生的时刻。
讨论
我使用类似的工作流程。
rsync
似乎在许多情况下服务得足够好或更好(请注意在应用程序运行时创建的文件和应用程序中的文件,这些文件应在正在进行的版本中删除,也应在服务器上删除)。
salt
(saltstack) 也可以,但需要更多的学习和设置)。
我了解到,将源代码和配置数据保存在同一个仓库中会使有时情况变得更加困难(这就是我致力于使用 salt 的原因)。
fab
Fabric 中的命令(基于 python)可能是最佳选择(如果在 Windows 上安装变得困难,请查看http://ridingpython.blogspot.cz/2011/07/installing-fabric-on-windows.html