
PTT 每日簽到 - n8n docker 版
忘記在哪邊看到有人問,有沒有 PTT 每日簽到(登入)的 n8n 版? 於是就花了一點時間,讓 AI 寫了一段可以在 n8n JavaScript code node 跑起來的程式碼 但因為需要引入額外的庫,所以需要在 docker compose 還有設定上做一些小變動 😆 首先根據上一篇的 n8n v2 docker compose 為基礎,改為以下: services: n8n: image: n8nio/n8n container_name: n8n restart: always ports: - "5678:5678" # Web UI 端口 volumes: - n8n-data:/home/node/.n8n depends_on: n8n-redis: condition: service_healthy environment: # --- 基本設定 & 時區 --- - GENERIC_TIMEZONE=Asia/Taipei - TZ=Asia/Taipei # --- 資料庫維護 (SQLite) --- - DB_SQLITE_VACUUM_ON_STARTUP=true # 啟動時清理資料庫,用於防止 SQLite 資料庫過大導致效能下降 - DB_SQLITE_POOL_SIZE=1 # 啟用 SQLite WAL 模式效能較高較可靠 - EXECUTIONS_DATA_PRUNE=true - EXECUTIONS_DATA_MAX_AGE=168 # 保留 168 小時內的執行紀錄,視需求可上下調整 - EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000 # 最多保留 5000 筆紀錄,視需求可上下調整 # --- 網路與安全 (反向代理設定) --- # 開啟後,必須透過 HTTPS 存取,否則無法登入,內網 HTTP 使用就設定為 false - N8N_SECURE_COOKIE=true - WEBHOOK_URL=https://n8n.example.com/ # 根據自己網域修改,內網無網域這行可以換成內網 IP - N8N_PROXY_HOPS=1 # 告訴 n8n 前面有一層 Proxy (如 Nginx/Caddy),如內網使用這行可以刪除 - N8N_TRUSTED_PROXIES=0.0.0.0/0 # 信任所有來源的 Proxy 標頭,如內網使用這行可以刪除 # --- 權限與安全性 --- - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true - N8N_GIT_NODE_DISABLE_BARE_REPOS=true - N8N_BLOCK_ENV_ACCESS_IN_NODE=false # false 代表允許 Node 節點讀取環境變數 # --- Task Runners 設定 --- # 這是主節點設定,負責派發任務給 task-runners - N8N_RUNNERS_ENABLED=true - N8N_RUNNERS_MODE=external # 使用外部 Runner 模式 - N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0 # 監聽來自 Docker 內網的連線 - N8N_RUNNERS_AUTH_TOKEN=Your1-awEsome-P0ssWorD # 請務必更改為強密碼 - N8N_NATIVE_PYTHON_RUNNER=true # 啟用 Python 支援 task-runners: image: n8nio/runners # 如有指定版號,runners 版本需與 n8n 本體對齊 container_name: n8n-runners restart: always depends_on: - n8n environment: # --- Task Runners 設定 (Worker 端) --- # 設定主節點的連線位置 (Docker 內部通訊) - N8N_RUNNERS_TASK_BROKER_URI=http://n8n:5679 - N8N_RUNNERS_AUTH_TOKEN=Your1-awEsome-P0ssWorD # 需與上方 n8n 主節點內的一致 - N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT=0 # 設定為 0 可避免冷啟動延遲 # 以下為新增的部分,將 runner-javascript 安裝的 modules 儲存下來,避免每次 pull 都要重新安裝 volumes: - ./n8n-task-runners.json:/etc/n8n-task-runners.json:ro - runners-js-node-modules:/opt/runners/task-runner-javascript/node_modules # 啟動後檢查本文章 PTT AutoCheckin JS 所需的庫在不在,不在的話就安裝 entrypoint: - /bin/sh - -lc - | cd /opt/runners/task-runner-javascript if [ ! -d node_modules/ssh2 ] || [ ! -d node_modules/iconv-lite ]; then pnpm add ssh2 iconv-lite fi exec /usr/local/bin/task-runner-launcher javascript redis: image: redis:alpine container_name: n8n-redis restart: always healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 5 volumes: - n8n-redis-data:/data volumes: n8n-data: n8n-redis-data: runners-js-node-modules: 主要是在 task-runners 做了一些之後 JS 執行環境的準備 ...