個人原文:www.hijerry.cn/p/46865.htm…php
這一次的總結內容範圍比較廣,主要對代碼管理到系統發佈、系統維護和其中中可能會出現的一些安全問題進行總結。html
在一個項目開始以前,首先要選擇一款代碼管理工具,目前流行是 GIT
和 SVN
,若是沒有歷史問題,建議都使用 GIT
進行代碼管理。mysql
選好了管理工具後,須要選擇託管平臺,目前國內有 碼雲
、Coding.net
等,國外有 GitHub
、GitLab
。須要注意的是代碼倉庫的私有性, GitHub
的私有項目是須要收費的。我我的喜歡把私有項目託管在 碼雲
,把公開項目託管在 GitHub
。linux
新建一個倉庫後,我每每喜歡新建一個 dev
分支做爲開發, docs
分支用於存放文檔、設計圖,並把 master
分支空出來。在 dev
分支上完成一次版本開發後,再合併到 master
分支上去。因此 master
分支上存放的一直是可用的、穩定的版本。nginx
在進行二次開發時,我喜歡從 dev
拉出新分支,用做二次開發,完成後再考慮合併回去。git
通常什麼狀況下須要拉分支呢?redis
一次完整版本的發佈,都須要保存爲一個分支,用於進行回退操做。sql
何時進行一次 git commit
?其實何時均可以,可是爲了更好的管理,更方便回退操做,一次提交知足如下幾點是比較好的:數據庫
在一次 commit 中,必須註明本次commit作了什麼工做。npm
目前雲服務器盛行,騰訊雲、阿里雲都有學生機,通常都是1核 1G 1M + 40G雲硬盤的配置。這樣的配置下,儘可能選擇 linux
做爲操做系統,能夠榨到比較好的性能。
系統的發佈步驟是:部署軟件環境、部署代碼、部署數據庫、部署腳本文件、調試。
若是是在實機上部署,那須要檢查如下幾點:
具體來講,須要使用操做系統自帶命令如 yum
、 apt-get
安裝符合Web網站的軟件如 php
、 nginx
、mysql
等,並檢查這些軟件的擴展功能是否打開。
若是是在虛機部署(好比使用Docker),則只須要部署好容器便可完成上述操做了。
若是是託管在代碼倉庫裏的,能夠用 git
和 svn
命令進行部署。
若是沒有託管,則須要壓縮源代碼,使用 rz
或 scp
等命令上傳到服務器。
這裏須要注意的是, npm
包、composer
包不要打包上去,而是在服務器上使用 npm install
和 composer install
命令進行安裝。由於這些文件每每不少很大,使用命令安裝比較快。
用戶上傳的資源也不要打包部署到服務器上。由於發佈操做盡可能部署純淨的源代碼文件,儘可能少一些數據文件。
使用 mysqldump
導出數據庫表結構
,數據不導出的緣由是爲了保持發佈的網站的純淨性,因此本地的測試數據就不要部署到線上系統了。
一些本身編寫的系統輔助工具,好比用於檢測服務器狀態的腳本、用於轉碼視頻文件的腳本服務,須要一塊兒部署上去。
先進行冒煙測試,再進行單元測試便可。
首先是隱藏錯誤信息,線上環境下產生的異常信息,必定不能顯露給用戶看到,而且須要把錯誤信息記錄到日誌中方便查閱。PHP中設置 error_reporting(0)
便可隱藏全部錯誤。
如下是一些經驗性原則:
80
、443
和 ssh對應的端口。ssh
、mysql
、redis
等軟件儘可能不使用默認端口 22
、3306
、6379
等。如下是針對mysql的一些原則:
mysql
數據庫的root禁止遠程登陸。mysql
開啓bin log日誌,用於恢復數據庫。(也就是開啓備份)select
、update
、delete
、insert
權限。