部署架构:零停机生产系统
本文介绍我们如何通过自动重启和零停机部署和运行网站。
问题:手动部署风险高
传统部署需要:
-
手动服务器重启:导致停机
-
服务监控:需有人监控崩溃情况
-
代码更新:需要SSH访问和手动操作
-
回滚:出现问题需手动回滚
这种方式无法扩展,并在更新期间导致停机。
解决方案:使用Systemd实现自动化部署
我们使用systemd管理应用程序(参见基础设施概览):
-
自动重启:在崩溃或代码变更时自动重启
-
零停机:优雅的工作进程重启
-
日志记录:集中式日志管理
-
进程管理:处理工作进程生命周期
服务器基础设施
生产服务器
生产服务器托管面向公众的网站:
-
用途:提供产品目录和电子商务的公共网站
-
模块:仅"web"模块
-
环境:生产环境(Gunicorn + systemd)
-
访问:公开访问(无需登录)
应用服务器
Gunicorn
Gunicorn是生产环境Web服务器:
- 多工作进程:多个工作进程
Systemd集成
Systemd管理Gunicorn:
-
自动启动:服务器启动时自动运行
-
自动重启:崩溃或代码变更时自动重启
-
日志记录:Systemd日志集成
-
进程管理:工作进程生命周期管理
配置
环境配置
配置按环境区分:
-
配置文件:环境特定设置
-
JSON格式:键值对格式
-
环境变量:存储密钥和API密钥
-
模块启用:控制加载哪些功能
静态资源
静态资源通过S3和CloudFront CDN提供服务:
-
S3存储桶:静态文件的对象存储
-
CloudFront:全球资源分发的CDN
-
缓存策略:静态内容长TTL缓存
-
版本控制:通过版本号实现缓存清除
部署流程
代码部署
通过Git部署代码,systemd管理应用程序服务:
- 提交和推送:变更推送到Git仓库
- 服务器拉取:代码拉取到生产服务器
- Systemd重启:服务在代码变更后自动重启
配置部署
配置与代码分开管理:
- 配置文件:Git中的JSON配置文件
- 环境变量:从环境加载的密钥
- 模块启用:控制加载哪些功能
监控
健康检查
健康端点监控服务器状态:
-
健康端点:基础健康检查
-
数据库检查:数据库连接性
-
缓存检查:缓存连接性
日志记录
日志存储在多个位置:
-
Gunicorn错误日志:应用程序错误
-
Gunicorn访问日志:HTTP请求
-
服务日志:Systemd日志
总结
部署架构提供:
-
Gunicorn:生产环境WSGI服务器
-
Systemd:自动重启和进程管理
-
Git部署:代码和配置管理
-
S3 + CloudFront:静态资源分发
-
健康监控:健康检查端点
-
日志记录:错误和访问日志