Skip to content

Commit 7817fe5

Browse files
committed
合并dockerfile
1 parent 46c62ca commit 7817fe5

12 files changed

Lines changed: 442 additions & 103 deletions

File tree

.dockerignore

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
# Maven / Native 本地产物体积较大,构建时应始终重新生成。
99
**/target
1010

11-
# 前端源码与当前 Native 服务镜像构建无关,排除后可减少上传上下文。
12-
yunyu-web
11+
# 前端 node_modules 无需进入构建上下文,pnpm install 在容器内重新执行。
12+
yunyu-web/node_modules
13+
yunyu-web/.nuxt
14+
yunyu-web/.output
1315

1416
# 文档、数据库目录和本地部署文件不参与镜像构建。
1517
docs

docker-compose.yml

Lines changed: 0 additions & 49 deletions
This file was deleted.

docker/.env.example

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# 环境变量配置示例,复制为 .env 后按需修改
2+
# cp docker/.env.example .env
3+
4+
# ── 数据库 ─────────────────────────────────────────
5+
MYSQL_DATABASE=yunyu
6+
MYSQL_USER=yunyu
7+
MYSQL_PASSWORD=请替换成强密码
8+
MYSQL_ROOT_PASSWORD=请替换成强密码
9+
MYSQL_PORT=3306
10+
11+
# ── 后端 ──────────────────────────────────────────
12+
YUNYU_SERVER_NATIVE_IMAGE=ghcr.io/idea-flow/yunyu-server-native:latest
13+
# 64 位随机字符串,可用:openssl rand -hex 32
14+
YUNYU_JWT_SECRET=请替换成64位随机字符串
15+
SERVER_PORT=20000
16+
SPRING_PROFILES_ACTIVE=prod,native
17+
18+
# ── 前端(仅 docker-compose.yml 全局模式使用)──────
19+
YUNYU_WEB_IMAGE=ghcr.io/idea-flow/yunyu-web:latest
20+
# 前端访问后端的地址,通常为后端域名
21+
YUNYU_PUBLIC_API_BASE=https://api.你的域名
22+
WEB_PORT=3000
23+
24+
# ── 通用 ──────────────────────────────────────────
25+
TZ=Asia/Shanghai
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# 仅后端启动文件:Native 后端 + MySQL
2+
# 适用场景:前端部署在 Cloudflare Pages、Vercel 等平台,只需在服务器启动后端
3+
# 执行方式:cd Yunyu && docker compose -f docker/docker-compose-server.yml up -d
4+
15
services:
26
yunyu-mysql:
37
image: mysql:8.4
@@ -40,7 +44,7 @@ services:
4044
YUNYU_JWT_SECRET: ${YUNYU_JWT_SECRET:-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef}
4145
TZ: ${TZ:-Asia/Shanghai}
4246
ports:
43-
- "${SERVER_PORT:-20001}:20000"
47+
- "${SERVER_PORT:-20000}:20000"
4448
networks:
4549
- yunyu-network
4650

docker/docker-compose.yml

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# 全局启动文件:前端(Nuxt SSR)+ Native 后端 + MySQL
2+
# 执行方式:cd Yunyu && docker compose -f docker/docker-compose.yml up -d
3+
# 前端部署在服务器时使用此文件;若前端部署在 Cloudflare Pages 等平台,请改用 docker-compose-server.yml
4+
15
services:
26
yunyu-mysql:
37
image: mysql:8.4
@@ -15,7 +19,7 @@ services:
1519
ports:
1620
- "${MYSQL_PORT:-3306}:3306"
1721
volumes:
18-
- ./yunyu_mysql_data:/var/lib/mysql
22+
- ../yunyu_mysql_data:/var/lib/mysql
1923
networks:
2024
- yunyu-network
2125
healthcheck:
@@ -25,15 +29,15 @@ services:
2529
retries: 10
2630
start_period: 30s
2731

28-
yunyu-server:
29-
image: ${YUNYU_SERVER_IMAGE:-ghcr.io/idea-flow/yunyu-server:latest}
30-
container_name: yunyu-server
32+
yunyu-server-native:
33+
image: ${YUNYU_SERVER_NATIVE_IMAGE:-ghcr.io/idea-flow/yunyu-server-native:latest}
34+
container_name: yunyu-server-native
3135
restart: unless-stopped
3236
depends_on:
3337
yunyu-mysql:
3438
condition: service_healthy
3539
environment:
36-
SPRING_PROFILES_ACTIVE: prod
40+
SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE:-prod,native}
3741
SPRING_DATASOURCE_URL: jdbc:mysql://yunyu-mysql:3306/${MYSQL_DATABASE:-yunyu}?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
3842
SPRING_DATASOURCE_USERNAME: ${MYSQL_USER:-yunyu}
3943
SPRING_DATASOURCE_PASSWORD: ${MYSQL_PASSWORD:-yunyu123456}
@@ -44,6 +48,21 @@ services:
4448
networks:
4549
- yunyu-network
4650

51+
yunyu-web:
52+
image: ${YUNYU_WEB_IMAGE:-ghcr.io/idea-flow/yunyu-web:latest}
53+
container_name: yunyu-web
54+
restart: unless-stopped
55+
depends_on:
56+
- yunyu-server-native
57+
environment:
58+
# 容器内前端访问后端使用容器名,对外暴露的域名通过反向代理配置
59+
NUXT_PUBLIC_API_BASE: ${YUNYU_PUBLIC_API_BASE:-http://yunyu-server-native:20000}
60+
TZ: ${TZ:-Asia/Shanghai}
61+
ports:
62+
- "${WEB_PORT:-3000}:3000"
63+
networks:
64+
- yunyu-network
65+
4766
networks:
4867
yunyu-network:
4968
name: yunyu-network

docker/frontend/Dockerfile

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# syntax=docker/dockerfile:1.7
2+
3+
# 构建阶段:安装依赖并构建 Nuxt 4 SSR 应用。
4+
# 构建上下文为项目根目录,通过 COPY yunyu-web/ 引入前端源码。
5+
FROM node:22-alpine AS builder
6+
7+
WORKDIR /app
8+
9+
# 启用 pnpm
10+
RUN corepack enable && corepack prepare pnpm@latest --activate
11+
12+
# 先复制依赖描述文件,利用 Docker 层缓存加速重复构建。
13+
COPY yunyu-web/package.json yunyu-web/pnpm-lock.yaml ./
14+
15+
RUN --mount=type=cache,target=/root/.pnpm-store \
16+
pnpm install --frozen-lockfile
17+
18+
# 复制全部前端源码并构建。
19+
COPY yunyu-web/ ./
20+
21+
RUN pnpm build
22+
23+
# 运行阶段:只保留 Nuxt 构建产物 .output,减小镜像体积。
24+
FROM node:22-alpine AS runtime
25+
26+
WORKDIR /app
27+
28+
COPY --from=builder /app/.output ./
29+
30+
ENV NODE_ENV=production
31+
ENV PORT=3000
32+
33+
EXPOSE 3000
34+
35+
# 启动 Nuxt SSR 服务。
36+
CMD ["node", "server/index.mjs"]

docker/native-image/docker-compose-one.yml

Lines changed: 0 additions & 23 deletions
This file was deleted.

docker/native-image/info.md

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)