-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathDockerfile
More file actions
108 lines (89 loc) · 3.53 KB
/
Dockerfile
File metadata and controls
108 lines (89 loc) · 3.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# 后端构建
FROM node:18-alpine as backend-builder
WORKDIR /app/backend
COPY backend/package*.json ./
RUN npm install
# 先复制非 custom 目录的文件
COPY backend/src ./src
COPY backend/components ./components
COPY backend/data ./data
COPY backend/tsconfig.json .
# 再复制需要的 custom 文件
COPY backend/custom/helper/font/江湖风古体.ttf ./custom/helper/font/
COPY backend/custom/helper/font/马赛克MC风.ttf ./custom/helper/font/
COPY backend/custom/helper/font/猫啃圆珠体.ttf ./custom/helper/font/
COPY backend/custom/helper/maxkb/logo.gif ./custom/helper/maxkb/
RUN npm run build
# 前端构建
FROM node:18-alpine as frontend-builder
WORKDIR /app/frontend
COPY frontend/package*.json ./
RUN npm install
COPY frontend .
# 设置生产环境变量
RUN echo "VITE_API_URL=/" > .env.production
RUN npm run build -- --mode production
# 添加调试命令
RUN echo "=== 编译后的文件 ===" && \
ls -la dist && \
echo "=== 检查 vendor 文件 ===" && \
cat dist/assets/vendor-*.js | grep -i "localhost" || true && \
echo "=== 检查 index 文件 ===" && \
cat dist/assets/index-*.js | grep -i "localhost" || true
# 生产环境 - 锁定 Alpine 版本以避免 QEMU 兼容性问题
FROM nginx:1.26-alpine3.19
WORKDIR /app
# 更换 Alpine 镜像源为国内源(解决网络问题)
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 复制前端构建产物
COPY --from=frontend-builder /app/frontend/dist/ /usr/share/nginx/html/
# 设置前端静态文件权限,确保 nginx 用户可以访问
RUN chmod -R 644 /usr/share/nginx/html/* \
&& chmod 755 /usr/share/nginx/html \
&& chmod 755 /usr/share/nginx/html/assets
# 复制后端文件
COPY --from=backend-builder /app/backend/dist/ ./backend/
COPY --from=backend-builder /app/backend/components/ ./backend/components/
COPY --from=backend-builder /app/backend/data/ ./backend/data/
COPY --from=backend-builder /app/backend/package*.json ./backend/
# 创建 custom 目录结构
RUN mkdir -p /app/backend/custom/helper && \
cd /app/backend/custom/helper && \
mkdir -p font freewidgets logo maxkb md mouse weather-widget && \
touch /app/backend/custom/index.css && \
touch /app/backend/custom/index.js && \
chmod -R 777 /app/backend/custom
# 确保挂载点有正确权限
RUN mkdir -p /app/backend/custom && \
chmod 777 /app/backend/custom && \
# 设置 umask 确保新文件有正确权限
echo "umask 000" >> /etc/profile
# 创建临时资源目录
RUN mkdir -p /app/resources/maxkb \
&& mkdir -p /app/resources/font
# 复制资源文件到临时目录
COPY backend/custom/helper/maxkb/logo.gif /app/resources/maxkb/
COPY backend/custom/helper/font/江湖风古体.ttf /app/resources/font/
COPY backend/custom/helper/font/马赛克MC风.ttf /app/resources/font/
COPY backend/custom/helper/font/猫啃圆珠体.ttf /app/resources/font/
# 设置权限
RUN chmod -R 777 /app/backend/custom
# 确保 data 目录存在并初始化用户数据
RUN mkdir -p /app/backend/data \
&& echo '[]' > /app/backend/data/users.json \
&& chmod -R 777 /app/backend/data
# 创建备份目录并设置权限
RUN mkdir -p /app/backend/backups \
&& chmod -R 777 /app/backend/backups
# 安装 Node.js
RUN apk add --no-cache nodejs npm
# 安装后端生产依赖
WORKDIR /app/backend
RUN npm install --production
# 复制 nginx 配置
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 启动脚本
COPY docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
EXPOSE ${FRONTEND_PORT:-80}
ENTRYPOINT ["/docker-entrypoint.sh"]