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"]