さくらVPSを1台レンタルし、その上で複数のサービスを運用している。http リクエストをnginx で受けて、背後のサービスへリバースプロキシで連携する構成である。

nginx とサービスA-C がコンテナとなっている。
この構成でしばらく運用するには主に以下の作業が必要となる。
- nginx 静的コンテンツ入れ替え
- nginx バージョンアップ
- nginx ログ参照
- サービス増加
- SSL 証明書更新
これらをなるべく簡単に行うために、次の点を工夫した。
- docker volume によるファイル管理
- Makefile を使ったコマンドの簡略化
1. docker volume によるファイル管理
volume を使用することで、コンテナから見えるファイルをホストOS 上で操作できるようになる。ホストOSからコンテナへのファイル授受は多少手間なので活用したい。
対象としたいファイルは以下。
- nginx 設定ファイル
- nginx インクルードファイル
- nginx ログ
- ドキュメントルート
- SSL 証明書
docker-compose で起動するためのyml ファイルはこのようになる。
compose.yml
services:
nginx:
# nginx を最新化するためlatest を指定
image: nginx:latest
# OS起動時は常に立ち上げておく
restart: always
# タイムゾーンを東京にしておく
environment:
- TZ=Asia/Tokyo
# コンテナと共有するフォルダ
volumes:
# nginx 設定ファイル
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
# nginx インクルードファイル
- ./nginx/conf.d:/etc/nginx/conf.d
# nginx ログ
- /opt/nginx/log:/var/log/nginx
# SSL証明書など秘密ファイル
- /opt/secret:/opt/secret
# ドキュメントルート
- /opt/nginx/html:/opt/nginx/html
# ホストモードにすることで
network_mode: host
2. Makefile を使ったコマンドの簡略化
よく使うコマンドは簡単に叩けるようにしておきたい。次のMakefile を作っておく。
# make の仕様で第一引数と同じ名前のフォルダが存在すると動かなくなる
# .PHONY: を登録しておくことで単純なコマンド実行とみなされる
.PHONY: nginx
# 再起動
restart:
@make down
@make up
# 起動
up:
docker-compose up -d
# 停止
down:
docker-compose down
# nginx のシェル取得
nginx-bash:
docker-compose exec nginx bash
# nginx 設定ファイル文法チェック
test:
docker-compose exec nginx nginx -t
# nginx 設定再読み込み
reload:
docker-compose exec nginx nginx -s reload
# プロセス一覧
ps:
docker-compose ps
# ログ(コンテナの標準出力)
log:
docker-compose logs --follow
# コンテナイメージ削除(down 後に実施)
prune:
docker system prune -af
# ヘルプ(引数一覧)
help:
echo "usage: up,down,nginx-bash,test,reload,ps,log,prune,help"
使い方は引数に渡すだけだ。参考までにいくつかの実行結果を記載しておく。
プロセス一覧
$ make ps
docker-compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
prd-nginx-1 docker.io/library/nginx:latest "nginx -g daemon off;" nginx 20 minutes ago Up 20 minutes
↑ 20分前にnginx が起動している
nginx 設定ファイル文法チェック
$ make test
docker-compose exec nginx nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx 設定再読み込み
$ make reload
docker-compose exec nginx nginx -s reload
これらを組み合わせることで運用に必要な作業を簡易に行うことができる。
nginx のバージョンアップは、make down make prune make up にて行える。
サービス増加やSSL 証明書更新後は、make test を行い、success が確認できたらmake reload を行う。make test を行う前に再起動を行うと、もし設定に誤りがあったら起動できなくなる。
ICOOON-MONN 様のアイコンを使わせていただきました。ありがとうございます。
コメントを残す