blog

nginx on docker の運用

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

nginx とサービスA-C がコンテナとなっている。

この構成でしばらく運用するには主に以下の作業が必要となる。

  • nginx 静的コンテンツ入れ替え
  • nginx バージョンアップ
  • nginx ログ参照
  • サービス増加
  • SSL 証明書更新

これらをなるべく簡単に行うために、次の点を工夫した。

  1. docker volume によるファイル管理
  2. 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 様のアイコンを使わせていただきました。ありがとうございます。

https://icooon-mono.com

【広告】

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です