From 0bef29e1b5111cb7e23334861f59ec00c09f8d4e Mon Sep 17 00:00:00 2001 From: anygen-build-bot Date: Thu, 12 Feb 2026 09:12:35 +0000 Subject: [PATCH] chore(docker): add docker compose deployment --- Dockerfile.backend | 36 ++++++++++++++++++++++++++++++++++++ Dockerfile.frontend | 26 ++++++++++++++++++++++++++ docker-compose.yml | 26 ++++++++++++++++++++++++++ docs/Docker部署.md | 24 ++++++++++++++++++++++++ 4 files changed, 112 insertions(+) create mode 100644 Dockerfile.backend create mode 100644 Dockerfile.frontend create mode 100644 docker-compose.yml create mode 100644 docs/Docker部署.md diff --git a/Dockerfile.backend b/Dockerfile.backend new file mode 100644 index 0000000..62be7f1 --- /dev/null +++ b/Dockerfile.backend @@ -0,0 +1,36 @@ +# syntax=docker/dockerfile:1 + +FROM ubuntu:24.04 AS build + +RUN apt-get update -y && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + build-essential cmake ninja-build pkg-config \ + libdrogon-dev libjsoncpp-dev libyaml-cpp-dev libhiredis-dev \ + libpq-dev libmariadb-dev libmariadb-dev-compat \ + libsqlite3-dev sqlite3 \ + libssl-dev && \ + rm -rf /var/lib/apt/lists/* + +WORKDIR /src +COPY backend/ ./backend/ +COPY CMakeLists.txt ./ + +RUN cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release && \ + cmake --build build --target csp_server + + +FROM ubuntu:24.04 AS runtime + +RUN apt-get update -y && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + libdrogon1t64 libjsoncpp25 libyaml-cpp0.8 libhiredis1.1.0 \ + libpq5 libmariadb3 libsqlite3-0 libssl3t64 ca-certificates && \ + rm -rf /var/lib/apt/lists/* + +WORKDIR /app +COPY --from=build /src/build/backend/csp_server /app/csp_server + +EXPOSE 8080 + +# DB file mounted by compose at /data/csp.db +CMD ["/app/csp_server", "/data/csp.db"] diff --git a/Dockerfile.frontend b/Dockerfile.frontend new file mode 100644 index 0000000..c397138 --- /dev/null +++ b/Dockerfile.frontend @@ -0,0 +1,26 @@ +# syntax=docker/dockerfile:1 + +FROM node:24-alpine AS deps +WORKDIR /app +COPY frontend/package.json frontend/package-lock.json ./ +RUN npm ci + +FROM node:24-alpine AS build +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY frontend/ ./ +ENV NEXT_TELEMETRY_DISABLED=1 +RUN npm run build + +FROM node:24-alpine AS runtime +WORKDIR /app +ENV NODE_ENV=production +ENV NEXT_TELEMETRY_DISABLED=1 +COPY --from=build /app/package.json ./package.json +COPY --from=build /app/next.config.ts ./next.config.ts +COPY --from=build /app/public ./public +COPY --from=build /app/.next ./.next +COPY --from=build /app/node_modules ./node_modules + +EXPOSE 3000 +CMD ["npm", "run", "start"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c285c16 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,26 @@ +services: + backend: + build: + context: . + dockerfile: Dockerfile.backend + ports: + - "8080:8080" + volumes: + - csp_data:/data + restart: unless-stopped + + frontend: + build: + context: . + dockerfile: Dockerfile.frontend + environment: + # 前端调用后端API时使用;后续页面会读取该变量 + - NEXT_PUBLIC_API_BASE=http://localhost:8080 + ports: + - "3000:3000" + depends_on: + - backend + restart: unless-stopped + +volumes: + csp_data: diff --git a/docs/Docker部署.md b/docs/Docker部署.md new file mode 100644 index 0000000..a45c45b --- /dev/null +++ b/docs/Docker部署.md @@ -0,0 +1,24 @@ +# Docker Compose 部署 + +## 一键启动 + +```bash +docker compose up -d --build +``` + +## 访问 + +- 后端(健康检查):http://localhost:8080/api/health +- 后端(注册):`POST http://localhost:8080/api/v1/auth/register` +- 后端(登录):`POST http://localhost:8080/api/v1/auth/login` +- 前端:http://localhost:3000 + +## 数据持久化 + +- SQLite 数据库文件:compose volume `csp_data` -> 容器内 `/data/csp.db` + +## 停止 + +```bash +docker compose down +```