jolbbb commited on
Commit
cf6756e
·
verified ·
1 Parent(s): c32484b

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +47 -67
Dockerfile CHANGED
@@ -1,10 +1,10 @@
1
- # 使用 Python 和 Node.js 作为基础镜像
2
  FROM nikolaik/python-nodejs:python3.12-nodejs20
3
 
4
  # 添加维护者信息
5
  LABEL maintainer="ai来事 <https://www.youtube.com/@all.ai.>"
6
 
7
- ARG CACHEBUST=99
8
 
9
  # 设置构建参数,提供默认值
10
  ARG WEBHOOK_URL=https://你的hf账户名-空间名.hf.space/
@@ -32,7 +32,7 @@ ENV WEBHOOK_URL=${WEBHOOK_URL} \
32
  # 添加日志级别
33
  N8N_LOG_LEVEL=info
34
 
35
- # 第1步:安装所有系统层面的依赖
36
  RUN apt-get update && apt-get install -y --no-install-recommends \
37
  curl \
38
  unzip \
@@ -51,68 +51,51 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
51
  jq \
52
  netcat-openbsd \
53
  redis-server \
54
- bash \
55
- # 清理apt缓存,减小镜像体积
56
- && apt-get clean && rm -rf /var/lib/apt/lists/*
57
-
58
- # 第2步:安装 Node.js
59
- RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
60
- && apt-get install -y --no-install-recommends nodejs
61
-
62
- # 第3步:配置时区
63
- RUN ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
64
- && dpkg-reconfigure --frontend noninteractive tzdata
65
-
66
- # 第4步:下载并安装 Qdrant
67
- RUN cd /tmp \
68
- && curl -L "https://github.com/qdrant/qdrant/releases/download/v${QDRANT_VERSION}/qdrant-x86_64-unknown-linux-gnu.tar.gz" -o qdrant.tar.gz \
69
  && tar xvf qdrant.tar.gz \
70
  && mv qdrant /usr/local/bin/ \
71
- && rm qdrant.tar.gz
72
-
73
- # 第5步:创建并设置 Qdrant 数据目录的权限
74
- RUN mkdir -p /home/pn/.n8n/qdrant \
 
75
  && chown -R pn:pn /home/pn/.n8n/qdrant \
76
- && chmod -R 755 /home/pn/.n8n/qdrant
77
-
78
- # 第6步:创建 Python 虚拟环境并安装依赖
79
- RUN python3 -m venv $VIRTUAL_ENV \
80
- && $VIRTUAL_ENV/bin/pip install --no-cache-dir --upgrade pip requests yt-dlp
81
-
82
- # --- 优化点: n8n 主程序和社区节点分开安装 ---
83
-
84
- # 第7步:全局安装 n8n 主程序和 pnpm
85
- RUN npm install -g n8n@latest pnpm
86
-
87
- # 第8步:在指定的自定义目录中安装社区节点 (使用 pnpm 安装)
88
- ARG N8N_CUSTOM_EXTENSIONS_DIR=/home/pn/.n8n/custom-nodes
89
- RUN mkdir -p ${N8N_CUSTOM_EXTENSIONS_DIR} \
90
- && pnpm add --dir ${N8N_CUSTOM_EXTENSIONS_DIR} n8n-nodes-link-preview n8n-nodes-scrapegraphai \
91
- && chown -R pn:pn ${N8N_CUSTOM_EXTENSIONS_DIR}
92
-
93
- # 第9步 (最终修复):创建名为 "config" n8n 配置文件
94
- RUN echo '{"nodes.allowUnsupported": true, "nodes.custom.path": "/home/pn/.n8n/custom-nodes"}' > /home/pn/.n8n/config \
95
- && chown pn:pn /home/pn/.n8n/config
96
-
97
- # 第10步 (新增):创建自包含的启动脚本
98
- RUN echo '#!/bin/bash' > /home/pn/entrypoint.sh && \
99
- echo 'set -e' >> /home/pn/entrypoint.sh && \
100
- echo 'echo "--- Starting services via entrypoint.sh ---"' >> /home/pn/entrypoint.sh && \
101
- echo 'echo "--- Received arguments: $@ ---"' >> /home/pn/entrypoint.sh && \
102
- echo '# Start services in the background' >> /home/pn/entrypoint.sh && \
103
- echo 'redis-server --daemonize yes' >> /home/pn/entrypoint.sh && \
104
- echo 'qdrant &' >> /home/pn/entrypoint.sh && \
105
- echo '# Wait a moment for services to initialize' >> /home/pn/entrypoint.sh && \
106
- echo 'sleep 5' >> /home/pn/entrypoint.sh && \
107
- echo '# Set database variables from platform secrets' >> /home/pn/entrypoint.sh && \
108
- echo 'export DB_POSTGRESDB_HOST="${POSTGRESDB_HOST}"' >> /home/pn/entrypoint.sh && \
109
- echo 'export DB_POSTGRESDB_USER="${POSTGRES_USER}"' >> /home/pn/entrypoint.sh && \
110
- echo 'export DB_POSTGRESDB_PASSWORD="${POSTGRES_PASSWORD}"' >> /home/pn/entrypoint.sh && \
111
- echo 'export DB_POSTGRESDB_DATABASE="${POSTGRES_DB}"' >> /home/pn/entrypoint.sh && \
112
- echo '# Start n8n in the foreground, ignoring any arguments from the platform' >> /home/pn/entrypoint.sh && \
113
- echo 'echo "--- Starting n8n process (ignoring arguments) ---"' >> /home/pn/entrypoint.sh && \
114
- echo 'exec n8n' >> /home/pn/entrypoint.sh && \
115
- chmod +x /home/pn/entrypoint.sh
116
 
117
  # 暴露端口
118
  EXPOSE 7860
@@ -120,11 +103,8 @@ EXPOSE 7860
120
  # 切换到非 root 用户
121
  USER pn
122
 
123
- # 设置工作目录
124
- WORKDIR /home/pn
125
-
126
  # 设置数据卷
127
  VOLUME ["/home/pn/.n8n"]
128
 
129
- # 启动命令 (最终修复)
130
- ENTRYPOINT ["/home/pn/entrypoint.sh"]
 
1
+ # 使用 PostgreSQL 作为基础镜像
2
  FROM nikolaik/python-nodejs:python3.12-nodejs20
3
 
4
  # 添加维护者信息
5
  LABEL maintainer="ai来事 <https://www.youtube.com/@all.ai.>"
6
 
7
+ ARG CACHEBUST=222
8
 
9
  # 设置构建参数,提供默认值
10
  ARG WEBHOOK_URL=https://你的hf账户名-空间名.hf.space/
 
32
  # 添加日志级别
33
  N8N_LOG_LEVEL=info
34
 
35
+ # 安装系统依赖
36
  RUN apt-get update && apt-get install -y --no-install-recommends \
37
  curl \
38
  unzip \
 
51
  jq \
52
  netcat-openbsd \
53
  redis-server \
54
+ && ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
55
+ && dpkg-reconfigure --frontend noninteractive tzdata \
56
+ # 下载并安装预编译的 Qdrant
57
+ && cd /tmp \
58
+ && curl -L https://github.com/qdrant/qdrant/releases/download/v${QDRANT_VERSION}/qdrant-x86_64-unknown-linux-gnu.tar.gz -o qdrant.tar.gz \
 
 
 
 
 
 
 
 
 
 
59
  && tar xvf qdrant.tar.gz \
60
  && mv qdrant /usr/local/bin/ \
61
+ && rm qdrant.tar.gz \
62
+ # 创建 Qdrant 配置目录和数据目录
63
+ && mkdir -p /home/pn/.n8n/qdrant/storage \
64
+ && mkdir -p /home/pn/.n8n/qdrant/config \
65
+ && mkdir -p /home/pn/.n8n/qdrant/snapshots \
66
  && chown -R pn:pn /home/pn/.n8n/qdrant \
67
+ && chmod -R 755 /home/pn/.n8n/qdrant \
68
+ # 清理
69
+ && apt-get clean \
70
+ && rm -rf /var/lib/apt/lists/* \
71
+ # 创建虚拟环境并安装 Python 依赖
72
+ && python3 -m venv $VIRTUAL_ENV \
73
+ && $VIRTUAL_ENV/bin/pip install --no-cache-dir --upgrade pip requests yt-dlp \
74
+ # 安装 n8n
75
+ && npm install -g n8n@latest pnpm \
76
+ && npm cache clean --force
77
+
78
+ # 创建环境变量文件
79
+ RUN --mount=type=secret,id=POSTGRES_USER,mode=0444,required=true \
80
+ --mount=type=secret,id=POSTGRES_PASSWORD,mode=0444,required=true \
81
+ --mount=type=secret,id=POSTGRES_DB,mode=0444,required=true \
82
+ --mount=type=secret,id=POSTGRESDB_HOST,mode=0444,required=true \
83
+ echo "export DB_POSTGRESDB_HOST=$(cat /run/secrets/POSTGRESDB_HOST)" >> /home/pn/.env && \
84
+ echo "export DB_POSTGRESDB_USER=$(cat /run/secrets/POSTGRES_USER)" >> /home/pn/.env && \
85
+ echo "export DB_POSTGRESDB_PASSWORD=$(cat /run/secrets/POSTGRES_PASSWORD)" >> /home/pn/.env && \
86
+ echo "export DB_POSTGRESDB_DATABASE=$(cat /run/secrets/POSTGRES_DB)" >> /home/pn/.env && \
87
+ chown pn:pn /home/pn/.env
88
+
89
+ # 创建工作目录
90
+ WORKDIR /home/pn/n8n
91
+
92
+ # 复制启动脚本并创建数据目录
93
+ COPY --chown=pn:pn run.sh ./run.sh
94
+ COPY --chown=pn:pn config/n8n_env.sh ./config/n8n_env.sh
95
+ RUN chmod +x ./run.sh \
96
+ && mkdir -p /home/pn/.n8n \
97
+ && chown -R pn:pn /home/pn/.n8n \
98
+ && chown -R pn:pn /home/pn/n8n
 
 
 
 
 
 
 
 
99
 
100
  # 暴露端口
101
  EXPOSE 7860
 
103
  # 切换到非 root 用户
104
  USER pn
105
 
 
 
 
106
  # 设置数据卷
107
  VOLUME ["/home/pn/.n8n"]
108
 
109
+ # 启动命令
110
+ CMD ["./run.sh"]