Web总结:部署和安全

个人原文:www.hijerry.cn/p/46865.htm…php

前言

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

代码管理

工具和代码托管平台

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

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

分支管理

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

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

通常什么状况下须要拉分支呢?redis

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

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

提交原则

何时进行一次 git commit ?其实何时均可以,可是为了更好的管理,更方便回退操做,一次提交知足如下几点是比较好的:数据库

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

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

系统发布

目前云服务器盛行,腾讯云、阿里云都有学生机,通常都是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 权限。
  • 按期备份数据库到其余地方。
相关文章
相关标签/搜索