n8nの構築が分かりづらかったので自分向けにまとめる

作成日時
Aug 24, 2022 08:54 AM
更新日時
Last updated March 6, 2023
タグ
n8n
n8nは以前も建てていたのだが、SSDが死んだ時にまるごと消えてしまった上に、バックアップも取っていなかった。
 
しばらくはそのままでも良いかなと思っていたが、今回n8nを使いたい案件があったため改めて構築したが、少し分かりづらかったので自分の言葉でまとめておく。

前提

Ubuntu 22.04
Docker、docker-composeインストール済み
 
私はOracle Cloudで建てている。

docker-compose周り

ドキュメントはここにある。
が、ちょっと分かりづらい。
 
公式リポジトリにも設定のサンプルがあるが、こちらを使ったほうが良いかも。
 
ただ、私は規模が小さいのでPostgreSQLまでは不要としてSQLiteを使うことにした。
そして設定は最小限とし、パブリックアクセス可能にしている。
version: '3.8' services: n8n: build: . #image: n8nio/n8n restart: always environment: - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/ - N8N_BASIC_AUTH_ACTIVE=true - N8N_BASIC_AUTH_USER - N8N_BASIC_AUTH_PASSWORD ports: - 5678:5678 volumes: - ./n8n:/home/node/ command: /bin/sh -c "n8n start"
docker-compose.yaml
FROM n8nio/n8n RUN apk --update add curl
Dockerfile
# The top level domain to serve from DOMAIN_NAME=example.com # The subdomain to serve from SUBDOMAIN=n8n # DOMAIN_NAME and SUBDOMAIN combined decide where n8n will be reachable from # above example would result in: https://n8n.example.com # The user name to use for authentication - IMPORTANT ALWAYS CHANGE! N8N_BASIC_AUTH_USER=user # The password to use for authentication - IMPORTANT ALWAYS CHANGE! N8N_BASIC_AUTH_PASSWORD=password
.env
WEBHOOK_TUNNEL_URLは使わないけど一応設定。
curlも今のところ不要だが、以前必要になったことがあったので手前でビルドすることにした。
 
ぶっちゃけ今BASICの設定がいるのか不明(以前は無いと直アクセスだった)
今は普通に認証があるのでなくても挙動は変わらなかった。

nginx

nginxでリバプロするようにしているが、設定のサンプルが見つけられなかったので、以下のように設定している。
server { listen 80; server_name n8n.example.com; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl http2; server_name n8n.xn--krsgw--n73t.com; ssl_certificate /etc/letsencrypt/live/n8n.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/n8n.example.com/privkey.pem; ssl_session_cache shared:le_nginx_SSL:10m; ssl_session_timeout 1440m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers off; ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"; #ssl_dhparam /etc/letsencrypt/dhparam.pem; location / { proxy_pass http://localhost:5678; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; #proxy_cache_bypass $http_upgrade; proxy_buffering off; proxy_cache off; } # error_log /var/log/nginx/error.log ; }
なお、最近では以下の設定が必須らしく、これがないとそれぞれのタスクが永遠に終わらない事象が発生したり、即切断されてしまった。
※調べて出てきたんだけどソースメモってない
proxy_buffering off; proxy_cache off;

まとめ

こんな感じで最低限の設定は完了となる。
あとは煮るなり焼くなり好きにすれば良いと思う。
 
なお、これを見てもあくまで参考程度とし、必ずしも動く保証があるものではないことをここに記載する。
 
では、また。