PR
n8nの完全SSL化!Caddy × Dockerで面倒なHTTPS設定を全自動にする手順

独自ドメインの紐づけ、お疲れ様でした!ブラウザで「n8n.あなたのドメイン」にアクセスできるようになったら、いよいよ最後の関門である「SSL化(HTTPS化)」です。

アドレスバーに「保護されていない通信」と警告が出ている状態では、LINEやSlackなどの外部サービスと連携する「Webhook機能」がセキュリティ上弾かれてしまいます。
一般的には「Nginx」というソフトを使って複雑な設定を行いますが、この記事では超簡単で便利な「Caddy(キャディ)」というサーバーソフトを使い、Dockerでn8nと一緒に起動して全自動でSSL化する方法を解説します。
「Caddy」をオススメする理由
n8nの運用環境を作るなら、圧倒的にCaddyをおすすめします。
そもそもSSLとは?
SSL(Secure Sockets Layer)とは、インターネット上の通信を暗号化して、悪意のある第三者からデータを守るためのセキュリティ技術です。
SSLが導入されていないWebサイトのURLは「http://」で始まり、導入されているサイトは「https://」(最後にSecureのSがつく)で始まります。
このSSL化は半ば常識になっていて、Chromeなんかからはhttps://じゃなければWebサイトじゃねぇぜ!的な扱いをうけます。
クマとにかくサーバーにアクセスするなら「SSL化は常識」ですね
SSL証明書の取得から更新まで「完全自動」
ですが、WebサイトをHTTPS化するには「Certbot」などを導入し、証明書を発行して、さらに数ヶ月ごとの自動更新プログラム(cron)を設定しなければなりません。
ブログなどを運営していると、サーバーのSSLサービスを使うことも多いので気付きませんが自前でSSL化しようとすると結構面倒なんです…。



サーバーのサービスってありがたいですよねぇ…気付かないところで「証明書発行」→「自動更新」を勝手にやってくれるので、SSL化は一度設定してしまえばこちらがあまり意識することはありません
ですが、VPSだとそうはいきません。自前でSSL化(証明書発行→更新)をしていく必要があります。



でも大丈夫!Caddyを使えば、引くほど簡単にSSL化できます!簡単すぎてAIに「これで大丈夫なの?」って聞いたほどです笑
Caddyなら、設定ファイルに「自分のドメイン」を1行書くだけで、証明書の取得から更新まで、裏側ですべて勝手にやってくれます。
連携の準備:Caddyfile(設定ファイル)を作成する
それでは、VPSにターミナル画面(黒い画面)で接続して、前回(接続方法もここに書いてます)作成した n8n-server フォルダに移動して作業を始めましょう。



また黒い画面です…が、そろそろ慣れてきましたか?慣れてきたらアナタも立派なエンジニア!
Caddyに「道案内」をさせるファイルを作る
まずは、Caddyの動きを指示する Caddyfile (拡張子なし、Cは大文字)というファイルを作成します。
# n8nのフォルダに移動
cd n8n-server
# Caddyfileを作成
nano Caddyfile
エディタが開いたら、以下の3行だけをコピペしてください。(※ドメイン部分はご自身のものに書き換えてください)
n8n.あなたのドメイン.com {
reverse_proxy n8n:5678
}
これは「このドメインにアクセスが来たら、内部で動いているn8nの5678ポートに繋いでね」という、道案内の設定(リバースプロキシ)です。書き終えたら Ctrl + O ➡ Enter ➡ Ctrl + X で保存して閉じます。



3行のファイルですが…まずはこれが必要です
docker-compose.ymlを「Caddy搭載版」に書き換える
次に、前回作ったn8nのDocker設定ファイルを編集し、Caddyも一緒に立ち上がるように書き換えます。
ファイルの編集とコピペ
再度エディタを開きます。
nano docker-compose.yml中身をすべて消し、以下の内容に丸ごと書き換えてください。(WEBHOOK_URLのドメインはご自身のものに変更してください)
services:
caddy:
image: caddy:latest
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
n8n:
image: docker.n8n.io/n8nio/n8n
restart: always
environment:
- GENERIC_TIMEZONE=Asia/Tokyo
- WEBHOOK_URL=https://n8n.あなたのドメイン.com/
volumes:
- n8n_data:/home/node/.n8n
volumes:
caddy_data:
caddy_config:
n8n_data:
セキュリティが向上する「ポート」
ここで重要な変更点があります。前回のファイルにあった ports: - "5678:5678" というn8nの記述を削除しました。 代わりにCaddy側でWebの標準ポート(80と443)を開放しています。



ポート、というのはサーバーの入口だと思ってください。ポートは0番〜65535番のいずれかの数字が割り振られた入口ですが、Web(インターネット)は「80番か443番を使おうね」って決まってます
これにより、外部からはCaddyの安全な扉(HTTPS)を経由しないとn8nにアクセスできなくなり、セキュリティが大幅に向上します。
起動とSSL化(HTTPS)の確認
設定ファイルの書き換えが終わったら、いよいよ2つのシステムを同時に起動させます。



「同時に」といっても、さっきdocker-compose.ymlにサービスを2つ書いたので、Dockerのコンテナを立ち上げるだけで同時に起動します。別々に操作する必要はないです…Docker便利!
Docker Composeで再起動をかける
以下のコマンドを実行して、変更を反映させつつ立ち上げ直します。
docker compose up -d画面上に Started と表示されれば、VPS側での作業はすべて完了です!裏側でCaddyがLet’s Encrypt(証明書発行機関)と通信し、あなたのドメイン用のSSL証明書を自動で取得してくれています。



「いよいよ2つのシステムを…」とか言ってますがdocker-compose.ymlに「このアプリをこの設定で立ち上げてね」って書いてしまえば、Dockerが勝手に立ち上げてくれます
ブラウザのアドレスバーに「鍵マーク」がつけば成功!
PCのブラウザから https://n8n.あなたのドメイン.com にアクセスしてみてください。
無事にn8nのログイン画面が表示され、アドレスバーの横に「セキュリティで保護されています(鍵マーク)」が出ていれば、完璧に成功です!



SSL化には少し時間がかかります。数分〜十数分くらい待つくらいの余裕がほしいですね!Dockerを立ち上げたら、とりあえずコーヒーでも淹れて少し待ちましょう!
まとめ:これで最強の外部ツール連携基盤が完成
これでドメインの紐づけからCaddyを使ったSSL化まで、インフラ構築の山場を無事に乗り越えました!
ここまでの環境が整えば、n8nは単なる「手元の効率化ツール」から、「世界中のWebサービスと安全に通信できる司令塔」へと進化します。
次回はいよいよ、外部ツールからデータを受け取る具体的なワークフローの作り方に入っていきましょう!お疲れ様でした。



ようやくn8nを本格的に使う準備ができました…



