geo/docs/05-部署运维/docker.md

146 lines
2.6 KiB
Markdown
Raw Permalink 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.

# Docker部署
## 环境要求
| 组件 | 版本 |
|------|------|
| Docker | 24+ |
| Docker Compose | 2.0+ |
## 快速部署
### 1. 克隆项目
```bash
git clone http://8.153.107.96/fischer/geo.git
cd geo
```
### 2. 配置环境变量
```bash
cp .env.example .env
# 编辑.env配置必要参数
```
> **说明**Docker Compose 默认读取项目根目录下的 `.env` 文件加载环境变量。所有配置项均可通过 `.env` 文件统一管理,无需在 `docker-compose.yml` 中硬编码。
### 3. 启动服务
> **注意**:开发模式使用 `uvicorn --reload` 启动,支持热重载;生产环境必须移除 `--reload` 参数,使用 `uvicorn app.main:app --host 0.0.0.0 --port 8000` 启动。
```bash
# 开发环境
docker-compose up -d
# 生产环境
docker-compose -f docker-compose.prod.yml up -d
```
### 4. 验证服务
```bash
# 检查容器状态
docker-compose ps
# 查看日志
docker-compose logs -f
```
## 容器说明
| 容器名 | 说明 | 端口 |
|--------|------|------|
| geo-frontend | Next.js前端 | 3000 |
| geo-backend | FastAPI后端 | 8000 |
| geo-db | PostgreSQL数据库 | 5432 |
| geo-redis | Redis缓存 | 6379 |
| geo-worker | Celery worker | - |
| geo-nginx | 反向代理 | 80/443 |
## 数据持久化
通过Volume挂载确保容器重建后数据不丢失
```yaml
volumes:
postgres_data:/var/lib/postgresql/data
redis_data:/data
./uploads:/app/uploads
./logs:/app/logs
./backups:/app/backups
```
| 挂载路径 | 说明 |
|----------|------|
| `postgres_data` | PostgreSQL数据目录 |
| `redis_data` | Redis持久化数据 |
| `./uploads` | 用户上传文件 |
| `./logs` | 应用日志 |
| `./backups` | 数据库备份 |
## 健康检查
```bash
# 前端健康检查
curl http://localhost:3000/health
# 后端健康检查
curl http://localhost:8000/health
# 数据库健康检查
docker-compose exec db pg_isready
```
## 停止服务
```bash
# 停止服务(保留数据)
docker-compose stop
# 停止并删除容器
docker-compose down
# 停止并删除数据卷(危险!)
docker-compose down -v
```
## 生产环境优化
### 资源限制
```yaml
services:
backend:
deploy:
resources:
limits:
cpus: '2'
memory: 2G
reservations:
cpus: '0.5'
memory: 512M
```
### 日志管理
```yaml
services:
backend:
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "3"
```
### 定期备份
```bash
# 备份数据库
docker-compose exec -T db pg_dump -U postgres geo > backup.sql
# 恢复数据库
cat backup.sql | docker-compose exec -T db psql -U postgres geo
```