Web总结:部署和安全

前言

这一次的总结内容范围比较广,主要对代码管理到系统发布、系统维护和其中中可能会出现的一些安全问题进行总结。

代码管理

工具和代码托管平台

在一个项目开始之前,首先要选择一款代码管理工具,目前流行是 GITSVN ,如果没有历史问题,建议都使用 GIT 进行代码管理。

选好了管理工具后,需要选择托管平台,目前国内有 码云Coding.net 等,国外有 GitHubGitLab 。需要注意的是代码仓库的私有性, GitHub 的私有项目是需要收费的。我个人喜欢把私有项目托管在 码云,把公开项目托管在 GitHub

分支管理

新建一个仓库后,我往往喜欢新建一个 dev 分支作为开发, docs 分支用于存放文档、设计图,并把 master 分支空出来。在 dev 分支上完成一次版本开发后,再合并到 master 分支上去。所以 master 分支上存放的一直是可用的、稳定的版本。

在进行二次开发时,我喜欢从 dev 拉出新分支,用作二次开发,完成后再考虑合并回去。

一般什么情况下需要拉分支呢?

  • 从需求的角度,版本次号不同,需要拉新分支。这是为了影响目前版本的系统。
  • 子系统拆分。比如后台管理、Web门户、手机端平台是三个不同小组负责的,所以拉三个分支。
  • 需要紧急修复的bug,拉一个bugfix分支。这是临时分支。

一次完整版本的发布,都需要保存为一个分支,用于进行回退操作。

提交原则

什么时候进行一次 git commit ?其实什么时候都可以,但是为了更好的管理,更方便回退操作,一次提交满足以下几点是比较好的:

  • 区分度高。要么是完成了新功能开发,要么是修复了某一个bug,不能又完成了功能又修复了bug。
  • 尽量完整。在完成新功能时,必须完成测试才进行提交,不提交半成品,修复bug也是如此。

在一次 commit 中,必须注明本次commit做了什么工作。

系统发布

目前云服务器盛行,腾讯云、阿里云都有学生机,一般都是1核 1G 1M + 40G云硬盘的配置。这样的配置下,尽量选择 linux 作为操作系统,可以榨到比较好的性能。

系统的发布步骤是:部署软件环境、部署代码、部署数据库、部署脚本文件、调试。

环境部署

如果是在实机上部署,那需要检查以下几点:

  • 软件版本是否符合
  • 软件所需要的支持库是否安装
  • 系统是否兼容(win开发,发布在linux下会有些兼容问题,比如换行字符、系统分隔符)

具体来说,需要使用操作系统自带命令如 yumapt-get 安装符合Web网站的软件如 phpnginxmysql 等,并检查这些软件的扩展功能是否打开。

如果是在虚机部署(比如使用Docker),则只需要部署好容器即可完成上述操作了。

代码部署

如果是托管在代码仓库里的,可以用 gitsvn 命令进行部署。

如果没有托管,则需要压缩源代码,使用 rzscp 等命令上传到服务器。

这里需要注意的是, npm 包、composer 包不要打包上去,而是在服务器上使用 npm installcomposer install 命令进行安装。因为这些文件往往很多很大,使用命令安装比较快。

用户上传的资源也不要打包部署到服务器上。因为发布操作尽量部署纯净的源代码文件,尽量少一些数据文件。

数据库部署

使用 mysqldump 导出数据库表结构 ,数据不导出的原因是为了保持发布的网站的纯净性,所以本地的测试数据就不要部署到线上系统了。

脚本文件部署

一些自己编写的系统辅助工具,比如用于检测服务器状态的脚本、用于转码视频文件的脚本服务,需要一起部署上去。

调试

先进行冒烟测试,再进行单元测试即可。

服务器安全

首先是隐藏错误信息,线上环境下产生的异常信息,一定不能显露给用户看到,并且需要把错误信息记录到日志中方便查阅。PHP中设置 error_reporting(0) 即可隐藏所有错误。

以下是一些经验性原则:

  • 限制端口。只开放Web端口 80443 和 ssh对应的端口。
  • 尽量禁用root远程登录。
  • sshmysqlredis 等软件尽量不使用默认端口 2233066379 等。
  • 服务器的所有使用者均分配独立账号,并根据分工建立不同的用户组。

以下是针对mysql的一些原则:

  • mysql 数据库的root禁止远程登录。
  • mysql 开启bin log日志,用于恢复数据库。(也就是开启备份)
  • 不同的应用建立不同的mysql账号。
  • 只给mysql账号以 selectupdatedeleteinsert 权限。
  • 定期备份数据库到其他地方。
坚持原创文章分享,您的支持将鼓励我继续创作!