最近一直在做web产品的运维,其中重要的一步就是项目或功能的上线发布,这个过程需要研发,测试和运维的通力合作。产品编码完成并经测试通过以后,研发提供项目的维护说明书,运维人员根据维护说明书在生产环境中完成产品或功能的上线发布。维护说明书的好坏直接关系到上线过程是否能够顺利完成,经历了几个产品的上线过程,和研发测试人员的不断沟通,对维护说明书的书写有了一些思路, 一份比较好的维护说明书大致需要包括以下几个部分:
一.软件包和第三方软件
软件包指研发coding的成果,这个当然是必须的。第三方软件指产品中使用到的开源或其他现成的软件,如MySQL, Apache etc。
a) 产品中用到的第三方软件一定要说明版本号,需要使用到高版本软件的特性,需要在维护说明书中指出,并给出软件版本及具体的编译参数。
b) 为了后续性能调优的方便,生产环境中不会使用LAMP的集成环境,所以维护说明书中也不要使用这种集成环境。
c) 同一产品中不同的子项目可能由不同的项目组并行开发,为保证产品集成方便,上线后不出或少出问题, 不同的子项目应使用相同版本的第三方软件,如有子项目需要使用高版本的特性则这些子项目统一使用高版本的软件。研发负责人应该在详细设计评审时明确各软件使用的版本,以方便测试和生产环境准备。
d) 对于第三方软件的安装,如果有比较特殊的设置,需要在维护说明书中写明。
e) 产品中需要的各个子项目软件包须在维护说明书中写明具体的版本号,以方便进行版本控制。
f) 产品上线以后,运维组需要将维护说明书中软硬件依赖关系表补充完整,将所有用到的软硬件版本记录在维护说明书中。以方便后续查询。
二.产品部署及相关配置
1. 数据库信息
1) 对于上线的新产品,研发统一给出sql格式的文件,并以”版本号+数据库名.sql”的形式命名。为部署方便,尽量不要在维护说明书中出现建库建表的sql语句。
2) 对于线上产品的升级带来的数据库变动,运维组支持2种升级方式:
a) 研发提供新数据库结构,给出sql格式的文件,并以”版本号+数据库名.sql”的形式命名。运维组协助研发制定数据迁移方案,并负责实施,数据迁移完成后,由测试组测试数据迁移后数据的完整性和可用性(当数据量达到一定规模后,将强制采用这种方案)。
b) 在产品用户不是特别多的情况下,研发提供数据库变更脚本(sql文件),以“老版本号+新版本号+数据库名+update.sql”命名,直接在生产系统中修改数据库。维护说明书中不要再出现alter等修改数据库的语句,不要只在维护说明书中写哪个表增加哪个字段等说明。
2. 配置文件修改
1) 维护说明说中须指明所有必要的配置项及修改方法,如数据库连接、数据目录指定等。
2) 相关的配置参数要有解释说明,例如:
./conf/ftp.conf里的配置项:
server_home: 服务器环境变量路径 示例: server_home=/opt/htdocs/home
server_port: 服务器端口号 示例:server_port=80
对于不能修改的配置参数(虽然写在配置文件中,但在程序中依然用到了绝对路径的某些配置项),需要在维护说明书中明确指出。涉及到访问控制的参数,如数据库密码,服务器密码,网站管理员密码等,运维组在上线完成后将全部修改,以保证所有对系统的访问都经过授权。
3) 关于异地部署,运维组应当尽可能保证不同地点生产环境的一致性,以利于产品部署及自动化流程的开发,对于部署环境中的不同之处,运维组需要在上线报告中明确指出,并在部署过程中尽快统一不一致的地方。
3.系统安全性
1) 运维组须保证所有新上线的产品均不用root帐号运行,如有特殊需求,研发需要在维护说明书中指出。产品上线完成以后,运维负责人须修改生产系统中服务器,数据库的帐号密码,避免非授权的访问。
2) 生产系统开启防火墙规则,默认禁止所有端口访问,维护说明书中需要明确开放哪些端口,原则上采用最少端口原则,不会开放全部端口。
三. 备份
1) 新系统上线前,产品经理和研发需要在维护说明书中明确产品中哪些需要备份,包括项目,数据库,重要的用户数据等,同时需要明确备份周期(即一旦发生数据丢失可以接受的最大值)。运维组根据产品经理的要求制定相应的备份策略和恢复方案,必要时请测试组进行数据恢复测试。
2) 原有系统升级时,产品经理和研发需要在维护说明书中明确现有版本中哪些数据需要保留,运维组会在系统升级完成后,checklist前恢复需要保留的数据。
四.系统回滚方案
系统升级前,研发需要在维护说明书中提供必要的系统回滚方案,以便于在系统升级失败后能够很快回滚到上一个可用版本。
运维组需要协助研发制定和完善系统回滚方案,并保证该方案能够成功执行,必要时请测试组进行回滚方案的测试。
五.监控点说明
对于系统中重要的监控点,研发应该在维护说明书中指出;对于系统内部流程的监控,研发需要给出监控方案;运维组需要协助研发完善监控方案,并负责实施产品监控。
六.CheckList
研发和测试需要提供系统上线后的checklist,以保证系统上线完成以后运维组能够对系统进行自检,保证系统正常运行。Checklist应该能够覆盖产品中所有的关键点,必要时在checklist结束以后请测试组对生产系统进行回归测试。
对系统中出现的所有需要身份认证的角色,产品经理和研发需要在维护说明书中提供创建测试帐号的方法(也可以同时提供测试帐号);所有checklist执行完毕,测试组回归测试结束后,运维组须清理所有测试帐号,以保证上线后的系统不被非法访问。
运维组在执行完checklist后需要将checklist表补充完整,填写各项的检查人和时间。
下表是checklist的示例:
检查项 | 正确结果 | 备注 | 检查人 | 时间 |
用户登录 | 正常登录系统 | 使用普通用户帐号 | xxx | x年x月x日 |
七.上线报告
运维组在产品上线或升级的过程中,可以根据实际操作修改维护说明书,添加必要的注释等,并在上线或升级完成后做为上线报告提交。因为上线报告中包括了数据库密码等生产系统的访问控制信息,所以上线报告由运维负责人存档,只有运维负责人和负责该项目的运维人员可以查阅。
以上是在前面一些项目过程中的总结,还需要在后面的项目中和研发测试人员不断沟通,不断完善。项目上线过程及运营初期,运维离不开研发人员的协助,因为只有研发才最了解自己的产品,运维需要在这段时间里向研发人员学习,尽快熟悉自己正在运维的产品。