# 使用官方Node.js运行时作为基础镜像 FROM node:18-alpine # 安装PostgreSQL和相关工具 RUN apk add --no-cache \ postgresql \ postgresql-contrib \ postgresql-client \ su-exec \ bash \ curl # 设置工作目录 WORKDIR /app # 复制package.json和package-lock.json(如果存在) COPY package*.json ./ # 安装依赖 RUN npm ci --only=production # 复制应用源代码 COPY . . # 创建必要的目录 RUN mkdir -p /app/config /var/lib/postgresql/data /app/scripts # 复制数据库初始化脚本 COPY init-db.sql /app/scripts/ COPY docker-entrypoint.sh /app/scripts/ RUN chmod +x /app/scripts/docker-entrypoint.sh # 暴露端口 EXPOSE 8080 # 设置环境变量 ENV NODE_ENV=production ENV PORT=8080 ENV CONFIG_PATH=/app/config # 数据库配置环境变量 ENV USE_EMBEDDED_DB=true ENV DB_HOST=localhost ENV DB_PORT=5432 ENV DB_NAME=vhd_select ENV DB_USER=vhd_user ENV DB_PASSWORD=vhd_password ENV POSTGRES_DATA_DIR=/var/lib/postgresql/data # 创建postgres用户和nodejs用户 RUN addgroup -S postgres || true && \ adduser -S -D -H -h /var/lib/postgresql -s /bin/sh -G postgres postgres || true && \ addgroup -S nodejs || true && \ adduser -S nodejs -G nodejs || true # 创建PostgreSQL数据目录和运行时目录并设置权限 RUN mkdir -p /var/lib/postgresql/data /run/postgresql && \ chown -R postgres:postgres /var/lib/postgresql /run/postgresql && \ chmod 700 /var/lib/postgresql/data # 更改应用文件所有权 RUN chown -R nodejs:nodejs /app # 启动脚本 CMD ["/app/scripts/docker-entrypoint.sh"]