ネットの情報が古いので、最新化のため記載(といってもほぼ参考になるのが多いが)。
- 独自ドメインを使ったホスティング
- 2019/6/5
- Supervisorインストール
- 2019/6/9
概要
- PerlのWAFであるAmon2を使って作ったアプリケーションを、AWS EC2にデプロイ
- EC2の再起動をしたときも起動するように、Supervisorというツールを使ってデーモン化
環境
- AWS EC2 Ubuntu Server 18.04
- Perl入学式で作ったSchedulerアプリ
- すでに独自ドメイン設定は完了しており、 http://www.scheduler-amon2.xyz でindex.htmlにアクセスできるような設定をapacheに実施済みという前提
やりかた
アプリのデプロイ
作成したSchedulerアプリをEC2へgit glone
今回はEC2のIAMユーザであるubuntuユーザのホームディレクトリ直下に格納(/home/ubuntu直下)。
以下、すべての作業はubuntuユーザで行うものとする。
Perlと、Perlのモジュール管理機構を導入
ここを参照して、plenvを使ってperlの導入とcpanmの導入を行った。
cartonでモジュールインストール
cd /home/ubuntu/Scheduler
carton install
データベース作成
ほんらい、本番環境では使わないけど、練習なのでsqlite3で実施する。
sqlite3 db/production.db < sql/sqlite.sql
リバースプロキシ設定
Amon2だとWebアプリの起動ポートが5000番なので、80番アクセスのときにリバースプロキシで対応する。
モジュール有効化
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
ファイル編集
<VirtualHost *:80>
DocumentRoot /home/ubuntu/Scheduler
ProxyPreserveHost On
ProxyPass / http://www.scheduler-amon2.xyz:5000/
ProxyPassReverse / http://www.scheduler-amon2.xyz:5000/
</VirtualHost>
apache再起動
sudo systemctl restart apache2
Superviserを使ったデーモン化
起動用ファイルを作成
#!/bin/bash
export HOME=/home/ubuntu
export PLENV_ROOT=$HOME/.plenv
export PATH=$PLENV_ROOT/bin:$PATH
eval "$(plenv init -)"
cd $HOME/Scheduler
exec plenv exec carton exec plackup -Ilib -R ./lib -E production --access-log /dev/null -p 5000 -a ./script/scheduler-server
exec plenv, exec carton, exec plackupとやっておかないと、コマンド実行がうまくいかない。ここらへん調べたけど結局、なぜexecと最初に打たないといけないのか腑に落ちなかった。あとで調べてみよう。
Supervisorのインストール
sudo apt-get install supervisor
pipを使う方法もあるが、今回はシステム管理コマンド(systemctl)の管理下にしたいのでapt-getを使うことにした。入ったバージョンは下記。最新バージョンは4.03
$ sudo dpkg -l | grep supervisor
ii supervisor 3.3.1-1.1 all System for controlling process state
インストールの確認。自動起動が有効(enable)になっているのが確認できる。
$ sudo systemctl status supervisor
● supervisor.service - Supervisor process control system for UNIX
Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2019-06-09 11:36:23 UTC; 53min ago
Docs: http://supervisord.org
Main PID: 743 (supervisord)
(以下略)
設定ファイルの作成
参考にしたサイトではiniファイルを作るということをしていたが、うまくいかなかった。
今回はすべて一緒くたにした。
[unix_http_server]
file=/var/run/supervisor.sock
[supervisord]
logfile=/var/log/supervisor/supervisord.log
loglevel=debug
pidfile=/var/run/supervisord.pid
nodaemon=false
minfds=1024
minprocs=200
environment=SHELL="/bin/sh"
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock
history_file=~/.sc_history
[rpcinterface:supervisor]
supervisor.rpcinterface_factory=supervisor.rpcinterface:make_main_rpcinterface
[group:supervisord]
programs=scheduler
[program:scheduler]
numprocs=1
autostart=true
autorestart=true
startsecs=4
user=ubuntu
redirect_stderr=true
stdout_logfile=/var/log/supervisor/scheduler_out.log
stdout_logfile_maxbytes=0
stdout_logfile_backups=0
stderr_logfile=/var/log/supervisor/scheduler_err.log
stderr_logfile_maxbytes=0
stderr_logfile_backups=0
directory=/home/ubuntu/Scheduler/
command=/home/ubuntu/Scheduler/scheduler.sh
supervisorサービス再起動 (※ 設定ファイルを読み込んで、変化があったプログラムだけ再起動してくれるタイプのコマンド)
sudo supervisorctl update
通常、supervisorを操作するときにはsupervisorctlコマンドを使って操作するのがお作法らしい。
以上。これでEC2を再起動したときにもWebアプリケーションが自動起動されるように設定された。
ログ取得、管理、操作、など、まだまだやりたいことは沢山ある。
さしあたって、つぎはCIツールを試してみたい。