beego自動化部署

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

beego是Golang寫的應用程式開源架構http://beego.me/,我使用`beego`寫了一個項目小項目,golang是編譯語言,需要編譯之後再部署,每次部署到服務上是件很麻煩的事情。就寫了一個自動打包部署到伺服器的指令碼,方便發布部署。

##**項目結構**
先看看beego項目的結構:

beepkg|-- conf|   `-- app.conf|-- controllers|   `-- default.go|-- main.go|-- models|-- routers|   `-- router.go|-- static|   |-- css|   |-- img|   `-- js|-- tests|   `-- default_test.go`-- views    `-- index.tpl

其中controllersviews.models以及其他的.go檔案會被打包成可執行檔beepkg
而靜態檔案static以及conf檔案不會被編譯,需要打包上傳部署到伺服器上。
因此在打包檔案的時候需要忽略一些檔案:
1.go檔案,已經編譯成可執行檔
2.本地產生的一些臨時檔案
3.項目的一些設定檔
因此我們在使用bee pack打包的時候需要忽略這些檔案,bee pack在編譯之後壓縮的的時候會預設忽略這三種檔案:.go:.DS_Store:.tmp。因此我們只需要忽略其他的檔案即可。
使用命令-exr用Regex忽略檔案:

bee pack -be GOOS=linux -ba -exr='^[0-9a-f]|[*.iml]$'

因為使用了檔案儲存體的session,本地目錄下會產生session的檔案夾需要忽略打包[0-9a-f],[*.iml]是IntelliJ產生的項目設定檔,在打包的時候需要忽略這些檔案。

##**打包指令碼**
打包beego項目,同步到服務端,需要做三件事情:
1.更新代碼
2.編譯可執行檔,打包資源
3.同步到壓縮包到伺服器
4.伺服器解壓,重啟應用程式
首先是第一步更新代碼:

git reset HEAD --hardgit pull origin master

然後需要編譯可執行檔和打包資源:

bee pack -be GOOS=linux  -ba -exr='^[0-9a-f]|[*.iml]$'

同步壓縮包到伺服器:

scp .tar.gz  jjz@192.168.1.10:/root/goapp/beepkg

解壓和重啟服務需要在伺服器端執行,可以通過ssh執行在伺服器端執行指令碼:

ssh jjz@192.168.1.10 'bash -s' < restart.sh

##Supervisor
伺服器端可以使用tar命令解壓檔案,但是如何重啟應用程式呢,在伺服器端可以使用Supervisor管理beego進程,重啟應用程式。
Supervisor是一個python寫的進程管理工具,用途就是有一個進程需要每時每刻不斷的跑(web服務),但是這個進程又有可能由於各種原因有可能中斷。當進程中斷的時候又希望能自動重啟它,這個時候,我們就需要使用Supervisor,這裡我們更多的是利用Supervisor的重啟進程功能。

安裝Supervisor:

pip install supervisor

初始化設定檔:

echo_supervisord_conf >/etc/supervisord.conf

修改設定檔/etc/supervisord.conf添加配置:

;指定進程名稱[program:beepkg]directory=/opt/goapp/beepkgcommand=/opt/goapp/beepkgautostart=trueuser=rootredirect_stderr=truestdout_logfile =/var/log/supervidrod/beepkg.log

啟動Supervisor

supervisord -c /etc/supervisord.conf

使用supervisorctl命令可以進入shell介面,管理program
比如:

#啟動進程strat beepkg#停止進程stop beepkg#重啟進程restart beepkg

注意如果Supervisor的設定檔更改之後一定要使用reload才能使配置修改的設定檔生效。

在修改設定檔的過程中,遇到了一個錯誤

 * Starting Supervisor daemon manager...    Error: Another program is already listening on a port that one of our HTTP servers is configured to use.  Shut this program down first before starting supervisord.    For help, use /usr/bin/supervisord -h   ...fail!

解決辦法:

find / -name supervisor.sockunlink /tmp/supervisor.sock

##**最終指令碼**
解壓檔案並重啟服務的指令碼restart.sh:

#! /bin/bash#預設進入的是登入使用者的目錄cd test/beetar -xzvf beepkg.tar.gz#remove conf of devrm -rf conf/app.confcp conf/app.conf.bat conf/app.confsupervisorctl restart beepkg

本地開發環境部署指令碼deploy.sh:

#! /bin/bashecho 'update code'git reset HEAD --hardgit pull origin masterecho 'pack'bee pack -be GOOS=linux -exr='^[0-9a-f]|[*.iml]$'echo 'upload'scp beepkg.tar.gz  jjz@192.168.1.10:/root/goapp/beepkgecho 'restart'ssh jjz@192.168.1.10 'bash -s' < restart.sh
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.