mira-app-server 1.0.7 → 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 +72 -9
- package/Dockerfile +57 -20
- package/Dockerfile.distroless +52 -0
- package/docker-build-optimized.bat +64 -0
- package/docker-build-optimized.sh +36 -0
- package/package.json +4 -4
package/.dockerignore
CHANGED
|
@@ -1,16 +1,79 @@
|
|
|
1
|
+
# Node modules 和包管理器文件
|
|
1
2
|
node_modules
|
|
2
|
-
npm-debug.log
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
npm-debug.log*
|
|
4
|
+
yarn-debug.log*
|
|
5
|
+
yarn-error.log*
|
|
6
|
+
.npm
|
|
7
|
+
.yarn-integrity
|
|
8
|
+
|
|
9
|
+
# 构建输出(会在容器内重新构建)
|
|
5
10
|
dist
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
11
|
+
build
|
|
12
|
+
|
|
13
|
+
# 源码文件(除了src目录)
|
|
9
14
|
*.ts
|
|
10
|
-
!
|
|
11
|
-
|
|
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
|
-
*.
|
|
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
|
-
#
|
|
2
|
-
FROM node:20-alpine
|
|
1
|
+
# 多阶段构建 - 构建阶段
|
|
2
|
+
FROM node:20-alpine AS builder
|
|
3
3
|
|
|
4
|
-
#
|
|
4
|
+
# 安装构建依赖
|
|
5
5
|
RUN apk add --no-cache \
|
|
6
6
|
python3 \
|
|
7
7
|
py3-setuptools \
|
|
8
8
|
make \
|
|
9
9
|
g++ \
|
|
10
|
-
sqlite \
|
|
11
|
-
|
|
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
|
-
#
|
|
20
|
-
|
|
22
|
+
# 安装所有依赖(开发和生产)
|
|
23
|
+
RUN npm ci && npm cache clean --force
|
|
21
24
|
|
|
22
|
-
#
|
|
23
|
-
|
|
25
|
+
# 复制源代码和配置文件
|
|
26
|
+
COPY src/ ./src/
|
|
27
|
+
COPY tsconfig.json ./
|
|
24
28
|
|
|
25
|
-
#
|
|
26
|
-
RUN
|
|
29
|
+
# 构建项目
|
|
30
|
+
RUN npm run build && \
|
|
31
|
+
# 删除开发依赖
|
|
32
|
+
npm prune --production && \
|
|
33
|
+
# 清理构建缓存
|
|
34
|
+
rm -rf /tmp/* /root/.npm
|
|
27
35
|
|
|
28
|
-
#
|
|
29
|
-
|
|
36
|
+
# 多阶段构建 - 运行阶段
|
|
37
|
+
FROM node:20-alpine AS runtime
|
|
30
38
|
|
|
31
|
-
#
|
|
32
|
-
RUN
|
|
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
|
-
|
|
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
|
-
# 启动命令
|
|
42
|
-
CMD ["
|
|
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.
|
|
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",
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"build": "tsc",
|
|
12
12
|
"rebuild": "npm install && npm run build",
|
|
13
13
|
"start": "node dist/index.js",
|
|
14
|
-
"start:ts": "ts-node src/index.ts",
|
|
15
|
-
"dev": "ts-node src/index.ts",
|
|
14
|
+
"start:ts": "node --inspect -r ts-node/register src/index.ts",
|
|
15
|
+
"dev": "node --inspect -r ts-node/register src/index.ts",
|
|
16
16
|
"cli": "ts-node src/cli.ts",
|
|
17
17
|
"prepublish": "npm run build"
|
|
18
18
|
},
|
|
@@ -30,6 +30,6 @@
|
|
|
30
30
|
"typescript": "^5.3.3"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"mira-app-core": "^1.0.
|
|
33
|
+
"mira-app-core": "^1.0.12"
|
|
34
34
|
}
|
|
35
35
|
}
|