File size: 2,858 Bytes
7ba33e3 c34a7bd b3e4b70 96fc087 b3e4b70 96fc087 b3e4b70 7ba33e3 b3e4b70 96fc087 b3e4b70 7ba33e3 b6490f9 b3e4b70 96fc087 fc0fdab 96fc087 7ba33e3 96fc087 7ba33e3 96fc087 bb7a720 7ba33e3 96fc087 5272f57 96fc087 b3e4b70 5272f57 b3e4b70 96fc087 bb7a720 96fc087 5272f57 7ba33e3 bb7a720 b3e4b70 7ba33e3 96fc087 5272f57 b3e4b70 |
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 |
# 使用 PostgreSQL 作为基础镜像
FROM postgres:latest
# 设置构建时变量
ARG DUMP_URL
ARG DUMP_PASSWORD
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 NODE_PACKAGES="n8n"
ARG PYTHON_PACKAGES="requests yt-dlp"
# 设置环境变量
ENV POSTGRES_USER=${POSTGRES_USER} \
POSTGRES_PASSWORD=${POSTGRES_PASSWORD} \
POSTGRES_DB=${POSTGRES_DB} \
WEBHOOK_URL=${WEBHOOK_URL} \
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=$WORKDIR/venv \
PATH="$WORKDIR/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH"
# 安装必要的软件包、Node.js,Python,并设置时区
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 python3-venv python3-pip gosu \
htop jq wget lftp && \
# 安装 Node.js
curl -fsSL https://deb.nodesource.com/setup_${NODEJS_VER}.x | bash - && \
apt-get install -y nodejs && \
# 安装全局 Node.js 包
npm install -g ${NODE_PACKAGES} && \
# 设置时区
ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
dpkg-reconfigure --frontend noninteractive tzdata && \
# 安装 rclone
curl https://rclone.org/install.sh | bash && \
# 清理 apt 缓存
apt-get clean && rm -rf /var/lib/apt/lists/* && \
# 设置 Python 虚拟环境
python3 -m venv $VIRTUAL_ENV && \
$VIRTUAL_ENV/bin/pip install --upgrade pip && \
$VIRTUAL_ENV/bin/pip install ${PYTHON_PACKAGES}
# 设置工作目录并复制启动脚本
WORKDIR ${WORKDIR}
COPY run.sh ${WORKDIR}/run.sh
COPY import-db.sh ${WORKDIR}/import-db.sh
RUN chmod +x ${WORKDIR}/run.sh ${WORKDIR}/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 pg_isready && curl -f http://localhost:7860/HEALTHZ || exit 1
# 启动容器时执行 run.sh 脚本
CMD ["./run.sh"] |