n8n-free / Dockerfile
chakasoft's picture
Update Dockerfile
17de91b verified
# 使用 Node.js 20
FROM node:20-alpine
# --- 環境變數設定 ---
ENV N8N_USER_FOLDER=/home/node/.n8n
ENV N8N_DISABLE_PRODUCTION_MAIN_PROCESS_BETA=true
ENV N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
ENV NODE_FUNCTION_ALLOW_EXTERNAL=puppeteer,playwright
ENV DB_TYPE=postgresdb
ENV DB_POSTGRESDB_HOST=""
ENV DB_POSTGRESDB_PORT=5432
ENV DB_POSTGRESDB_DATABASE=postgres
ENV DB_POSTGRESDB_USER=postgres
ENV DB_POSTGRESDB_PASSWORD=""
ENV DB_POSTGRESDB_SSL=true
# --- 安裝系統依賴 ---
USER root
RUN apk add --no-cache \
git \
procps-ng \
udev \
ttf-freefont \
chromium \
nss \
freetype \
harfbuzz \
ca-certificates \
dbus-glib \
fontconfig \
ffmpeg \
yt-dlp
# --- 安裝 n8n 和 Playwright 套件 ---
RUN npm install -g n8n@latest playwright puppeteer --omit=dev
# --- 安裝 Playwright 的瀏覽器 ---
RUN npx playwright install
# --- 切換到 node 用戶,設定工作目錄 ---
USER node
WORKDIR /home/node
# --- 最終修正:使用 Wrapper Script ---
# 1. 將我們的啟動腳本複製到容器中
COPY --chown=node:node entrypoint.sh .
# 2. 賦予它執行的權限
RUN chmod +x ./entrypoint.sh
# 3. 將這個腳本設定為容器的入口點。
# 這樣可以 100% 保證我們的 IPv4 參數會被執行,平台無法再覆蓋它。
ENTRYPOINT ["./entrypoint.sh"]
# 開放端口
EXPOSE 5678