hijnu commited on
Commit
b3e4b70
·
verified ·
1 Parent(s): 22ec144

Update Dockerfile

Browse files
Files changed (1) hide show
  1. 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"]