😇
n8nをKamalで自宅サーバーにデプロイしてみた
やりたいこと
今話題(?)のn8nを自宅サーバーで使えるように、Kamalでデプロイしてみた。
つかうもの
以下にKamalを使ったデプロイの記事を書いたので、そちらを参照してください
- Dockerfile
つかうものの説明
Dockerfile
Public imageをそのまま使えないので、wrapperのようなDockerfileを用意します。
色々試行錯誤しすぎて、本当にこれで良いのかあまり自身がないです 😢
FROM n8nio/n8n:latest
ENV GENERIC_TIMEZONE=Asia/Tokyo
ENV TZ=Asia/Tokyo
ENV N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
RUN mkdir -p /home/node/.n8n
WORKDIR /home/node/.n8n
USER node
Kamal
n8nをPostgreSQLを使う構成で用意してみました。
# config/deploy.yml
service: n8n
image: kehra/n8n
servers:
web:
- 192.168.1.xxx
registry:
username: kehra
password:
- KAMAL_REGISTRY_PASSWORD
env:
clear:
PORT: 5678
secret:
- N8N_BASIC_AUTH_USER
- N8N_BASIC_AUTH_PASSWORD
- N8N_ENCRYPTION_KEY
- DB_TYPE
- DB_POSTGRESDB_HOST
- DB_POSTGRESDB_PORT
- DB_POSTGRESDB_DATABASE
- DB_POSTGRESDB_USER
- DB_POSTGRESDB_PASSWORD
- WEBHOOK_URL
- N8N_HOST
- N8N_PROTOCOL
ssh:
user: kehra
keys: [ ~/.ssh/id_rsa ]
builder:
arch: amd64
volumes:
- "n8n_storage:/home/node/.n8n"
accessories:
postgres:
image: postgres:17
host: 192.168.1.xxx
port: 5432
env:
clear:
POSTGRES_DB: n8n
secret:
- POSTGRES_USER
- POSTGRES_PASSWORD
directories:
- data:/var/lib/postgresql/data
proxy:
app_port: 5678
host: n8n.example.com
healthcheck:
path: /healthz
ポイントはhealthcheckの設定です。
Kamalはcontainerが正常に起動したかどうかをhealthcheckの設定に応じて行っているのですが、デフォルトは/upです。
しかし、n8nには/upのエンドポイントはなく、healthcheckが通らないので、containerの起動に失敗したとみなされてdeployが失敗します。
なので、ここの設定は注意です。
締め
いかがでしたでしょうか?
こんな構成を組む人がどれだけいるのかわかりませんが、healthcheckでめちゃくちゃ引っかかったので、どなたかのお役に立てればと思い、雑に書いてみました。
Discussion