Web应用部署注意事项

部署Web应用是一项细活:它的配置和操作通常涉及各方面,而且要求准确无误。平时注意配置管理,工作认真负责,方可保证应用正常上线运行。

部署之前

开发时

早在开发阶段就应当注意整理和维护应用配置,包括但不限于:

  1. 各数据源的配置(地址、端口、实例、用户名、密码)与涉及的配置文件;
  2. 外部接口的地址(IP、端口、路径等)与涉及的配置文件;
  3. 依赖的外部程序(例如ImageMagick等);
  4. 应用中开发模式/生产模式的切换开关(如果有的话);
  5. 涉及文件操作的目录路径(如果需要在应用程序目录中读写文件的话);
  6. 准确的数据库表结构(字段名、类型、长度、Nullable)、索引、序列(如使用Oracle等数据库)、触发器、存储过程、函数以及字典数据内容。在维护数据库时应注意同步数据库设计文档、开发库、测试库,系统部署时还要同步维护生产库。

开发过程中,如无特殊需求,应避免将应用地址、端口或路径写死,否则的话,一旦需要更换地址或路径就会遇到很大的麻烦。

上线前

准备部署之前,应完整识别出开发/测试环境与生产环境配置的差异,避免疏漏。除此之外,强烈建议对各服务器资源和部署步骤进行记录,例如:

  1. 各服务器内网IP地址、公网IP地址、操作系统、CPU、内存、硬盘空间;
  2. 各服务器用途(数据库/应用节点/负载均衡等);
  3. 各服务器主要应用及版本;
  4. 各服务器登录方式;
  5. 应用或数据部署路径;
  6. 系统设置,包括防火墙、参数设定等。

操作生产环境之前,最好找个类似的测试环境进行测试,了解如何处理意外情况(例如断电、死机、系统慢等)。

如果预计需要频繁部署,建议写部署脚本,配置Jenkins。

部署中

每次正式升级之前一定要打基线,从基线取代码,打整包,生产环境配置文件用事先预备好的备份覆盖升级包,不要单独换文件!换文件升级,有第一次,就会有第二次。越是换文件,后面就越不敢打整包,几个星期以后,全世界就没有人知道生产环境与本地代码有什么区别了。

数据库

部署数据库时应注意:

  1. 确保数据库软件已正确安装和启动;
  2. 表空间、账号密码正确;
  3. 字符集配置正确;
  4. 正确建立表结构、索引、序列、触发器、存储过程、函数等;对于升级,正确将旧结构修改成新结构;
  5. 正确初始化字典数据;
  6. 根据实际情况调整连接数和 Max open files 等设置。

应用服务器

部署应用时需要注意:

  1. 各软件(如Apache、PHP和应用所需外部程序)已正确安装,环境变量、端口、证书(HTTPS)正确配置;
  2. 程序代码或编译后文件已放到正确位置;
  3. 如果应用不是以root身份启动,那么程序文件已设置正确所有者;
  4. 应用程序配置、数据源已按生产环境进行修改;
  5. 系统防火墙和相关外部接口已正确配置;
  6. 如果系统规模较大,Max open files 数量(/etc/security/limits.conf)和 fs.file-max(/etc/sysctl.conf)已进行调整;
  7. 了解如何取用后台日志。

负载均衡

  1. 注意各节点应配置好;
  2. 注意负载均衡算法的选择;
  3. 注意会话保持的设置。

部署之后

部署时或部署完成后,仍然要对资源和使用情况进行整理总结,以便后续运维。