写完网站不是终点,部署才是线上“生命”的开始。而部署从不是“复制+粘贴”的过程,而是一场关于一致性、可预期性与可恢复性的实践艺术。
一、开发环境 ≠ 生产环境:为何你本地能跑,线上却炸?
开发机上的“能跑”,常常是因为:
-
使用软链接绕过了权限问题
-
忘记了线上服务器无 GUI、无依赖
-
配置写死(比如 127.0.0.1,非公网 IP)
部署哲学第一课就是:开发环境与生产环境的“差异隔离”必须做到极致。
最佳实践:
-
本地模拟线上部署(使用 Docker 本地跑 Nginx + PHP + Redis)
-
所有配置使用 .env 环境变量管理
-
不允许代码中硬编码“路径、账户、密钥”
二、自动化部署的三种思路对比
方法 |
工具 |
特点 |
---|---|---|
Git钩子 |
post-receive |
简单粗暴,适合单项目 |
CI/CD |
GitHub Actions / GitLab CI |
适合团队协作、测试、分支管理 |
DevOps工具链 |
Jenkins / ArgoCD |
企业级,支持部署审批、灰度发布 |
– name: 部署到服务器
run: |
scp -r ./dist user@server:/var/www/site
ssh user@server “sudo systemctl restart nginx”
三、零停机部署与热更新策略
真正高级的部署,是用户无感知的。做到这点,你需要:
-
使用反向代理 + 蓝绿部署(A/B环境切换)
-
使用 PM2 / Supervisor 保障后端服务不停机
-
使用队列(如 RabbitMQ)解耦耗时任务
网站部署不是“上传完就行”,而是高可用性工程的一部分。部署的优雅程度,往往体现一个团队的“成熟度”。
评论0