showme commited on
Commit
8132ec6
·
verified ·
1 Parent(s): af262ca

Update Dockerfile

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