zyd123 commited on
Commit
7e4a3d9
·
verified ·
1 Parent(s): 60cf6ca

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +71 -22
Dockerfile CHANGED
@@ -1,36 +1,85 @@
1
- # 使用 blinkospace/blinko:latest 作为基础镜像
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  FROM blinkospace/blinko:latest
3
 
 
 
 
4
  # --- 关键: 确定运行应用的用户和组 ---
5
- # 你需要知道应用最终将以哪个用户/组运行。
6
- # 如果你不知道,一个常见的默认值可能是 'node' 用户,或者你需要在基础镜像文档中查找,
7
- # 或者在容器运行时通过 `whoami` 和 `id` 查看。
8
- # 假设是 'node':'node' (这是一个常见的 Node.js 镜像用户,请根据实际情况修改!)
9
  ARG APP_USER=node
10
  ARG APP_GROUP=node
11
- # 如果你的基础镜像没有这个用户/组,或者应用以 root 运行且你不想改,
12
- # 你可以暂时跳过 chown,或者如果以 root 运行,chown 不是必需的,但链接仍需创建。
 
 
 
 
 
 
 
 
 
 
 
13
 
14
- # --- 创建符号链接 ---
15
- # 1. 在可写位置 (/tmp) 创建目标目录
16
- # 2. (可选但推荐) 确保运行应用的用户拥有该目录权限
17
- # 3. 创建从 /app/.blinko 指向目标目录的符号链接
18
  RUN mkdir -p /tmp/.blinko && \
19
  chown ${APP_USER}:${APP_GROUP} /tmp/.blinko && \
20
- ln -s /tmp/.blinko /app/.blinko
 
21
 
22
- # 声明容器将监听 1111 端口 (来自你的日志)
23
  EXPOSE 1111
24
 
25
- # --- (可选) 如果基础镜像以 root 运行,但你想以非 root 用户运行 ---
26
  # USER ${APP_USER}
27
 
28
- # --- 确保你有启动应用的命令 ---
29
- # 这个命令需要与 blinkospace/blinko:latest 镜像的默认启动方式一致
30
- # 或者覆盖它。根据你的日志,它似乎是启动一个 Next.js 应用。
31
- # 你可能需要保留基础镜像的 CMD 或 ENTRYPOINT,或者提供你自己的。
32
- # 例如 (只是猜测,你需要确认!):
33
  CMD ["node", ".next/standalone/server.js"]
34
- # 或者如果它有 package.json 脚本:
35
- # CMD ["npm", "run", "start"]
36
- # 或者保留基础镜像的默认命令 (如果它设置了的话)
 
1
+ # --- Stage 1: Builder ---
2
+ # 使用一个包含 Node.js 和构建工具的基础镜像
3
+ # 选择一个与你项目兼容的 Node.js 版本 (例如: 18, 20)
4
+ FROM node:20-alpine AS builder
5
+
6
+ # 设置工作目录
7
+ WORKDIR /app
8
+
9
+ # 复制 package.json 和 lock 文件
10
+ COPY package*.json ./
11
+ # 如果使用 yarn 或 pnpm,复制相应的文件 (yarn.lock, pnpm-lock.yaml)
12
+ # COPY yarn.lock ./
13
+ # COPY pnpm-lock.yaml ./
14
+
15
+ # 安装依赖项 (生产环境依赖和开发依赖,因为需要构建)
16
+ # 使用 'ci' 或 '--frozen-lockfile' 来确保一致性
17
+ RUN npm ci
18
+ # 或者: RUN yarn install --frozen-lockfile
19
+ # 或者: RUN pnpm install --frozen-lockfile
20
+
21
+ # 复制 Prisma schema
22
+ # 假设你的 prisma 目录在项目根目录下
23
+ COPY prisma ./prisma/
24
+
25
+ # (可选但推荐) 生成 Prisma Client - Next.js build 可能也会触发这个
26
+ RUN npx prisma generate
27
+
28
+ # 复制所有源代码到构建阶段
29
+ COPY . .
30
+
31
+ # 构建 Next.js 应用
32
+ # 确保你的 next.config.js 中设置了 output: 'standalone'
33
+ # 例如:
34
+ # const nextConfig = {
35
+ # output: 'standalone',
36
+ # // ...其他配置
37
+ # };
38
+ RUN npm run build
39
+ # 或者: RUN yarn build
40
+ # 或者: RUN pnpm build
41
+
42
+
43
+ # --- Stage 2: Runner ---
44
+ # 使用你指定的 blinkospace/blinko:latest 镜像作为最终运行环境
45
+ # 假设这个镜像提供了 Node.js 运行时和其他必要的环境
46
  FROM blinkospace/blinko:latest
47
 
48
+ # 设置工作目录 (确保与启动命令中的路径一致)
49
+ WORKDIR /app
50
+
51
  # --- 关键: 确定运行应用的用户和组 ---
52
+ # 检查 blinkospace/blinko:latest 是否设置了默认用户。
53
+ # 如果没有,或者你想指定,可以设置。假设是 'node':'node' (常见,需确认!)
 
 
54
  ARG APP_USER=node
55
  ARG APP_GROUP=node
56
+ # 如果 blinko 镜像没有 node 用户/组,你可能需要选择它提供的用户,
57
+ # 或者在上面 builder 阶段之后,这里添加 RUN groupadd... useradd...
58
+ # 如果应用必须以 root 运行 (不推荐),则 chown 可能不需要,但链接仍需创建
59
+
60
+ # 从 builder 阶段复制构建产物
61
+ # 1. Standalone server and dependencies
62
+ COPY --from=builder /app/.next/standalone ./
63
+ # 2. Static assets
64
+ COPY --from=builder /app/.next/static ./.next/static
65
+ # 3. Public assets
66
+ COPY --from=builder /app/public ./public
67
+ # 4. Prisma schema and migrations (可能运行时需要,例如检查或应用迁移)
68
+ COPY --from=builder /app/prisma ./prisma/
69
 
70
+ # --- 创建符号链接以解决 .blinko 权限问题 ---
71
+ # /app/.blinko 指向 /tmp/.blinko (临时存储)
 
 
72
  RUN mkdir -p /tmp/.blinko && \
73
  chown ${APP_USER}:${APP_GROUP} /tmp/.blinko && \
74
+ ln -s /tmp/.blinko ./.blinko
75
+ # 注意: 这里使用了相对路径 ./.blinko 因为 WORKDIR 是 /app
76
 
77
+ # 暴露应用程序端口
78
  EXPOSE 1111
79
 
80
+ # (可选) 设置运行用户 (如果不想用 root)
81
  # USER ${APP_USER}
82
 
83
+ # 设置容器启动时执行的命令
84
+ # 这应该匹配 Next.js standalone 模式的入口点
 
 
 
85
  CMD ["node", ".next/standalone/server.js"]