showme commited on
Commit
061fc27
·
verified ·
1 Parent(s): cecff81

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +45 -37
Dockerfile CHANGED
@@ -1,52 +1,60 @@
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
- # 创建构建和运行的基础环境
18
  FROM base AS build
 
19
  WORKDIR /usr/src/app
20
 
21
- # 克隆 Git 仓库
22
- RUN git clone https://github.com/ShowMeTheMoney2023/top.git .
23
-
24
- # 安装 pnpm
25
- RUN npm install -g pnpm
26
-
27
- # 创建必要的目录
28
- RUN mkdir -p /usr/src/app/node_modules /usr/src/app/.pnpm /usr/src/app/apps/server/dist
29
-
30
- # 设置目录权限
31
- RUN chown -R node:node /usr/src/app/node_modules /usr/src/app/.pnpm /usr/src/app/apps/server/dist
32
- RUN chmod -R 777 /usr/src/app/node_modules /usr/src/app/.pnpm /usr/src/app/apps/server/dist
33
-
34
- # 安装依赖
35
  RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
 
36
 
37
- # 确保以 node 用户身份执行
38
- USER node
 
39
 
40
- # 构建应用
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
- # 设置工作目录
48
- WORKDIR /usr/src/app
49
  EXPOSE 4000
50
-
51
- # 启动命令
52
- CMD ["node", "server.js"] # 假设启动命令为 node server.js
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ # 全局安装pnpm
7
+ RUN npm i -g pnpm
 
 
 
8
 
9
+ # 创建一个新的构建阶段,克隆GitHub仓库
10
+ FROM base AS clone
11
+ WORKDIR /usr/src/app
12
+ RUN apk add --no-cache git
13
+ RUN git clone https://github.com/ShowMeTheMoney2023/top.git .
14
 
15
+ # 构建应用
16
  FROM base AS build
17
+ COPY --from=clone /usr/src/app /usr/src/app
18
  WORKDIR /usr/src/app
19
 
20
+ # 使用pnpm安装依赖,构建应用
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
22
+ RUN pnpm run -r build
23
 
24
+ # 部署命令调整为使用克隆的代码
25
+ RUN pnpm deploy --filter=server --prod /app
26
+ RUN pnpm deploy --filter=server --prod /app-sqlite
27
 
28
+ # 生成Prisma客户端
29
+ RUN cd /app && pnpm exec prisma generate
30
+ RUN cd /app-sqlite && rm -rf ./prisma && mv prisma-sqlite prisma && pnpm exec prisma generate
31
 
 
 
 
32
 
33
+ WORKDIR /app
 
34
  EXPOSE 4000
35
+ # 环境变量设置
36
+ ENV NODE_ENV=production
37
+ ENV HOST="0.0.0.0"
38
+ ENV SERVER_ORIGIN_URL=""
39
+ ENV MAX_REQUEST_PER_MINUTE=200
40
+ ENV AUTH_CODE=""
41
+ ENV DATABASE_URL=""
42
+ ENV CRON_EXPRESSION=""
43
+ RUN chmod +x ./docker-bootstrap.sh
44
+ CMD ["./docker-bootstrap.sh"]
45
+
46
+ # 定义最终使用的app阶段
47
+ FROM base AS app
48
+ COPY --from=build /app /app
49
+ WORKDIR /app
50
+ EXPOSE 4000
51
+ # 环境变量设置
52
+ ENV NODE_ENV=production
53
+ ENV HOST="0.0.0.0"
54
+ ENV SERVER_ORIGIN_URL=""
55
+ ENV MAX_REQUEST_PER_MINUTE=200
56
+ ENV AUTH_CODE=""
57
+ ENV DATABASE_URL=""
58
+ ENV CRON_EXPRESSION="0 8 * * *"
59
+ RUN chmod +x ./docker-bootstrap.sh
60
+ CMD ["./docker-bootstrap.sh"]