iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 26
0
Modern Web

BeeGo系列 第 26

佈署

佈署的基本,其實在打包 Docker image 時,算是已經處理了。除了編譯出來的執行檔之外,還需要:

  1. conf, static, views 這些資料夾。上篇我們只打包了 conf 跟 views,這是因為我們並沒有使用到 static。
  2. 執行時,需要將 BEEGO_RUNMODE 這個環境變數設定為 prod

接著這篇我們會再介紹一下,除了 Docker 以外的方式:

  • 單獨執行
  • supervisor
  • systemctl

單獨執行

把前面基本所提到的檔案複製到環境裡,然後切換到所在的目錄後,執行編譯出來的執行檔。

cd /app
nohup ./beeapp &

加 nohup 是為了避免登出時,程式被自動關閉。

supervisor

Supervisor 是一個允許使用者可以在 unix-like 的作業系統裡監看與控制程序的主從式系統。簡單的說,寫好設定,supervisor 會幫你在開機與關機時去執行你的程式,並且使用者也可以透過 supervisorctl 來觀看。

安裝 supervisor

這邊只介紹 Ubuntu

sudo apt-get install supervisor

設定檔

自訂的設定檔位置主要是在 /etc/supervisor/conf.d。那麼就在 /etc/supervisor/conf.d 下新增一個 beeapp.conf 檔案(假設應用程式資料夾放在 /app,應用程式名稱是 beeapp ):

[program:beeapp]
directory = /app
command = /app/beeapp
autostart = true
startsecs = 5
user = root
redirect_stderr = true
stdout_logfile = /var/log/supervisord/beeapp.log

新增完以後,重新啟動 supervisor 即可:

# systemd
sudo systemctl restart supervisor

#  upstart
sudo service supervisor restart

更進一步的設定與使用可以參考 Supervisor

systemctl

這個其實跟 supervisor 大同小異,只是寫的設定不一樣。好處是現在絕大部分的 distribution 都已經使用 systemd 了,就不需要額外安裝。

設定檔

設定檔主要是在 /etc/systemd/system 下,一樣,在這裡新增一個 beeapp.service

[Unit]
Description=beeapp
AssertPathExists=/app

[Service]
WorkingDirectory=/app
ExecStart=/app/beeapp

ExecReload=/bin/kill -HUP $MAINPID
LimitNOFILE=65536
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

使用

先使用 systemctl daemon-reload 讓 systemd 重新載入設定,之後就可以用 systemctl 來啟用、啟動或停止服務了。

# 要求 systemd 重新載入設定
sudo systemctl daemon-reload

# 啟用
sudo systemctl enable beeapp
# 啟動
sudo systemctl start beeapp

# 停止
sudo systemctl stop beeapp

小結

官方網站還有提到 nginx / apache,其實這部份跟 Django 類似,也就是讓 nginx / apache 去處理靜態文件,當有動態的請求時 (需要應用程式處理),把請求轉交給 go / Django 。

一般來說,是使用 proxy 方式轉交請求,BeeGo 則是額外再支援了 fcgi ,你可以在設定裡加入

EnableFcgi = true

來啟用。

nginx / apache 的設定我就不多寫了,詳情可以參考官方文件

只是用 Go 來開發就是想要減少佈署的麻煩,Go 編譯完就一個檔案,直接複製到環境裡,很簡單,再加上 Go 本身效能也不錯,所以不太會需要再用 Nginx / Apache。

參考資料


上一篇
Docker - MultiStage
下一篇
blog (1) - 規劃與 model
系列文
BeeGo30

尚未有邦友留言

立即登入留言