StarrySkyWorld commited on
Commit
f61e2c3
·
verified ·
1 Parent(s): 5ffb2f3

Create Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +74 -0
Dockerfile ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 构建阶段
2
+ FROM node:18-alpine AS builder
3
+
4
+ # 设置工作目录
5
+ WORKDIR /app
6
+
7
+ # 安装构建依赖(包括Python和make,某些npm包需要)
8
+ RUN apk add --no-cache python3 git make g++
9
+ RUN git clone https://github.com/Starry-Sky-World/jimeng-api.git .
10
+
11
+ # 复制package文件以优化Docker层缓存
12
+ COPY package.json package-lock.json ./
13
+
14
+ # 安装所有依赖(包括devDependencies)
15
+ RUN npm ci --registry https://registry.npmmirror.com/
16
+
17
+ # 复制源代码
18
+ COPY . .
19
+
20
+ # 接收版本号参数并更新 package.json
21
+ ARG VERSION
22
+ RUN if [ -n "$VERSION" ]; then \
23
+ echo "Updating package.json version to $VERSION"; \
24
+ sed -i "s/\"version\": \"[^\"]*\"/\"version\": \"$VERSION\"/" package.json; \
25
+ cat package.json | grep version; \
26
+ fi
27
+
28
+ # 构建应用
29
+ RUN npm run build
30
+
31
+ # 生产阶段
32
+ FROM node:18-alpine AS production
33
+
34
+ # 安装健康检查工具
35
+ RUN apk add --no-cache wget
36
+
37
+ # 创建非root用户
38
+ RUN addgroup -g 1001 -S nodejs && \
39
+ adduser -S jimeng -u 1001
40
+
41
+ # 设置工作目录
42
+ WORKDIR /app
43
+
44
+ # 复制 package.json(使用构建阶段已更新版本)与 package-lock.json
45
+ COPY --from=builder /app/package.json ./package.json
46
+ COPY --from=builder /app/package-lock.json ./package-lock.json
47
+
48
+ # 只安装生产依赖
49
+ RUN npm ci --omit=dev --registry https://registry.npmmirror.com/ && \
50
+ npm cache clean --force
51
+
52
+ # 从构建阶段复制构建产物
53
+ COPY --from=builder --chown=jimeng:nodejs /app/dist ./dist
54
+ COPY --from=builder --chown=jimeng:nodejs /app/configs ./configs
55
+
56
+ # 创建应用需要的目录并设置权限
57
+ RUN mkdir -p /app/logs /app/tmp && \
58
+ chown -R jimeng:nodejs /app/logs /app/tmp
59
+
60
+ # 设置环境变量
61
+ ENV SERVER_PORT=5100
62
+
63
+ # 切换到非root用户
64
+ USER jimeng
65
+
66
+ # 暴露端口
67
+ EXPOSE 5100
68
+
69
+ # 健康检查
70
+ HEALTHCHECK --interval=15s --timeout=5s --start-period=20s --retries=3 \
71
+ CMD wget -q --spider http://localhost:5100/ping
72
+
73
+ # 启动应用
74
+ CMD ["npm", "start"]