【ITニュース解説】How I deploy n8n on a VPS with Docker + Nginx + HTTPS

2025年09月05日に「Dev.to」が公開したITニュース「How I deploy n8n on a VPS with Docker + Nginx + HTTPS」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

ワークフロー自動化ツールn8nをVPSに導入する手順を解説。Dockerでn8nコンテナを起動し、Nginxをリバースプロキシとして設定。Let's EncryptでHTTPS化し、安全に公開するまでの具体的なコマンドを紹介する。

ITニュース解説

この記事では、n8nという自動化ツールをインターネット上に公開するための具体的な手順が解説されている。n8nは、さまざまなオンラインサービスやアプリケーションを連携させ、繰り返し行う作業を自動化できる便利なツールだ。これを自分専用のサーバーに設置し、安全に利用できるようにする方法を学ぶことは、システムエンジニアを目指す上で非常に役立つ知識となる。

まず、n8nを動かすためのサーバー環境を準備する必要がある。これはVPS(Virtual Private Server、仮想プライベートサーバー)と呼ばれる、インターネット上にある仮想的なサーバーを借りることで実現する。一般的にはUbuntuなどのLinux系のOSがインストールされたVPSが使われる。このVPSにアクセスするために、独自のドメイン名(例: example.com)を取得し、そのドメイン名をVPSのIPアドレスに紐づける設定(Aレコード)を事前に行っておく必要がある。サーバーの操作はコマンドラインインターフェース(CLI)を通じて行われるため、基本的なコマンド操作のスキルと、システムを管理するための権限(sudoまたはroot)を持つユーザーが必須となる。

次に、n8nを効率的に管理するためのDockerというツールを導入する。Dockerは「コンテナ」という技術を使って、アプリケーションとその実行に必要な環境を隔離し、どこでも同じように動作させることができる仕組みを提供する。これにより、環境による問題が起きにくく、アプリケーションのデプロイが非常に簡単になる。Dockerのインストールは、まず古い関連ファイルを削除し、システムを最新の状態に更新した後に、Docker公式が提供するスクリプトを実行することで確実に行える。インストールが完了したかを確認するには、「hello-world」というテスト用コンテナを実行し、メッセージが表示されるかを確認する。

Dockerが正しくインストールされたら、コンテナの状態を管理するための基本的なコマンドを学ぶ。docker image lsで利用可能なDockerイメージ(アプリケーションのテンプレート)を確認し、docker psで現在実行中のコンテナ、docker ps -aで停止中のものを含めたすべてのコンテナの状態を確認できる。もしコンテナが期待通りに動かない場合は、docker logs <コンテナ名またはID>で詳細なログを確認し、問題の原因を探る。不要になったり、問題を起こしているコンテナは、docker rm -f <コンテナ名またはID>で強制的に削除できる。

n8nのようなアプリケーションは、作成したワークフローや設定データなどを保存する必要がある。コンテナは一時的な環境のため、コンテナが削除されるとデータも失われてしまう。これを防ぐために「永続ストレージ」を設定する。これは、VPS上の特定のディレクトリ(例: ~/.n8n)と、n8nコンテナ内でデータが保存されるディレクトリ(/home/node/.n8n)を関連付ける(「マウントする」と呼ぶ)ことで実現する。この際、n8nコンテナがVPS上のディレクトリにデータを書き込めるよう、適切なファイルアクセス権限(sudo chown -R 1000:1000 ~/.n8n)を設定する必要がある。1000:1000は、n8nコンテナ内でn8nが使用するユーザー(nodeユーザー)のIDとグループIDを示している。

永続ストレージの準備が整ったら、docker runコマンドを使ってn8nコンテナを実行する。このコマンドにはいくつかの重要なオプションがある。-dはコンテナをバックグラウンドで実行し続けることを意味し、コマンド実行後もターミナルを自由に使えるようになる。--name n8nは、コンテナにn8nという分かりやすい名前を割り当てる。-p 5678:5678は「ポートマッピング」と呼ばれ、VPSのポート5678番へのアクセスを、n8nコンテナ内のポート5678番に転送するように設定する。これにより、VPSのIPアドレスとポート5678番でn8nにアクセスできるようになる。-v ~/.n8n:/home/node/.n8nは、先ほど設定した永続ストレージのマウントを指定している。最後にn8nio/n8nは、n8nのDockerイメージ名を指定する。このコマンド実行後、docker psでn8nコンテナが「Up」と表示され、ポートマッピングが正しく設定されているかを確認する。

コンテナの実行中に発生しがちな問題とその解決策も理解しておく必要がある。例えば、すでに同じ名前のコンテナが存在しているためにdocker runが失敗することがある。この場合は、docker ps -aで既存のコンテナを確認し、docker rm -fで削除してから再実行する。また、コンテナが起動した直後にすぐに停止してしまう(Exited (1))場合は、docker logsで原因を確認する。一般的な原因としては、永続ストレージの権限不足、VPSのポートを他のアプリケーションが既に使用している「ポート競合」、n8nのデータベース設定などの環境変数が不足している場合などがある。それぞれ、権限を修正したり、ポート番号を変更したり、必要な環境変数を追加したりして解決する。

n8nをインターネットに公開する際には、セキュリティ対策が不可欠だ。n8nはデフォルトで「セキュアCookie」を使用するため、HTTP(暗号化されていない通信)でアクセスすると警告が表示される。これを解決し、安全にサービスを提供するためには、NginxというWebサーバー兼リバースプロキシと、HTTPS(暗号化された安全な通信プロトコル)の導入が強く推奨される。Nginxは、ユーザーからのリクエストを受け取り、それをn8nコンテナに転送し、n8nからの応答をユーザーに返す「リバースプロキシ」として機能する。これにより、n8nを直接インターネットに公開するよりも安全性が高まる。Nginxの設定ファイルを作成し、ドメイン名とn8nコンテナのアクセス先(VPSのローカル環境の5678ポート)を記述する。設定ファイルを有効化し、nginx -tで設定に問題がないかテストした後、Nginxを再起動すると、Nginx経由でn8nにアクセスできるようになる。

次に、Webサイトの通信を暗号化するHTTPS化を行う。これはSSL/TLS証明書を導入することで実現する。無料で証明書を取得できるLet's Encryptと、その自動化ツールであるCertbotを使うのが一般的だ。CertbotとNginxを連携させるためのパッケージをインストールした後、sudo certbot --nginx -d yourdomain.com --non-interactive --agree-tos -m your-email@example.comコマンドを実行する。このコマンドは、Nginxの設定を自動的に変更し、Let's Encryptから証明書を取得してHTTPSを有効化してくれる。これにより、https://yourdomain.comでn8nに安全にアクセスできるようになり、セキュアCookieに関する警告も表示されなくなる。セキュリティ上、本番環境でN8N_SECURE_COOKIE=falseという設定を決して使わないことが重要だ。これは安全対策を無効にする設定であり、ローカルでの一時的なテスト目的のみに限定すべきである。

さらにセキュリティを強化するために、n8nにBasic認証を追加できる。これは、n8nのWebインターフェースにアクセスする際に、ユーザー名とパスワードの入力を求める機能だ。docker runコマンドに-eオプションを使って、N8N_BASIC_AUTH_ACTIVE=trueでBasic認証を有効にし、N8N_BASIC_AUTH_USERN8N_BASIC_AUTH_PASSWORDでユーザー名とパスワードを設定する。既存のn8nコンテナを一度削除し、これらの設定を追加して再起動することで、Basic認証が有効になる。NginxによるHTTPS化とBasic認証を組み合わせることで、二重のセキュリティ対策となる。

最後に、Docker Composeという便利なツールも紹介されている。Docker Composeは、複数のDockerコンテナの構成をdocker-compose.ymlという一つのファイルに記述し、まとめて管理できるツールだ。n8n単体の場合でも、このファイルに設定を記述しておくことで、コマンドがシンプルになり、将来的に他のサービス(例えばデータベース)と連携させる際にも拡張しやすくなる。docker-compose.ymlファイルには、n8nのDockerイメージ、コンテナ名、ポートマッピング、環境変数、永続ストレージのマウント、そしてコンテナが停止した場合の自動再起動設定などが記述される。このファイルを作成した後、docker compose up -dコマンドを実行するだけで、設定されたn8nコンテナが起動する。これにより、複雑なdocker runコマンドを毎回入力する手間が省け、設定の再現性も高まる。

この一連の解説は、VPS上でDockerを使いn8nをデプロイし、NginxとHTTPSで安全に公開するまでの具体的な手順を示している。システムエンジニアを目指す上で、このようなWebアプリケーションのデプロイと運用に関する知識は非常に重要であり、今回解説したDocker、Nginx、HTTPS、そしてDocker Composeといった技術は、現代のWebサービス開発において不可欠な要素である。

【ITニュース解説】How I deploy n8n on a VPS with Docker + Nginx + HTTPS | いっしー@Webエンジニア