![实时 PHP Web 应用程序部署](https://linux22.com/image/107129/%E5%AE%9E%E6%97%B6%20PHP%20Web%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E9%83%A8%E7%BD%B2.png)
我希望设置 Bamboo 来进行实时 PHP 部署(相同的原则也适用于 Jenkins)
我希望能够通过按下 Bamboo 应用程序中的按钮来进行实时发布。
不过,我想确保会议保持活跃。即网络用户不会经历任何停机。如果出现问题,它会尽力保持弹性。
对于如何实现这一目标的高级概念有什么建议吗?
我的想法是它可以像下面这样工作
两个正在运行的网络服务器
webapp-live -- port 80 public
webapp-deploy -- port 81 private
战略
1) Push project files onto server
2) /var/www/releases/web-app-tag-number.zip
3) unzip file
4) deploy to webapp-deploy
5) sanity checks i.e. webapp-deploy loads homepage ok
6) swap deploy with live - use symlink to re-point files? (will this keep sessions alive?)
我确信这样的事情已经发生过好几次了。
想知道是否有更好的策略?
答案1
这个怎么样:
1 public facing load balancer (e.g. HAproxy)
Two backend webservers.
- 从池中删除一台网络服务器(使用 Haproxy,这是通过管理套接字完成的。请参阅这个问题)
- 等待该服务器上的会话结束。
- 将项目文件推送、解压缩、部署到禁用的服务器。
- 不通过负载均衡器进行测试。 (即本地主机)
- 重新启用服务器。
- 对第二台服务器重复步骤 1。
在等待所有当前连接到期后,“禁用”服务器会将服务器置于维护模式。当然,连接不一定等于“会话”。因此,根据您处理会话的方式,可能需要在两个服务器之间进行一些会话复制或单独的会话数据库(一个新的会话数据库)单点故障)两个服务器都依赖。
这样您的用户就不会遇到任何停机时间。另外,您还可以获得一些负载平衡的额外好处。
遗憾的是,以这种方式设置 HAproxy 可能会很痛苦。