GolangのWebAPIをデーモン化して公開する際に役立った情報の備忘録です。
##使用環境
Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type (無料使用枠)
##デーモン化とは
そもそもGolangのWebAPIを公開する方法を知らず、Linux上で"GO RUN main.go"を実行すればよいのかと考えていた。この方法だと、RLoginなどで接続を閉じたタイミングで処理も終了してしまって上手く行かなかった。
調べるうちに、デーモン(UNIX系OSにおいて、常時待機しているプログラムを指す)というものに行きついた。[Golang デーモン]で検索すると多数ヒットしたので、Golangのmain.goを常駐化させる方針を立てた。
##supervisor
Golangのバイナリを常駐化させる為のツール。
Nginx同様にconfファイルで設定を行う必要がある。
##supervisor.confの編集
sudo vi /etc/supervisord.conf
##supervisor.confの中身
設定項目は複数あるが、基本的に[program:XX]の設定のみで動くはず。
[program:XX]
command=/home/ec2-user/hoge/main
hogeフォルダにバイナリ化したgoプログラムを配置した場合の例。
編集したら、下記の手順で再起動を行えば反映される。
##supervisord.confを変更した場合の再読み込み手順
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl restart XX
##プログラム内で環境変数を利用している場合の注意
筆者の環境だと、supervisorでデーモン化したプログラムから、環境変数がうまく読み込まれなかった。
デーモンが起動しているプロセス上の環境変数を確認する方法としては以下の通り。
①デーモンが起動しているプロセスを確認
ps ax | grep main
20591 ? Sl 0:00 /home/ec2-user/hoge/main
20632 pts/1 S+ 0:00 grep --color=auto main
②プロセス20591上での環境変数を確認
sudo strings /proc/20591/environ
出てこない場合、環境変数への追加が必要。
##環境変数追加方法
.bashrcなどのファイルに直接書き込む方法
OR
supervisord.confに書き込む方法
の2通り存在する。
①~/.bashrcなどに直接書き込み
export DB_USER="sa"
export DB_Name="..."
②supervisord.confに書き込む方法
[program:XX]のenvironmentにカンマ区切りで環境変数をセットする。
[program:XX]
...
environment=DB_USER="sa",DB_Name="..."
supervisord.confを変更した場合の再読み込み手順を実行すれば、環境変数が反映されるはず。