Web应用部署注意事项
部署Web应用是一项细活:它的配置和操作通常涉及各方面,而且要求准确无误。平时注意配置管理,工作认真负责,方可保证应用正常上线运行。
部署之前
开发时
早在开发阶段就应当注意整理和维护应用配置,包括但不限于:
- 各数据源的配置(地址、端口、实例、用户名、密码)与涉及的配置文件;
- 外部接口的地址(IP、端口、路径等)与涉及的配置文件;
- 依赖的外部程序(例如ImageMagick等);
- 应用中开发模式/生产模式的切换开关(如果有的话);
- 涉及文件操作的目录路径(如果需要在应用程序目录中读写文件的话);
- 准确的数据库表结构(字段名、类型、长度、Nullable)、索引、序列(如使用Oracle等数据库)、触发器、存储过程、函数以及字典数据内容。在维护数据库时应注意同步数据库设计文档、开发库、测试库,系统部署时还要同步维护生产库。
开发过程中,如无特殊需求,应避免将应用地址、端口或路径写死,否则的话,一旦需要更换地址或路径就会遇到很大的麻烦。
上线前
准备部署之前,应完整识别出开发/测试环境与生产环境配置的差异,避免疏漏。除此之外,强烈建议对各服务器资源和部署步骤进行记录,例如:
- 各服务器内网IP地址、公网IP地址、操作系统、CPU、内存、硬盘空间;
- 各服务器用途(数据库/应用节点/负载均衡等);
- 各服务器主要应用及版本;
- 各服务器登录方式;
- 应用或数据部署路径;
- 系统设置,包括防火墙、参数设定等。
操作生产环境之前,最好找个类似的测试环境进行测试,了解如何处理意外情况(例如断电、死机、系统慢等)。
如果预计需要频繁部署,建议写部署脚本,配置Jenkins。
部署中
每次正式升级之前一定要打基线,从基线取代码,打整包,生产环境配置文件用事先预备好的备份覆盖升级包,不要单独换文件!换文件升级,有第一次,就会有第二次。越是换文件,后面就越不敢打整包,几个星期以后,全世界就没有人知道生产环境与本地代码有什么区别了。
数据库
部署数据库时应注意:
- 确保数据库软件已正确安装和启动;
- 表空间、账号密码正确;
- 字符集配置正确;
- 正确建立表结构、索引、序列、触发器、存储过程、函数等;对于升级,正确将旧结构修改成新结构;
- 正确初始化字典数据;
- 根据实际情况调整连接数和 Max open files 等设置。
应用服务器
部署应用时需要注意:
- 各软件(如Apache、PHP和应用所需外部程序)已正确安装,环境变量、端口、证书(HTTPS)正确配置;
- 程序代码或编译后文件已放到正确位置;
- 如果应用不是以root身份启动,那么程序文件已设置正确所有者;
- 应用程序配置、数据源已按生产环境进行修改;
- 系统防火墙和相关外部接口已正确配置;
- 如果系统规模较大,Max open files 数量(/etc/security/limits.conf)和 fs.file-max(/etc/sysctl.conf)已进行调整;
- 了解如何取用后台日志。
负载均衡
- 注意各节点应配置好;
- 注意负载均衡算法的选择;
- 注意会话保持的设置。
部署之后
部署时或部署完成后,仍然要对资源和使用情况进行整理总结,以便后续运维。