File size: 3,177 Bytes
c81d21e 39613a3 0474410 f227dce 0474410 6b983fa 0474410 c81d21e 43145f6 39613a3 0474410 23bb921 0474410 23bb921 0474410 23bb921 0474410 23bb921 0474410 23bb921 e958ce2 0474410 6b983fa 344a8b9 6b983fa 0474410 23bb921 0474410 23bb921 0474410 12197af 23bb921 0474410 23bb921 aab03cb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# 基础构建阶段:使用 Node.js 镜像并安装 Python3 和虚拟环境
FROM node:20-slim AS builder
# 设置构建时变量
ARG requirements=requests
ARG PACKAGES=n8n
ARG WORKDIR=/app
ARG DUMP_URL
ARG DUMP_PASSWORD
# 安装 Python3、venv 以及必要的系统工具
RUN apt-get update && apt-get install -y python3 python3-venv curl gnupg build-essential ffmpeg && \
npm install -g ${PACKAGES} && \
apt-get clean && rm -rf /var/lib/apt/lists/*
# 设置 Python 虚拟环境
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV && \
$VIRTUAL_ENV/bin/pip install --upgrade pip && \
$VIRTUAL_ENV/bin/pip install $requirements
# 主运行阶段:基于较小的 PostgreSQL 镜像
FROM postgres:latest
# 设置构建时变量
ARG POSTGRES_USER=n8n
ARG POSTGRES_PASSWORD=n8n
ARG POSTGRES_DB=n8n
ARG WEBHOOK_URL=https://aigenai-db.hf.space/
ARG WORKDIR=/app
ARG DB_IMPORT=no
ARG NODEJS_VER=20
ARG PACKAGES=n8n
# 设置环境变量
ENV POSTGRES_USER=${POSTGRES_USER} \
POSTGRES_PASSWORD=${POSTGRES_PASSWORD} \
POSTGRES_DB=${POSTGRES_DB} \
WEBHOOK_URL=${WEBHOOK_URL} \
WORKDIR=${WORKDIR} \
DB_IMPORT=${DB_IMPORT} \
N8N_HOST=0.0.0.0 \
N8N_PORT=7860 \
N8N_PROTOCOL=https \
GENERIC_TIMEZONE=Asia/Shanghai \
N8N_METRICS=true \
QUEUE_HEALTH_CHECK_ACTIVE=true \
N8N_PAYLOAD_SIZE_MAX=256 \
DB_TYPE=postgresdb \
DB_POSTGRESDB_HOST=localhost \
DB_POSTGRESDB_PORT=5432 \
DB_POSTGRESDB_USER=${POSTGRES_USER} \
DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD} \
DB_POSTGRESDB_DATABASE=${POSTGRES_DB} \
VIRTUAL_ENV=/opt/venv \
PATH="$VIRTUAL_ENV/bin:/usr/local/lib/node_modules/n8n/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH"
# 复制构建阶段的 Node.js 和 n8n
COPY --from=builder /usr/local/bin/node /usr/local/bin/
COPY --from=builder /usr/local/lib/node_modules /usr/local/lib/node_modules
# 复制构建阶段的 Python 运行环境
COPY --from=builder $VIRTUAL_ENV $VIRTUAL_ENV
# 安装必要的软件包并设置时区
RUN apt-get update && apt-get install -y \
curl unzip gnupg build-essential sudo vim git procps lsof net-tools \
ca-certificates openssl tzdata python3-venv gosu \
htop jq wget && \
ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
dpkg-reconfigure --frontend noninteractive tzdata
# 设置工作目录并复制启动脚本
WORKDIR ${WORKDIR}
COPY run.sh ${WORKDIR}/run.sh
COPY import-db.sh /docker-entrypoint-initdb.d/
RUN chmod +x ${WORKDIR}/run.sh /docker-entrypoint-initdb.d/import-db.sh
# 更改现有的 postgres 用户 UID 和 GID 为 1000
USER root
RUN usermod -u 1000 postgres && groupmod -g 1000 postgres && \
chown -R postgres:postgres /var/lib/postgresql && chown -R postgres:postgres /var/run/postgresql && \
chown -R postgres:postgres $WORKDIR && mkdir -p $WORKDIR/backups && chmod -R 775 $WORKDIR/backups
# 切换到 postgres 用户
USER postgres
# 健康检查配置(可选)
HEALTHCHECK --interval=120s --timeout=10s --start-period=10s --retries=3 \
CMD curl -f http://localhost:7860/HEALTHZ || exit 1
# 启动容器时执行 run.sh 脚本
CMD ["./run.sh"] |