分類彙整: AI

使用 docker-compose.yml 安裝 n8n

https://github.com/dean9703111/n8n-google-sheet-exmaple

使用 docker-compose.yml 安裝 n8n

你可以直接 git clone 筆者的 GitHub 專案,或者建立一個 n8n 的資料夾,新增 docker-compose.yml 檔案。

volumes:
  n8n_storage:

services:
  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - "127.0.0.1:5678:5678" # 根據實際需求設定
    volumes:
      - n8n_storage:/home/node/.n8n

volumes:
n8n_storage:

services:
n8n:
image: n8nio/n8n:latest
ports:
– “5678:5678”
environment:
– N8N_HOST=0.0.0.0
– N8N_PORT=5678
– N8N_SECURE_COOKIE=false
– N8N_PROTOCOL=http

貼上內容後,在終端機(Terminal)
輸入 docker compose --project-name n8n up -d  即可啟動


加上

environment:
  - N8N_SECURE_COOKIE=false      # 或改成 true 並上 HTTPS
  - N8N_PROTOCOL=http

🔐 1. 安裝憑證(仍需暫時用 port 80)

sudo apt install certbot python3-certbot-apache
sudo certbot certonly --standalone -d yourdomain.com

成功後,憑證位置會是:
/etc/letsencrypt/live/yourdomain.com/

🛠 2. 設定 Apache SSL(以 8443 為例)
建立檔案:
sudo nano /etc/apache2/sites-available/n8n-ssl.conf
內容如下:

<VirtualHost *:8443>
ServerName yourdomain.com

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem

ProxyPreserveHost On
ProxyPass / http://localhost:5678/
ProxyPassReverse / http://localhost:5678/

ErrorLog ${APACHE_LOG_DIR}/n8n_error.log
CustomLog ${APACHE_LOG_DIR}/n8n_access.log combined
</VirtualHost>

啟用必要模組與設定:
sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_http

sudo a2ensite n8n-ssl.conf
sudo systemctl reload apache2

🐳 3. Docker Compose 設定 (n8n 走 http 5678)

services:
n8n:
image: n8nio/n8n
restart: always
ports:
– “5678:5678”
environment:
– N8N_HOST=yourdomain.com
– N8N_PORT=5678
– N8N_PROTOCOL=http
– N8N_SECURE_COOKIE=true


🔎 存取方式:

你可以透過:
https://yourdomain.com:8443

Setting -> Community nodes
新增 Line Bot 節點
@aotoki/n8n-nodes-line-messaging

Dify 安裝

https://ithelp.ithome.com.tw/articles/10360064

git clone https://github.com/langgenius/dify.git

先到 Docker 的官網裝好 docker,將 Dify 複製到你的裝置中

將 dify 複製到你的任何目錄底下git clone https://github.com/langgenius/dify.git

進到 dify/docker 中,這邊放了所有和 docker 有關的設定
cd dify/docker

創建環境檔案 (.env) 這邊直接複製他的範例即可
cp .env.example .env
這邊 Dify 有 nginx 的 container,會將服務開在我們電腦的 80 port 和 443 port (如果有啟動 https),如果你不想開在這些 port 或者電腦這些 port 已經被使用了可以自行修改 .env
# HTTP port NGINX_PORT=80
# 這邊改成你想要的 port
# ------------------------------
# Docker Compose Service Expose Host Port Configurations
# ------------------------------
EXPOSE_NGINX_PORT=80
# 這邊也要改

啟動 docker compose
docker compose --project-name dify up -d # 這邊的 -d 是背景執行的意思 -p 命名 DockerName

NGINX SSL 設定
.evn 編輯
APP_URL=https://ai.example.com
API_HOST=https://ai.example.com
NGINX_SSL_CERT_FILENAME=fullchain.crt
NGINX_SSL_CERT_KEY_FILENAME=privkey.key

docker-compose.yml 編輯
volumes:
/etc/letsencrypt.sh/certs/tahsda.org.tw/privkey.key:/etc/ssl/privkey.key:ro
/etc/letsencrypt.sh/certs/tahsda.org.tw/fullchain.crt:/etc/ssl/fullchain.crt:ro



注意 新增多個 Dify 需要設定 DockerName
docker compose
docker compose --project-name dockername up -d

5003 port 也需要修改
PLUGIN_DEBUGGING_PORT=5003
EXPOSE_PLUGIN_DEBUGGING_PORT=5003

/etc/letsencrypt.sh/certs/tahsda.org.tw/fullchain.crt:/etc/ssl/fullchain.crt:ro

不使用 NGINX 並使用 Apache proxy 至 Dify
啟用 Apache 反向代理模組
sudo a2enmod proxy proxy_http proxy_wstunnel headers rewrite
sudo systemctl restart apache2

docker-compose.yamlnginx: 區塊註解。

或保留,但改 EXPOSE_NGINX_PORTEXPOSE_NGINX_SSL_PORT 至高位埠,Apache 反代到該埠。

services:
web:
ports:
– “3000:3000”
api:
ports:
– “5001:5001”


/etc/apache2/sites-available/dify-ssl.conf

<VirtualHost *:8443>
ServerName xxxx.com.tw
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/xxxxx.com.tw/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/xxxxx.com.tw/privkey.pem
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
#Include /etc/letsencrypt/options-ssl-apache.conf

# Web 前端(React,含 websocket)
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https"
# (1) Dify API:必須寫在最前面,避免被根路徑蓋掉
ProxyPass        /console/api/ http://127.0.0.1:5001/console/api/ retry=0
ProxyPassReverse /console/api/ http://127.0.0.1:5001/console/api/

# (2) Dify Web Frontend (React,預設 3000)
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
ProxyPass /socket.io/ http://127.0.0.1:3000/socket.io/ retry=0
ProxyPassReverse /socket.io/ http://127.0.0.1:3000/socket.io/



# 可選:強制將 http 轉 https
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

ErrorLog  ${APACHE_LOG_DIR}/dify_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/dify_ssl_access.log combined
</VirtualHost>

 啟用站點並重載
sudo a2ensite dify-ssl.conf
sudo systemctl reload apache2