使用容器(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,左邊變數名稱可以用拖拉的,把第一關卡日期拉進去,再調整日期格式。
右邊則為目前系統日期。
左右相同才會觸發右邊發郵件通知
左邊抓取RSS Feed Trigger從kafeiou獲得地的日期,右邊是當天

測試一下,大功告成。


另外在步驟一有提到使用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>

postgres 指令(連線、安裝)

我實在太弱了,不太會用postgres,每次要連線到openproject、teedy都要想很久。

# -U 帳號
# -d 資料庫名稱
# -p 埠(預設5432)
# -h 主機
# -W 需要輸入密碼
psql -U root -d openproject -p 5432 -h localhost -W

docker 安裝postgres

docker run -d --name postgres-17 -p 5432:5432 -e POSTGRES_USER=root -e POSTGRES_PASSWORD=ilovekafeiou -v  postgres-17-data:/var/lib/postgresql/data postgres:17.4-bookworm 

常用指令

# 連到資料庫
\c 資料庫名稱

# 顯示所有table
\dt

好用的輕量級文件管理系統 Teedy

Teedy是一款很棒的輕量級文件管理軟體,以文件為本體,文件包含檔案,而文件具有唯一性。文件跟檔案不同,文件可綁定多標籤,能同時出現在不同標籤結構。

使用標籤概念,可避免傳統檔案總管,相同的檔案若存在不同目錄,會造成文件管理員維護困難(太多相同的檔案)。

Teedy 系統可綁定網域主控(Ldap)、能權限設定、可檢索,也有文件提交送審功能,功能全面。

除了上述功能,該系統具備審計軌跡Audit Log,符合ISO文管系統的基本要求,要過ISO13485、ISO62304沒難度。

Teedy系統採用微軟GitHub管轄下的開源軟體,GPL授權不用錢;軟體確效因屬於套裝軟體(off the shell),只需做3Q即可,且其風險超低,因其開源特性,全世界的工程師都可親自檢驗,更令人放心,例如1.7版就被掃瞄可能有風險

此開源系統缺點是翻譯超爛,我花了很多時間協助翻譯以。我增加新功能如下:
1. 檔案可決定加密或不加密
2. 檔案名稱可設定不能重複
3. 檔案軟刪除(Soft Delete)
4. 讀取(下載)檔案也會被系統紀錄
5. 檔案可移動到不同的文件
6. 好的中文翻譯
7. 一些小bug修正

本站增加新功能的docker版本請到這裡下載體驗,安裝方式請參考這裡,程式原始碼移駕這裡
** 主開發團隊4個月(2024.9)前有commit新的1.12版,這系統維護快10年了,步調較慢,我新增的功能離該系統初衷甚遠(如檔案可不加密),因此就不敢提交給開發團隊了,除非該團隊有注意到我這個版本(但應該不可能拉,團隊不會花時間研究我這版本) XD

最後

OpenProject用來規劃以及進度追蹤,產生的文件可以提交到Teedy進行管控,補足OpenProject文件管理的不足.

docker 安裝 restyaboard (一種看板軟體)

**安裝前必須先安裝postgres (因為restyaboard是docker安裝, 因此postgres也建議用docker安裝)

也必須先行建立資料庫 restyaboard , 存取的使用者,與密碼 ,

docker run --rm -d -e POSTGRES_DB='restyaboard' \
-e POSTGRES_HOST='postgres' \
--link <docker postgres名稱>:postgres \
-e POSTGRES_PASSWORD='admin' \
-e POSTGRES_USER='admin' \
-p 8080:80 \
--name restyaboard restyaplatform/restyaboard:dev

完成後, 可以http登入8080 ,

輸入預設帳號admin , 密碼restya

docker安裝postgres

安裝很簡單, 預設的管理者帳號是 postgres , 密碼就是底下所設定的密碼

docker volume create postgres-data 
docker run --name postgres -v postgres-data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=<密碼> -d postgres

如何登入

docker exec -it postgres  bash

登入後輸入 su – postgres

變身成 postgres之後, 

再下psql 就可以進入postgres世界了

但是指令就很不習慣,只能列出一些剛剛用到的,以後想到再補上

$ sudo -u postgres psql
-- List all databases via \l (or \list), or \l+ for more details
postgres=# \l Name | ... -----------+----------- postgres | ... template0 | ... template1 | ... postgres=# CREATE DATABASE mytest; $ sudo -u postgres createuser --login --pwprompt testuser Enter password for new role: xxxx # Create a new database called testdb, owned by testuser. $ sudo -u postgres createdb --owner=testuser testdb