🐁
GoをSupervisorでデーモン化する
自分用の雑メモ。
今回はAWS(EC2)でデーモン化するまでやります。
yumを最新にアップデート。
$ sudo yum update
goを入れる。
$ amazon-linux-extras install golang1.11
$ export GOPATH="$HOME/go"
$ export PATH=$PATH:$GOPATH/bin
$ go version
go version go1.15.14 linux/amd64
python3とsupervisorを入れる。
$ sudo yum install python3
$ python3 --version
Python 3.7.10
$ sudo pip3 install supervisor
$ supervisord --version
4.2.2
sampleを元に、supervisord.confを作成する
$ echo_supervisord_conf > ~/supervisord.conf
$ sudo mkdir /etc/supervisord/
$ sudo mkdir /etc/supervisord/conf.d
$ sudo mv ~/supervisord.conf /etc/supervisord/supervisord.conf
一応オリジナルをとっておく
$ sudo cp /etc/supervisord/supervisord.conf /etc/supervisord/supervisord.conf.org
confを編集する(サンプルからの変更点のみ記載)
[inet_http_server]
port=127.0.0.1:9001
username=user
password=123
[supervisorctl]
;serverurl=unix:///tmp/supervisor.sock
serverurl=http://127.0.0.1:9001
[include]
files = /etc/supervisord/conf.d/*.conf
serviceファイルを作る
$ sudo touch /etc/systemd/system/supervisord.service
[Unit]
Description=supervisord - Supervisor process control system for UNIX
Documentation=http://supervisord.org
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/supervisord -c /etc/supervisord/supervisord.conf
ExecReload=/usr/local/bin/supervisorctl reload
ExecStop=/usr/local/bin/supervisorctl shutdown
User=root
[Install]
WantedBy=multi-user.target
supervisorを起動&チェック
$ sudo systemctl start supervisord
$ sudo systemctl status supervisord
$ sudo systemctl enable supervisord
テスト用にgoプロジェクトを用意する。
今回は5秒に1回ログを出す。
package main
import (
"log"
"time"
)
func init() {
log.SetPrefix("[MAIN]")
}
func main() {
for {
log.Println("Hello")
time.Sleep(5 * time.Second)
}
}
ビルドしておく。
$ go build hello.go
conf.dにファイルを追加する
$ sudo touch /etc/supervisord/conf.d/hello.conf
[program:hello]
command=/home/ec2-user/hello.sh
process_name=%(program_name)s_%(process_num)02d
autostart=true
autorestart=true
user=ec2-user
numprocs=1
redirect_stderr=true
stdout_logfile=/tmp/hello.log
再起動
$ sudo systemctl restart supervisord
ログを確認する
$ tail -f /tmp/hello.log
おまけ:WebUIを表示する(途中)
nginxを入れる
$ sudo amazon-linux-extras install nginx1
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
nginx.confに設定を追加
server {
location / supervisord/ {
proxy_pass http://127.0.0.1:9001/;
proxy_http_version 1.1;
proxy_buffering off;
proxy_max_temp_file_size 0;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Connection "";
}
}
単一ページは表示されるようにはなったけど、機能が動作しなかったり表示崩れがあったりする..
Discussion