佈署的基本,其實在打包 Docker image 時,算是已經處理了。除了編譯出來的執行檔之外,還需要:
接著這篇我們會再介紹一下,除了 Docker 以外的方式:
把前面基本所提到的檔案複製到環境裡,然後切換到所在的目錄後,執行編譯出來的執行檔。
cd /app
nohup ./beeapp &
加 nohup 是為了避免登出時,程式被自動關閉。
Supervisor 是一個允許使用者可以在 unix-like 的作業系統裡監看與控制程序的主從式系統。簡單的說,寫好設定,supervisor 會幫你在開機與關機時去執行你的程式,並且使用者也可以透過 supervisorctl 來觀看。
這邊只介紹 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
這個其實跟 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。