這裡說的自動佈署是兩方面的,第一部分是指令碼自動佈署伺服器環境,第二部份是自動佈署程式碼,完成這兩部分,在我理解,就算是完成自動部署了。
我們要做的,就是本地寫完程式碼提交 git
後,使用git push
自動將程式碼推送到測試或生產環境的站點目錄。
好的,開工吧!
LNMP線上環境自動佈署指令碼
使用 此指令碼 可在一臺全新的 Ubuntu 14.04 LTS
或者 Ubuntu 16
上自動部署適合 Laravel 使用的 LNMP 生產環境。
按照此 文件 安裝即可。
但是此方法在使用中會有一些小問題
- 網易映象加速後會出現一些安裝錯誤
可能是網易映象沒有更新完全。
需要將網易映象地址更新為其它地址,可以參考 Ubuntu 官方模版 來更新映象。
我使用的是阿里雲的映象替換了網易的映象。vi /etc/apt/sources.list
更新為
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse ##測試版源 deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse # 原始碼 deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse ##測試版源 deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse # Canonical 合作夥伴和附加 deb http://archive.canonical.com/ubuntu/ xenial partner deb http://extras.ubuntu.com/ubuntu/ xenial main
- 正常安裝後
Nginx
啟動前需要把apache
解除安裝掉,然後再啟動Nginx
.apt-get purge apache2 service nginx restart
redis
預設沒有啟動service redis-server start // 啟動 redis service redis-server status // 檢視 redis service redis-server stop // 停止 redis
配置Git自動部署
建立Git遠端倉庫
我們用一個獨立的路徑來做遠端倉庫。
然後在倉庫的路徑下,建立一個git裸倉庫:
cd /home/ubuntu/repo/
git init --bare blog.git
git
預設是禁止 push
的,所有要設定允許 push
:
vi config
修改或新增如下內容:
[receive]
denyCurrentBranch = ignore
編輯自動部署指令碼
自動部署用到 git hooks
,在 git
路徑下有個 hooks
資料夾,裡面有一些示例。我們把 post-update.sample
重新命名為 post-update
,並進行編輯:
mv post-update.sample post-update
vi post-update
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".
#exec git update-server-info
unset GIT_DIR
NowPath=`pwd`
DeployPath="/home/ubuntu/www/blog"
cd $DeployPath
git pull origin master
composer install
cd $NowPath
echo 'deploy success'
exit 0
這樣每當 push master
分支到伺服器時,都會自動切換到 DeployPath
,也就是 Nginx root
路徑,執行 git pull origin master
從倉庫拉去最新 master
分支,並執行 composer install
,如果專案 composer
有變更則安裝,沒有變更則不會安裝。
部署路徑初始化
先把空的倉庫克隆到 home/ubuntu/www/
路徑下 :
git clone /home/ubuntu/repo/blog.git
伺服器的配置就級別完成了,此 blog
即為你的站點目錄
推送git倉庫
進入本地共享資料夾,執行
git clone root@server_ip:/home/ubuntu/repo/blog.git blog_back
將遠端的空倉庫克隆下來。名稱為 blog_back
,防止與本地 blog
目錄衝突。
ok,現在我們來建立一個專案
本地建立專案並提交 Git
composer create-project --prefer-dist laravel/laravel blog
mv blog_back/.git blog/.git //將 .git 目錄拷貝過來即可在此目錄操作 git
cd blog
git add -A
git commit -m 'init'
git push origin master //此時輸入伺服器密碼即可將本地專案推送到伺服器上
這裡我使用的是預設的
root
使用者,我們可以單獨設定一個git
使用者,也可以使用公鑰的形式,類似於github
的方式。
安裝 Composer
開啟命令列並依次執行下列命令安裝最新版本的 Composer
:
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
//下載安裝指令碼 - composer-setup.php - 到當前目錄。
php composer-setup.php //執行安裝過程。
php -r "unlink('composer-setup.php');" //刪除安裝指令碼
執行第一條命令下載下來的 composer-setup.php
指令碼將簡單地檢測 php.ini
中的引數設定,如果某些引數未正確設定則會給出警告;然後下載最新版本的 composer.phar
檔案到當前目錄。
開啟命令列視窗並執行如下命令將前面下載的 composer.phar
檔案移動到 /usr/local/bin/
目錄下面:
sudo mv composer.phar /usr/local/bin/composer
程式監控器 Supervisor
配置
專案中有些指令碼需要在後臺執行,比如佇列、Horizon
,Supervisor
可以監控後臺指令碼的執行,再產生異常或是停止後自動重啟,保證了指令碼不會被異常中斷。定時任備也可以直接用 Supervisor
來執行,Supervisor
還可以寫入執行成功或失敗的日誌,方便檢視。
此指令碼預設安裝了 supervisor
,我們只需設定好啟動即可。
配置
在 /etc/supervisor/conf.d/
下新建一個配置檔案 horizon.conf
,寫入以下內容
[program:horizon]
process_name=%(program_name)s_%(process_num)02d
command=php /home/ubuntu/www/site/artisan horizon //啟動指令碼命令。
autostart=true //隨著supervisord的啟動而啟動
autorestart=true //自動重啟
user=ubuntu // 使用者組
numprocs=1 // 啟動程式,根據指令碼決定
redirect_stderr=true //重定向stderr到stdout
stdout_logfile=/var/log/supervisor/horizon.log //日誌 注意日誌目錄的許可權
接下來就可以啟動 supervisord
了。
supervisord -c /etc/supervisord.conf //啟動
supervisorctl shutdown //關閉
supervisorctl reload //重新載入配置
好了。到這裡自動佈署就完成了,接下來就是盡情的敲程式碼吧!
我的小站 茄盒網