LoginSignup
2
2

More than 3 years have passed since last update.

GolangのWebAPIをsupervisorでデーモン化して公開する。

Posted at

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を変更した場合の再読み込み手順を実行すれば、環境変数が反映されるはず。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2