自動布署服務器環境,並利用 Git 實現本地代碼自動同步到服務器!


這里說的自動布署是兩方面的,第一部分是腳本自動布署服務器環境,第二部份是自動布署代碼,完成這兩部分,在我理解,就算是完成自動部署了。

我們要做的,就是本地寫完代碼提交 git 后,使用git push 自動將代碼推送到測試或生產環境的站點目錄。
好的,開工吧!

LNMP線上環境自動布署腳本

使用 此腳本 可在一台全新的 Ubuntu 14.04 LTS 或者 Ubuntu 16 上自動部署適合 Laravel 使用的 LNMP 生產環境。
按照此 文檔 安裝即可。

但是此方法在使用中會有一些小問題

  1. 網易鏡像加速后會出現一些安裝錯誤
    可能是網易鏡像沒有更新完全。
    需要將網易鏡像地址更新為其它地址,可以參考 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
  2. 正常安裝后Nginx 啟動前需要把 apache 卸載掉,然后再啟動 Nginx .
    apt-get purge apache2 service nginx restart
  3. 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 //重新載入配置

好了。到這里自動布署就完成了,接下來就是盡情的敲代碼吧!

原文地址:https://laravel-china.org/articles/9319/the-automatic-deployment-server-environment-and-use-git-to-achieve-the-local-code-automatically-synchronized-to-the-server


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM