mira-app-server 1.0.8 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.dockerignore CHANGED
@@ -1,16 +1,79 @@
1
+ # Node modules 和包管理器文件
1
2
  node_modules
2
- npm-debug.log
3
- test
4
- plugins
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn-integrity
8
+
9
+ # 构建输出(会在容器内重新构建)
5
10
  dist
6
- tools
7
- data
8
- *.tar
11
+ build
12
+
13
+ # 源码文件(除了src目录)
9
14
  *.ts
10
- !dist
11
- .idea
15
+ !src/**/*.ts
16
+
17
+ # 测试相关
18
+ test
19
+ coverage
20
+ .nyc_output
21
+
22
+ # 开发工具配置
12
23
  .vscode
24
+ .idea
25
+ *.swp
26
+ *.swo
27
+ *~
28
+
29
+ # Git相关
13
30
  .git
14
31
  .gitignore
32
+ .gitattributes
33
+
34
+ # 环境配置
35
+ .env
36
+ .env.local
37
+ .env.*.local
38
+
39
+ # 日志文件
40
+ logs
41
+ *.log
42
+
43
+ # 临时文件
44
+ .tmp
45
+ .temp
46
+ temp
47
+ *.tmp
48
+
49
+ # OS生成的文件
50
+ .DS_Store
51
+ .DS_Store?
52
+ ._*
53
+ .Spotlight-V100
54
+ .Trashes
55
+ ehthumbs.db
56
+ Thumbs.db
57
+
58
+ # Docker相关
59
+ Dockerfile*
60
+ docker-compose*
61
+ .dockerignore
62
+ *.tar
63
+
64
+ # 数据库文件
15
65
  *.db
16
- *.md
66
+ *.sqlite
67
+
68
+ # 文档
69
+ *.md
70
+ README*
71
+
72
+ # 脚本文件
73
+ *.bat
74
+ *.sh
75
+
76
+ # 其他项目目录(如果不需要)
77
+ tools
78
+ data
79
+ plugins
package/Dockerfile CHANGED
@@ -1,42 +1,79 @@
1
- # 使用Node.js官方镜像作为基础
2
- FROM node:20-alpine
1
+ # 多阶段构建 - 构建阶段
2
+ FROM node:20-alpine AS builder
3
3
 
4
- # 安装构建依赖(用于编译native modules如sqlite3)
4
+ # 安装构建依赖
5
5
  RUN apk add --no-cache \
6
6
  python3 \
7
7
  py3-setuptools \
8
8
  make \
9
9
  g++ \
10
- sqlite \
11
- sqlite-dev
10
+ sqlite-dev \
11
+ && rm -rf /var/cache/apk/*
12
+
13
+ # 设置环境变量
14
+ ENV SETUPTOOLS_USE_DISTUTILS=stdlib
12
15
 
13
16
  # 创建工作目录
14
17
  WORKDIR /app
15
18
 
16
- # 复制package.json和package-lock.json
19
+ # 复制package.json和package-lock.json(利用Docker缓存)
17
20
  COPY package*.json ./
18
21
 
19
- # 复制项目文件(需要在npm install之前复制,因为prepublish脚本会运行build)
20
- COPY . .
22
+ # 安装所有依赖(开发和生产)
23
+ RUN npm ci && npm cache clean --force
21
24
 
22
- # 设置环境变量修复distutils问题并安装依赖
23
- ENV SETUPTOOLS_USE_DISTUTILS=stdlib
25
+ # 复制源代码和配置文件
26
+ COPY src/ ./src/
27
+ COPY tsconfig.json ./
24
28
 
25
- # 清理现有的node_modules和package-lock.json(如果存在)
26
- RUN rm -rf node_modules package-lock.json
29
+ # 构建项目
30
+ RUN npm run build && \
31
+ # 删除开发依赖
32
+ npm prune --production && \
33
+ # 清理构建缓存
34
+ rm -rf /tmp/* /root/.npm
27
35
 
28
- # 先安装依赖
29
- RUN npm install
36
+ # 多阶段构建 - 运行阶段
37
+ FROM node:20-alpine AS runtime
30
38
 
31
- # 构建项目
32
- RUN npm run build
39
+ # 只安装运行时必需的系统依赖
40
+ RUN apk add --no-cache \
41
+ sqlite \
42
+ ffmpeg \
43
+ && rm -rf /var/cache/apk/*
44
+
45
+ # 设置环境变量
46
+ ENV NODE_ENV=production \
47
+ FFMPEG_PATH=/usr/bin/ffmpeg \
48
+ FFPROBE_PATH=/usr/bin/ffprobe
49
+
50
+ # 创建非root用户
51
+ RUN addgroup -g 1001 -S nodejs && \
52
+ adduser -S mira -u 1001
53
+
54
+ # 创建工作目录并设置权限
55
+ WORKDIR /app
56
+ RUN chown mira:nodejs /app
57
+
58
+ # 切换到非root用户
59
+ USER mira
60
+
61
+ # 复制package.json
62
+ COPY --chown=mira:nodejs package*.json ./
63
+
64
+ # 从构建阶段复制node_modules(只包含生产依赖)
65
+ COPY --from=builder --chown=mira:nodejs /app/node_modules ./node_modules
66
+
67
+ # 从构建阶段复制编译后的文件
68
+ COPY --from=builder --chown=mira:nodejs /app/dist ./dist
33
69
 
34
- # 清理构建依赖以减小镜像大小
35
- RUN apk del python3 make g++
70
+ # 健康检查(可选)
71
+ HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
72
+ CMD node -e "console.log('Health check')" || exit 1
36
73
 
37
74
  # 暴露端口
38
75
  EXPOSE 3000
39
76
  EXPOSE 8081
40
77
 
41
- # 启动命令(使用JSON格式)
42
- CMD ["npm", "start"]
78
+ # 启动命令
79
+ CMD ["node", "dist/index.js"]
@@ -0,0 +1,52 @@
1
+ # 极端优化版本 - 使用 distroless 镜像
2
+ # 这个版本会产生最小的镜像,但调试会更困难
3
+
4
+ # 构建阶段
5
+ FROM node:20-alpine AS builder
6
+
7
+ # 安装构建依赖
8
+ RUN apk add --no-cache \
9
+ python3 \
10
+ py3-setuptools \
11
+ make \
12
+ g++ \
13
+ sqlite-dev \
14
+ && rm -rf /var/cache/apk/*
15
+
16
+ ENV SETUPTOOLS_USE_DISTUTILS=stdlib
17
+
18
+ WORKDIR /app
19
+
20
+ # 复制并安装依赖
21
+ COPY package*.json ./
22
+ RUN npm ci && npm cache clean --force
23
+
24
+ # 复制源码并构建
25
+ COPY src/ ./src/
26
+ COPY tsconfig.json ./
27
+ RUN npm run build
28
+
29
+ # 只保留生产依赖
30
+ RUN npm prune --production && \
31
+ rm -rf /tmp/* /root/.npm
32
+
33
+ # 最终运行阶段 - 使用 distroless
34
+ FROM gcr.io/distroless/nodejs20-debian12:latest
35
+
36
+ # 设置环境变量
37
+ ENV NODE_ENV=production
38
+
39
+ # 创建工作目录
40
+ WORKDIR /app
41
+
42
+ # 从构建阶段复制必要文件
43
+ COPY --from=builder /app/node_modules ./node_modules
44
+ COPY --from=builder /app/dist ./dist
45
+ COPY --from=builder /app/package.json ./package.json
46
+
47
+ # 暴露端口
48
+ EXPOSE 3000
49
+ EXPOSE 8081
50
+
51
+ # 启动命令(distroless 不支持shell,所以直接使用node)
52
+ CMD ["dist/index.js"]
@@ -0,0 +1,64 @@
1
+ @echo off
2
+ setlocal enabledelayedexpansion
3
+
4
+ REM Docker 镜像优化构建脚本 (Windows版本)
5
+ REM 使用该脚本来构建更小的 Docker 镜像
6
+
7
+ set IMAGE_NAME=mira-server
8
+ set TAG=latest
9
+
10
+ echo 🔨 开始构建优化的 Docker 镜像...
11
+
12
+ REM 先检查网络连接
13
+ echo 🔍 检查 Docker Hub 连接...
14
+ docker pull hello-world:latest > nul 2>&1
15
+ if !errorlevel! neq 0 (
16
+ echo ⚠️ Docker Hub 连接有问题,将使用备用方案
17
+ set USE_CN_MIRROR=1
18
+ ) else (
19
+ echo ✅ Docker Hub 连接正常
20
+ set USE_CN_MIRROR=0
21
+ )
22
+
23
+ echo.
24
+ if !USE_CN_MIRROR! equ 1 (
25
+ echo 🇨🇳 使用国内镜像源构建...
26
+ docker build -f Dockerfile.distroless-cn -t "%IMAGE_NAME%:%TAG%" .
27
+ ) else (
28
+ echo 🌍 使用标准镜像构建...
29
+ docker build --no-cache --compress -t "%IMAGE_NAME%:%TAG%" .
30
+ )
31
+
32
+ if !errorlevel! neq 0 (
33
+ echo ❌ 构建失败!
34
+ echo.
35
+ echo 🔧 故障排除建议:
36
+ echo 1. 运行 docker-network-check.bat 检查网络
37
+ echo 2. 尝试使用: docker build -f Dockerfile.distroless-cn -t %IMAGE_NAME%:%TAG% .
38
+ echo 3. 或配置 Docker 镜像加速器
39
+ pause
40
+ exit /b 1
41
+ )
42
+
43
+ echo.
44
+ echo 📊 镜像大小统计:
45
+ docker images "%IMAGE_NAME%:%TAG%" --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
46
+
47
+ echo.
48
+ echo 🔍 镜像层分析:
49
+ docker history "%IMAGE_NAME%:%TAG%" --human --format "table {{.CreatedBy}}\t{{.Size}}"
50
+
51
+ echo.
52
+ echo ✅ 构建完成!
53
+
54
+ REM 可选:移除悬挂镜像以清理空间
55
+ echo.
56
+ echo 🧹 清理悬挂镜像...
57
+ docker image prune -f
58
+
59
+ echo.
60
+ echo 💡 提示:
61
+ echo - 使用 'docker run -p 3000:3000 -p 8081:8081 %IMAGE_NAME%:%TAG%' 运行容器
62
+ echo - 使用 'docker scout cves %IMAGE_NAME%:%TAG%' 检查安全漏洞(如果安装了 Docker Scout)
63
+
64
+ pause
@@ -0,0 +1,36 @@
1
+ #!/bin/bash
2
+
3
+ # Docker 镜像优化构建脚本
4
+ # 使用该脚本来构建更小的 Docker 镜像
5
+
6
+ set -e
7
+
8
+ # 镜像名称
9
+ IMAGE_NAME="mira-server"
10
+ TAG="latest"
11
+
12
+ echo "🔨 开始构建优化的 Docker 镜像..."
13
+
14
+ # 构建镜像
15
+ docker build \
16
+ --no-cache \
17
+ --compress \
18
+ --squash \
19
+ -t "${IMAGE_NAME}:${TAG}" \
20
+ .
21
+
22
+ echo "📊 镜像大小统计:"
23
+ docker images "${IMAGE_NAME}:${TAG}" --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
24
+
25
+ echo "🔍 镜像层分析:"
26
+ docker history "${IMAGE_NAME}:${TAG}" --human --format "table {{.CreatedBy}}\t{{.Size}}"
27
+
28
+ echo "✅ 构建完成!"
29
+
30
+ # 可选:移除悬挂镜像以清理空间
31
+ echo "🧹 清理悬挂镜像..."
32
+ docker image prune -f
33
+
34
+ echo "💡 提示:"
35
+ echo "- 使用 'docker run -p 3000:3000 -p 8081:8081 ${IMAGE_NAME}:${TAG}' 运行容器"
36
+ echo "- 使用 'docker scout cves ${IMAGE_NAME}:${TAG}' 检查安全漏洞(如果安装了 Docker Scout)"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mira-app-server",
3
- "version": "1.0.8",
3
+ "version": "1.0.9",
4
4
  "description": "Mira Server - standalone server application using mira-core",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -30,6 +30,6 @@
30
30
  "typescript": "^5.3.3"
31
31
  },
32
32
  "dependencies": {
33
- "mira-app-core": "^1.0.8"
33
+ "mira-app-core": "^1.0.12"
34
34
  }
35
35
  }