Update Dockerfile
Browse files- Dockerfile +129 -0
Dockerfile
CHANGED
@@ -0,0 +1,129 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# 基础构建阶段:使用 Node.js 镜像并安装 Python3 和虚拟环境
|
2 |
+
FROM node:20-slim AS builder
|
3 |
+
|
4 |
+
# 设置构建时变量
|
5 |
+
ARG REQUIREMENTS="requests yt-dlp"
|
6 |
+
ARG PACKAGES="n8n"
|
7 |
+
ARG WORKDIR=/app
|
8 |
+
ARG RCLONE_VERSION=latest
|
9 |
+
|
10 |
+
# 安装 Python3、venv 以及必要的系统工具
|
11 |
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
12 |
+
python3 \
|
13 |
+
python3-venv \
|
14 |
+
curl \
|
15 |
+
gnupg \
|
16 |
+
build-essential \
|
17 |
+
unzip \
|
18 |
+
&& npm install -g ${PACKAGES} \
|
19 |
+
&& apt-get clean \
|
20 |
+
&& rm -rf /var/lib/apt/lists/*
|
21 |
+
|
22 |
+
# 设置 Python 虚拟环境
|
23 |
+
ENV VIRTUAL_ENV=/opt/venv
|
24 |
+
RUN python3 -m venv $VIRTUAL_ENV \
|
25 |
+
&& $VIRTUAL_ENV/bin/pip install --no-cache-dir --upgrade pip \
|
26 |
+
&& $VIRTUAL_ENV/bin/pip install --no-cache-dir $REQUIREMENTS
|
27 |
+
|
28 |
+
# 下载并安装 rclone
|
29 |
+
RUN curl https://rclone.org/install.sh | bash
|
30 |
+
|
31 |
+
# 主运行阶段:基于 PostgreSQL 镜像
|
32 |
+
FROM postgres:15
|
33 |
+
|
34 |
+
# 设置构建时变量
|
35 |
+
ARG POSTGRES_USER=n8n
|
36 |
+
ARG POSTGRES_PASSWORD=n8n
|
37 |
+
ARG POSTGRES_DB=n8n
|
38 |
+
ARG WEBHOOK_URL=https://aigenai-db.hf.space/
|
39 |
+
ARG WORKDIR=/app
|
40 |
+
ARG DB_IMPORT=no
|
41 |
+
ARG NODEJS_VER=20
|
42 |
+
ARG PACKAGES=n8n
|
43 |
+
|
44 |
+
# 设置环境变量
|
45 |
+
ENV DB_IMPORT=no
|
46 |
+
ENV POSTGRES_USER=${POSTGRES_USER} \
|
47 |
+
POSTGRES_PASSWORD=${POSTGRES_PASSWORD} \
|
48 |
+
POSTGRES_DB=${POSTGRES_DB} \
|
49 |
+
WEBHOOK_URL=${WEBHOOK_URL} \
|
50 |
+
WORKDIR=${WORKDIR} \
|
51 |
+
DB_IMPORT=${DB_IMPORT} \
|
52 |
+
N8N_HOST=0.0.0.0 \
|
53 |
+
N8N_PORT=7860 \
|
54 |
+
N8N_PROTOCOL=https \
|
55 |
+
GENERIC_TIMEZONE=Asia/Shanghai \
|
56 |
+
N8N_METRICS=true \
|
57 |
+
QUEUE_HEALTH_CHECK_ACTIVE=true \
|
58 |
+
N8N_PAYLOAD_SIZE_MAX=256 \
|
59 |
+
DB_TYPE=postgresdb \
|
60 |
+
DB_POSTGRESDB_HOST=localhost \
|
61 |
+
DB_POSTGRESDB_PORT=5432 \
|
62 |
+
DB_POSTGRESDB_USER=${POSTGRES_USER} \
|
63 |
+
DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD} \
|
64 |
+
DB_POSTGRESDB_DATABASE=${POSTGRES_DB} \
|
65 |
+
VIRTUAL_ENV=/opt/venv \
|
66 |
+
PATH="$VIRTUAL_ENV/bin:/usr/local/lib/node_modules/n8n/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH"
|
67 |
+
|
68 |
+
# 复制构建阶段的 Node.js、n8n、Python 运行环境和 rclone
|
69 |
+
COPY --from=builder /usr/local/bin/node /usr/local/bin/
|
70 |
+
COPY --from=builder /usr/local/lib/node_modules /usr/local/lib/node_modules
|
71 |
+
COPY --from=builder $VIRTUAL_ENV $VIRTUAL_ENV
|
72 |
+
COPY --from=builder /usr/bin/rclone /usr/bin/rclone
|
73 |
+
|
74 |
+
# 安装必要的软件包并设置时区
|
75 |
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
76 |
+
curl \
|
77 |
+
unzip \
|
78 |
+
gnupg \
|
79 |
+
build-essential \
|
80 |
+
sudo \
|
81 |
+
vim \
|
82 |
+
git \
|
83 |
+
procps \
|
84 |
+
lsof \
|
85 |
+
net-tools \
|
86 |
+
ca-certificates \
|
87 |
+
openssl \
|
88 |
+
tzdata \
|
89 |
+
python3 \
|
90 |
+
htop \
|
91 |
+
jq \
|
92 |
+
wget \
|
93 |
+
gosu \
|
94 |
+
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
|
95 |
+
&& echo "Asia/Shanghai" > /etc/timezone \
|
96 |
+
&& apt-get clean \
|
97 |
+
&& rm -rf /var/lib/apt/lists/*
|
98 |
+
|
99 |
+
# 设置工作目录并复制启动脚本
|
100 |
+
WORKDIR ${WORKDIR}
|
101 |
+
COPY run.sh ${WORKDIR}/run.sh
|
102 |
+
COPY import-db.sh /docker-entrypoint-initdb.d/
|
103 |
+
RUN chmod +x ${WORKDIR}/run.sh /docker-entrypoint-initdb.d/import-db.sh
|
104 |
+
|
105 |
+
# 设置 POSTGRES_USER 的 UID 为 1000
|
106 |
+
RUN usermod -u 1000 ${POSTGRES_USER} \
|
107 |
+
&& groupmod -g 1000 ${POSTGRES_USER} \
|
108 |
+
&& chown -R ${POSTGRES_USER}:${POSTGRES_USER} /var/lib/postgresql \
|
109 |
+
&& chown -R ${POSTGRES_USER}:${POSTGRES_USER} /var/run/postgresql \
|
110 |
+
&& chown -R ${POSTGRES_USER}:${POSTGRES_USER} ${WORKDIR} \
|
111 |
+
&& mkdir -p ${WORKDIR}/backups \
|
112 |
+
&& chown -R ${POSTGRES_USER}:${POSTGRES_USER} ${WORKDIR}/backups \
|
113 |
+
&& chmod -R 775 ${WORKDIR}/backups
|
114 |
+
|
115 |
+
# 设置 POSTGRES_USER 的 shell 为 bash
|
116 |
+
RUN chsh -s /bin/bash ${POSTGRES_USER}
|
117 |
+
|
118 |
+
# 健康检查配置
|
119 |
+
HEALTHCHECK --interval=120s --timeout=10s --start-period=10s --retries=3 \
|
120 |
+
CMD curl -f http://localhost:7860/HEALTHZ || exit 1
|
121 |
+
|
122 |
+
# 暴露 n8n 端口
|
123 |
+
EXPOSE 7860
|
124 |
+
|
125 |
+
# 切换到 POSTGRES_USER
|
126 |
+
USER ${POSTGRES_USER}
|
127 |
+
|
128 |
+
# 启动容器时执行 run.sh 脚本
|
129 |
+
CMD ["./run.sh"]
|