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 權限。
  • 按期備份數據庫到其餘地方。
相關文章
相關標籤/搜索