Files
wordcloud/DOCKER.md
T
2026-07-04 02:40:45 +08:00

185 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# WordCloud — Docker Compose 部署指南
本项目提供完整的 Docker Compose 配置,可在任意 Ubuntu / Linux 服务器上通过 `docker-compose up` 一键启动前后端服务。
---
## 1. 目录结构
```
wordcloud/
├── docker-compose.yml # 编排 frontend + backend
├── Makefile # 常用命令封装
├── frontend/
│ ├── Dockerfile # Node 构建 + Nginx 服务
│ ├── nginx.conf # 静态资源 + /api 反向代理
│ └── .dockerignore
└── backend/
├── Dockerfile # Python + C++ 扩展构建
├── requirements.txt
└── .dockerignore
```
---
## 2. 环境要求
- Docker Engine >= 20.10
- Docker Compose >= 1.29(或 `docker compose` plugin
- 服务器开放端口:`3000`(前端)、`8000`(后端,可选暴露)
---
## 3. 快速开始
### 3.1 克隆/上传代码到 Ubuntu 服务器
```bash
cd /opt
# 方式 Agit clone
git clone <你的仓库地址> wordcloud
cd wordcloud
# 方式 B:直接上传整个项目目录后进入
cd /path/to/wordcloud
```
### 3.2 构建并启动
```bash
# 使用 Makefile(推荐)
make build
make up
# 或者直接使用 docker-compose
docker-compose up -d --build
```
首次构建会:
1. 后端:安装 Python 依赖并编译 `EfficientWordCloud` C++ 扩展。
2. 前端:执行 `npm ci``npm run build`,生成静态文件。
根据服务器性能,首次构建通常需要 3–10 分钟。
### 3.3 访问服务
- 前端页面:http://`<服务器IP>`:3000
- 后端 API 文档:http://`<服务器IP>`:8000/docs
- 后端健康检查:http://`<服务器IP>`:8000/api/health
> 前端 Nginx 已将所有 `/api/*` 请求反向代理到后端容器,因此浏览器只需访问 3000 端口。
---
## 4. 常用命令
| 命令 | 说明 |
|------|------|
| `make build` | 重新构建镜像 |
| `make up` | 后台启动服务 |
| `make down` | 停止并移除容器 |
| `make restart` | 重启服务 |
| `make logs` | 查看实时日志 |
| `make logs-backend` | 只看后端日志 |
| `make logs-frontend` | 只看前端日志 |
| `make clean` | 停止并删除容器 + 镜像 + 卷(谨慎) |
| `make shell-backend` | 进入后端容器调试 |
---
## 5. 数据持久化
Docker Compose 已声明以下命名卷,数据会保存在 Docker 宿主机上,容器重建不会丢失:
| 卷名 | 容器内路径 | 用途 |
|------|-----------|------|
| `wordcloud_workspace` | `/app/service_workspace` | 词云任务工作目录 |
| `wordcloud_assets` | `/app/service_assets` | 贴纸资源文件 |
| `wordcloud_projects` | `/app/service_projects` | 保存的项目 |
| `wordcloud_design_templates` | `/app/service_design_templates` | 设计模板 |
| `wordcloud_fonts` | `/app/service_fonts` | 上传的字体文件 |
如需查看本地卷位置:
```bash
docker volume inspect wordcloud_workspace
```
---
## 6. 端口与网络
- `frontend` 容器监听 `3000:80`
- `backend` 容器监听 `8000:8000`
- 两个服务通过默认 Docker bridge 网络通信,`frontend` 的 Nginx 通过服务名 `backend:8000` 访问后端。
如需修改端口,编辑 `docker-compose.yml` 中的 `ports` 映射即可,例如将前端改为 `8080:80`
---
## 7. 生产环境建议
1. **使用反向代理(Nginx / Caddy / Traefik**
-`3000` 端口通过域名 + HTTPS 暴露。
- 关闭后端 `8000` 端口的外部访问,仅保留内部通信。
2. **设置环境变量**
- 后端 `UVICORN_WORKERS`:可通过环境变量增加工作进程数。
- 如需自定义后端日志级别,可挂载 `.env` 文件。
3. **备份数据卷**
- 定期备份 `wordcloud_assets``wordcloud_projects` 等卷,避免服务器故障丢失用户数据。
4. **更新部署**
```bash
git pull
make build
make restart
```
---
## 8. 常见问题
### Q1: 前端页面空白或 502
检查后端是否健康:
```bash
make logs-backend
```
确认 `/api/health` 返回 `{"status":"ok"}`。
### Q2: 构建 C++ 扩展失败
确保 base 镜像能联网安装 `build-essential` 与 `g++`。如在中国大陆服务器,可配置 Docker 镜像加速。
### Q3: 贴纸/字体上传后丢失
检查卷是否正确挂载:
```bash
docker exec -it wordcloud-backend ls -la /app/service_assets
```
### Q4: 端口被占用
修改 `docker-compose.yml` 中的端口映射,例如:
```yaml
ports:
- "8080:80"
```
---
## 9. 本地开发(非 Docker
如需本地开发,可分别运行:
```bash
# 后端
cd backend
./start-dev.sh
# 前端
cd frontend
npm install
npm run dev
```
本地开发时前端通过 Vite 代理 `/api` 到 `http://localhost:8000`。