使用容器(docker)自架N8N
使用容器 docker 自架N8N社群版非常簡單,但功能有所限制;雲端付費版每月最低20歐元,可解鎖更多功能,建議先使用雲端版14天試用看看,不符合期待再考慮自架。自架方式有很多種,容器方式為首選。
我的環境是:
1. 容器主機
RockyLinux 9.4,docker ce 27.03,postgres sql server 17
2. 代理伺服器主機 apache httpd 2.4
3. dns n8n.test.com
1. 建立docker-compose.yaml檔案
紅字部分須注意斟酌修改
version: "3"
services:
n8n:
image: n8nio/n8n
restart: always
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER
- N8N_BASIC_AUTH_PASSWORD
- N8N_HOST=n8n.test.com
- N8N_PORT=5678
- N8N_PROTOCOL=http
- NODE_ENV=production
- WEBHOOK_URL=https://n8n.test.com/
- DB_TYPE=postgresdb
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_HOST=postgres主機ip
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_USER=使用者
- DB_POSTGRESDB_PASSWORD=密碼
- DB_POSTGRESDB_SCHEMA=public
- TZ=Asia/Taipei
- GENERIC_TIMEZONE=Asia/Taipei
- N8N_RUNNERS_ENABLED=true
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- N8N_EMAIL_MODE=smtp
- N8N_SMTP_HOST=mail.hlmt.com.tw
- N8N_SMTP_PORT=587
- N8N_SMTP_USER=郵件帳號
- N8N_SMTP_PASS=郵件密碼
- N8N_SMTP_SENDER=sender@test.com
- N8N_SMTP_SSL=false
- N8N_SMTP_STARTTLS=true
- EXPRESS_TRUST_PROXY=true
- N8N_PROXY_HOPS=1
- N8N_PUSH_BACKEND=sse
# 若使用httpd proxy透過web socket請改成N8N_PUSH_BACKEND=websocket
volumes:
- .n8n:/home/node/.n8n
經過測試這版v1.86版,有權限問題,需要先手動建立.n8n,使用者設定為 1000
# mkdir -p .n8n
# chown -R 1000:1000 .n8n
2. 啟用n8n容器

執行 https://n8n.test.com 之後,就可以設定主人了



安裝完畢 ***社群版限制一個帳號,若郵件設定正確,可以再邀請別人加入。
實作一個玩玩看-檢查咖啡偶文章,有新的就通知

一開始先新增RSS Feed trigger:每天晚上查看一次咖啡偶網站 https://kafeiou.pw/feed

中間增加過濾器 filter,過濾當天是否有新的文章,若有就發email通知。
左邊使用java script,左邊變數名稱可以用拖拉的,把第一關卡日期拉進去,再調整日期格式。
右邊則為目前系統日期。
左右相同才會觸發右邊發郵件通知


測試一下,大功告成。
另外在步驟一有提到使用web socket的方式進行反向代理參數設定,須修改docker-compose.yaml檔案
請改為N8N_PUSH_BACKEND=websocket 。httpd config 設定參考如下:
<VirtualHost *:443>
ServerName n8n.test.com
ErrorLog /var/log/httpd/ssl_error_log
TransferLog /var/log/httpd/ssl_access_log
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/n8n.test.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/n8n.test.com/privkey.pem
SSLCACertificateFile /etc/letsencrypt//live/n8n.test.com/fullchain.pem
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https"
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://容器主機IP:5678/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://容器主機IP:5678/$1 [P,L]
<Location />
Order allow,deny
Allow from all
</Location>
</VirtualHost>