ginを使って作成したWebアプリをsystemdを使ってデーモンとして動かす

ginを使って作成したWebアプリをデーモンとして動かす方法について、少し前の記事でsupervisordを用いる方法を延々書いてしまったが、ここではsystemdを使う方法を書いてみる。

1. ログをsyslogに吐くようにする。

デーモン化したらログは画面ではなくファイルに出したいところ。 Linuxで動かす(よね?)なら、syslogを使ってしまうのがお手軽だ。

   logger, err := syslog.New(
        syslog.LOG_NOTICE|syslog.LOG_USER,
        "SampleWebApp")
    if err != nil {
        panic(err)
    }
    gin.SetMode(gin.ReleaseMode)
    gin.DisableConsoleColor()
    gin.DefaultWriter = logger

2. systemd用のユニットファイルを作成する。

たぶん、これくらいが一番シンプルなんじゃないかな。。

[Unit]
Description=Sample Web Application

[Service]
ExecStart=/usr/local/bin/SampleWebApp
KillMode=process
Restart=always

[Install]
WantedBy=multi-user.target

3. sytemctlコマンドで起動する。

systemctl restart サービス名

4. おまけ firewalldでポートを開放する

とりあえず今の状態を確認して、

firewall-cmd --list-all

たとえばこんなコマンドを打って、

firewall-cmd --add-port=3000/tcp --zone=public --permanent

そのあとリロードしてから、

firewall-cmd --reload

再度状態を確認すると、

firewall-cmd --list-all

先ほど追加したポートが開放されていることがわかるはず。