showme commited on
Commit
19d857e
·
verified ·
1 Parent(s): d3aad6d

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +28 -17
Dockerfile CHANGED
@@ -1,12 +1,14 @@
1
  # 使用Node.js的Alpine Linux版本作为基础镜像
2
  FROM node:20-alpine AS base
 
 
3
  ENV PNPM_HOME="/pnpm"
4
  ENV PATH="$PNPM_HOME:$PATH"
5
 
6
- # 安装 OpenSSL
7
- RUN apt-get update && apt-get install -y \
8
- openssl=1.1.* \
9
- && rm -rf /var/lib/apt/lists/*
10
 
11
  # 安装最新版本的 npm
12
  RUN npm install -g npm@latest
@@ -22,34 +24,38 @@ FROM base AS build
22
  COPY --from=clone /usr/src/app /usr/src/app
23
  WORKDIR /usr/src/app
24
 
 
 
 
25
  # 修改文件权限
26
- RUN chown -R node:node /app/node_modules
27
 
28
  # 确保以 node 用户身份运行容器
29
  USER node
30
 
31
  # 设置正确的权限
32
- RUN chmod -R 777 /app/node_modules /app/.pnpm
33
 
34
- # 使用pnpm安装依赖,构建应用
35
  RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
36
  RUN pnpm run -r build
37
 
38
  # 部署命令调整为使用克隆的代码
39
- RUN pnpm deploy --filter=server --prod /app
40
- RUN pnpm deploy --filter=server --prod /app-sqlite
41
 
42
- # 生成Prisma客户端
43
- RUN cd /app && pnpm exec prisma generate
44
- RUN cd /app-sqlite && rm -rf ./prisma && mv prisma-sqlite prisma && pnpm exec prisma generate
45
 
46
- # 手动安装 Prisma
47
  RUN npm install prisma
48
  RUN npx prisma generate
49
 
50
-
51
- WORKDIR /app
52
  EXPOSE 4000
 
53
  # 环境变量设置
54
  ENV NODE_ENV=production
55
  ENV HOST="0.0.0.0"
@@ -58,14 +64,17 @@ ENV MAX_REQUEST_PER_MINUTE=200
58
  ENV AUTH_CODE=""
59
  ENV DATABASE_URL=""
60
  ENV CRON_EXPRESSION=""
 
 
61
  RUN chmod +x ./docker-bootstrap.sh
62
  CMD ["./docker-bootstrap.sh"]
63
 
64
  # 定义最终使用的app阶段
65
  FROM base AS app
66
- COPY --from=build /app /app
67
  WORKDIR /app
68
  EXPOSE 4000
 
69
  # 环境变量设置
70
  ENV NODE_ENV=production
71
  ENV HOST="0.0.0.0"
@@ -74,5 +83,7 @@ ENV MAX_REQUEST_PER_MINUTE=200
74
  ENV AUTH_CODE=""
75
  ENV DATABASE_URL=""
76
  ENV CRON_EXPRESSION="0 8 * * *"
 
 
77
  RUN chmod +x ./docker-bootstrap.sh
78
- CMD ["./docker-bootstrap.sh"]
 
1
  # 使用Node.js的Alpine Linux版本作为基础镜像
2
  FROM node:20-alpine AS base
3
+
4
+ # 设置 pnpm 环境变量
5
  ENV PNPM_HOME="/pnpm"
6
  ENV PATH="$PNPM_HOME:$PATH"
7
 
8
+ # 安装 OpenSSL 1.1.x (使用 apk 安装)
9
+ RUN apk update && apk add --no-cache \
10
+ openssl1.1 \
11
+ && rm -rf /var/cache/apk/*
12
 
13
  # 安装最新版本的 npm
14
  RUN npm install -g npm@latest
 
24
  COPY --from=clone /usr/src/app /usr/src/app
25
  WORKDIR /usr/src/app
26
 
27
+ # 安装 pnpm
28
+ RUN npm install -g pnpm
29
+
30
  # 修改文件权限
31
+ RUN chown -R node:node /usr/src/app/node_modules
32
 
33
  # 确保以 node 用户身份运行容器
34
  USER node
35
 
36
  # 设置正确的权限
37
+ RUN chmod -R 777 /usr/src/app/node_modules /usr/src/app/.pnpm
38
 
39
+ # 使用 pnpm 安装依赖,构建应用
40
  RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
41
  RUN pnpm run -r build
42
 
43
  # 部署命令调整为使用克隆的代码
44
+ RUN pnpm deploy --filter=server --prod /usr/src/app
45
+ RUN pnpm deploy --filter=server --prod /usr/src/app-sqlite
46
 
47
+ # 生成 Prisma 客户端
48
+ RUN cd /usr/src/app && pnpm exec prisma generate
49
+ RUN cd /usr/src/app-sqlite && rm -rf ./prisma && mv prisma-sqlite prisma && pnpm exec prisma generate
50
 
51
+ # 手动安装 Prisma(如果之前的 prisma generate 失败时用)
52
  RUN npm install prisma
53
  RUN npx prisma generate
54
 
55
+ # 设置工作目录
56
+ WORKDIR /usr/src/app
57
  EXPOSE 4000
58
+
59
  # 环境变量设置
60
  ENV NODE_ENV=production
61
  ENV HOST="0.0.0.0"
 
64
  ENV AUTH_CODE=""
65
  ENV DATABASE_URL=""
66
  ENV CRON_EXPRESSION=""
67
+
68
+ # 执行启动脚本
69
  RUN chmod +x ./docker-bootstrap.sh
70
  CMD ["./docker-bootstrap.sh"]
71
 
72
  # 定义最终使用的app阶段
73
  FROM base AS app
74
+ COPY --from=build /usr/src/app /app
75
  WORKDIR /app
76
  EXPOSE 4000
77
+
78
  # 环境变量设置
79
  ENV NODE_ENV=production
80
  ENV HOST="0.0.0.0"
 
83
  ENV AUTH_CODE=""
84
  ENV DATABASE_URL=""
85
  ENV CRON_EXPRESSION="0 8 * * *"
86
+
87
+ # 执行启动脚本
88
  RUN chmod +x ./docker-bootstrap.sh
89
+ CMD ["./docker-bootstrap.sh"]