直接使用git部署代碼帶服務(wù)器
前提
- 配置用戶(hù)和部署目錄的讀寫(xiě)權(quán)限
- 安裝git
- 配置ssh權(quán)限
基本配置
- 進(jìn)入在服務(wù)器要部署的目錄,執(zhí)行
git init
,倉(cāng)庫(kù)地址:ssh://[服務(wù)器用戶(hù)名]@[服務(wù)器地址]:[端口][倉(cāng)庫(kù)在服務(wù)器上的絕對(duì)路徑]
,如:ssh://deployuser@baidu.com:22/app/xxx/production
- 讓倉(cāng)庫(kù)接受代碼提交,執(zhí)行
git config receive.denyCurrentBranch ignore
- 現(xiàn)在服務(wù)器已經(jīng)可以接受代碼提交了,但是每次提交之后,還需要到服務(wù)器執(zhí)行
git checkout -f
檢出代碼,下一步我們實(shí)現(xiàn)讓服務(wù)器自動(dòng)完成這件事. - 配置git的更新鉤子,實(shí)現(xiàn)自動(dòng)檢出代碼.
vi .git/hooks/post-receive
,然后寫(xiě)入:
#!/bin/sh
unset GIT_DIR
cd ..
git checkout -f
該文件需要有執(zhí)行權(quán)限,執(zhí)行sudo chmod a+x .git/hooks/post-receive
- 到這一步配置就完成了,可以在本地執(zhí)行push命令推送到對(duì)應(yīng)的服務(wù)器地址了.
在鉤子中執(zhí)行更多的命令
很多項(xiàng)目代碼更新之后,還需要執(zhí)行其他命令,比如:
- 更新項(xiàng)目的依賴(lài)庫(kù),如php項(xiàng)目需要使用的
composer update
- 編譯文件
- 更新配置文件(不同環(huán)境使用的配置文件不同,所以需要特殊處理)
- 重建緩存
我們可以在post-receive中添加更多的命令來(lái)實(shí)現(xiàn)這些功能,下面給一份我的php項(xiàng)目中使用的一個(gè)腳本:
#!/bin/sh
#不添加這個(gè)我的composer命令找不到
PATH=$PATH:/usr/local/bin:/usr/local/sbin
unset GIT_DIR
cd ..
git checkout -f
pwd
yes|cp .env.production .env
yes|cp composer.json.circle composer.json
composer update
# 保證依賴(lài)庫(kù)的資源文件更新了,也會(huì)同步更新到項(xiàng)目.
php artisan vendor:publish --tag=laravel-admin
php artisan vendor:publish --tag=easy-mall
php artisan migrate
php artisan config:cache
php artisan route:cache
#不加這一選項(xiàng)啤握,你可能會(huì)發(fā)現(xiàn)20%到25%的性能損失榆骚。
composer dump-autoload --optimize
# 清理opcache
echo "password" | sudo -S systemctl reload php-pfm
對(duì)于前端的小伙伴可能會(huì)用到gulp/npm等命令,比如執(zhí)行自己的命令:npm run prod
或者gulp --production
.在我們的服務(wù)器環(huán)境中,執(zhí)行npm還需要在PATH中添加:/.nvm/versions/node/v6.5.0/bin
,即上述腳本中PATH=$PATH:/usr/local/bin:/usr/local/sbin:/.nvm/versions/node/v6.5.0/bin
其他
有些命令需要在第一次部署的時(shí)候執(zhí)行,比如對(duì)于laravel項(xiàng)目,需要配置一些目錄用戶(hù)寫(xiě)權(quán)限,需要配置軟連接等.當(dāng)然也可以寫(xiě)到鉤子中,只不過(guò)之后每次都要進(jìn)行不必要的執(zhí)行.