コンテナを足すたびにNginxの設定を書き,証明書を取り直す── この手間を自動化するのがTraefikだ.コンテナにラベルを付けるだけで,振り分けもHTTPS化も自動で行われる.
Traefikは「動的リバースプロキシ」と呼ばれる.Dockerと連携し,起動したコンテナを自動検出して公開する.Let’s Encryptの証明書取得・更新まで内蔵しており,コンテナ中心の運用と抜群に相性が良い.
この記事は,VPSでDockerを使い,複数サービスを公開する個人開発者に向けている.Nginxとの違いから,ラベルによる振り分け,自動HTTPS,ダッシュボードまでを実践的に解説する.
読み終えたとき,あなたはコンテナを足すだけで自動的にHTTPS公開される仕組みを構築できるようになっている.
なぜTraefikなのか ― Nginxとの違い
Nginxは強力だが静的な設定が基本だ.サービスを足すたびに設定ファイルを書き,証明書を取り,リロードする.コンテナを頻繁に増減する環境では,この手作業が負担になる.
Traefikは動的だ.Dockerと連携し,起動したコンテナのラベルを読んで自動で振り分けを構成する.設定ファイルの編集もリロードも不要で,コンテナを足せば自動で公開される.
さらにTraefikはLet’s Encryptの証明書取得・更新を内蔵している.Certbotを別途動かす必要がなく,HTTPS化が完全に自動化される.
「コンテナ中心・サービスの増減が多い」環境ではTraefik,「枯れた安定性・細かい制御」を求めるならNginx── という使い分けになる.本記事でTraefikの強みを体感しよう.
Traefikの仕組み ― ラベルで設定する
Traefikの核心は,各サービスコンテナに付けた「ラベル」を読んで,振り分けルールを動的に構成することだ.設定はTraefik本体ではなく,公開したい各コンテナ側に書く.
これにより,「このコンテナをこのドメインで公開する」という宣言を,そのコンテナ自身に持たせる形になる.サービスの定義と公開設定が1箇所にまとまり,見通しが良い.
Traefik本体を立てる ― composeでの基本構成
まずTraefik本体のコンテナを立てる.Dockerソケットを読んでコンテナを検出し,80/443で受けて振り分ける.Let’s Encryptの設定もここで行う.
Traefik本体(compose)
services:
traefik:
image: traefik:v3
restart: always
command:
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --certificatesresolvers.le.acme.email=you@example.com
- --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
- --certificatesresolvers.le.acme.tlschallenge=true
ports: ["80:80", "443:443"]
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- letsencrypt:/letsencrypt
volumes:
letsencrypt:exposedbydefault=falseが重要だ.これにより明示的にラベルを付けたコンテナだけが公開される(意図しない公開を防ぐ).acmeの設定でLet’s Encryptの自動取得が有効になり,証明書はletsencrypt volumeに保存される(必ず永続化する).
サービスを公開する ― ラベルを付けるだけ
公開したいアプリには,ラベルでドメインとHTTPS設定を宣言する.これだけでTraefikが検出し,証明書を取得し,振り分けを構成する.
アプリ側のラベル
services:
myapp:
image: myapp
labels:
- traefik.enable=true
- traefik.http.routers.myapp.rule=Host(`app.example.com`)
- traefik.http.routers.myapp.entrypoints=websecure
- traefik.http.routers.myapp.tls.certresolver=le
- traefik.http.services.myapp.loadbalancer.server.port=3000このラベルだけで,app.example.comへのHTTPSアクセスが,コンテナの3000番ポートに振り分けられる.証明書はTraefikが自動取得する.新しいサービスを公開したければ,同様のラベルを付けたコンテナを起動するだけ── 設定ファイルの編集もリロードも不要だ.
HTTP→HTTPSリダイレクトとミドルウェア
Traefikはミドルウェアという仕組みで,リダイレクト・認証・レート制限などを差し込める.まずはHTTP→HTTPSの自動リダイレクトを設定する.
HTTP→HTTPSリダイレクト(全体)
# Traefik本体のcommandに追加
- --entrypoints.web.http.redirections.entrypoint.to=websecure
- --entrypoints.web.http.redirections.entrypoint.scheme=https
# Basic認証ミドルウェアの例(ラベル)
# - traefik.http.middlewares.auth.basicauth.users=user:$$hashed
# - traefik.http.routers.myapp.middlewares=authミドルウェアは再利用可能な処理の部品だ.Basic認証・IPホワイトリスト・レート制限・ヘッダ付与などを定義し,ルーターに適用できる.管理画面に認証をかける,特定IPだけ許可するといった制御を,ラベルで宣言的に組める.
ダッシュボード ― 状態を可視化する
Traefikにはダッシュボードがあり,現在のルーター・サービス・証明書の状態を可視化できる.ただしこれ自体を無防備に公開してはいけない.
ダッシュボードは運用状況の把握に便利だが,内部情報を晒すためBasic認証やIP制限で必ず保護する.本番では「ダッシュボードは無効化」または「強固な認証付きで限定公開」が安全だ.Traefikの設定状況を確認したいときに有効化し,普段は閉じておく運用が無難だ.
TraefikとNginxの使い分け
TraefikとNginxは競合ではなく,適材適所だ.それぞれの強みを理解して選ぶ.
| 観点 | Traefik | Nginx |
|---|---|---|
| 設定方式 | 動的(ラベル自動検出) | 静的(設定ファイル) |
| HTTPS自動化 | 内蔵(ACME) | Certbot併用 |
| コンテナ増減への追従 | ◎ 自動 | △ 手動 |
| 細かい制御・枯れた安定性 | ○ | ◎ |
| 静的配信の性能 | ○ | ◎ |
コンテナを頻繁に増減し,HTTPS化の手間を無くしたいならTraefik.細かい制御・高速な静的配信・枯れた安定性を重視するならNginx.両者を併用する(Traefikで振り分け,背後でNginxが静的配信)構成もある.自分の運用スタイルに合う方を選ぼう.
補論:自動HTTPS化は「コンソール復旧できるVPS」で安心して試せる
Traefikは強力だが,ラベルやACMEの設定をミスすると全サービスが公開されない/証明書が取れない事態にもなる.自動化されているぶん,挙動を理解するまでは試行錯誤が要る.戻せる環境での検証が安心だ.
高速NVMe・50種類以上のOSテンプレートに対応した国内VPS─シン・VPS─ はスナップショットとコンソールを備え,NVMe SSDでコンテナの起動も軽快なため,Traefikの設定を試しては戻す検証がしやすい.固定IPがあるのでLet’s EncryptのTLSチャレンジも安定し,自動HTTPS化を確実に動かせる.
Traefikで複数サービスを公開するなら,独自ドメインとサブドメインが要だ.取り扱い400種類以上のドメイン取得サービス─ムームードメイン─ で取得したドメインにワイルドカードを設定すれば,app. / api. / blog. をコンテナのラベルだけで次々公開できる.
よくある質問(FAQ)
Q1.TraefikとNginxどちらを使うべき?
コンテナを頻繁に増減し,HTTPS化を自動化したいならTraefik.細かい制御・高速静的配信・枯れた安定性ならNginx.コンテナ中心の個人開発ではTraefikの自動化の恩恵が大きい.
Q2.証明書の取得が自動とは?
TraefikはLet’s EncryptのACMEを内蔵し,ラベルで指定したドメインの証明書を自動取得・自動更新する.Certbotを別途動かす必要がない.証明書は永続volumeに保存する.
Q3.意図しないコンテナが公開されないか?
exposedbydefault=falseを設定すれば,明示的にtraefik.enable=trueラベルを付けたコンテナだけが公開される.これでうっかり公開を防げる.
Q4.ダッシュボードは公開してよい?
無防備な公開はNGだ.内部情報を晒すため,Basic認証やIP制限で保護するか,本番では無効化する.必要なときだけ認証付きで限定公開する.
Q5.Let’s EncryptのTLSチャレンジが失敗する
80/443ポートが開いていてドメインがVPSのIPに向いているかを確認する.固定IPのVPSでDNSが正しく設定されていれば安定する.volumeのacme.jsonの権限にも注意.
Q6.既存のNginx構成から移行できる?
可能だが急ぐ必要はない.新規のコンテナサービスからTraefikで公開し始め,徐々に移すのが現実的だ.両者を併用する構成も取れる.
まとめ ― 「コンテナを足すだけで公開」を実現する
Traefikは,ラベルによる動的な振り分けとLet’s Encryptの自動化で,「コンテナを足すだけでHTTPS公開される」運用を実現する.コンテナ中心の個人開発と抜群に相性が良い.
今日やるべきことは,Traefik本体を立て,1つのアプリにラベルを付けて自動HTTPS公開を体験すること.設定ファイルもCertbotも要らずに公開できる手軽さを実感できる.
自動化は運用の手間を劇的に減らす.コンソールとスナップショットで守られたVPSがあれば,Traefikの自動化を安心して取り入れられる.