Files
team-api/docs/deployment-docker.md
T

271 lines
5.9 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.
# Team-API Docker 部署指南
本文档介绍如何使用 Docker 部署 Team-API。
## 快速开始
### 一、准备配置文件
```bash
# 1. 进入 Docker 配置目录
cd manifest/docker
# 2. 复制配置模板
cp ../../manifest/config/config.example.yaml ./config.yaml
# 3. 编辑配置文件,修改数据库和 Redis 连接信息
vim config.yaml
```
**注意**:本配置不对外开放 PostgreSQL 和 Redis 端口,仅应用服务(18888 端口)对外暴露。如需外部访问数据库,请自行添加端口映射。
### 二、修改 docker-compose.yaml
编辑 `docker-compose.yaml` 文件,修改以下配置:
1. **数据库密码**(第 23 行):
```yaml
POSTGRES_PASSWORD: team_api_secret # 修改为强密码
```
2. **Redis 密码**(第 45 行):
```yaml
command: redis-server --appendonly yes --requirepass redis_secret # 修改为强密码
```
3. **管理员账号**(第 76-77 行,可选):
```yaml
INIT_ADMIN_USERNAME: admin # 修改为你的管理员用户名
INIT_ADMIN_PASSWORD: admin123 # 修改为你的管理员密码
```
### 三、修改 config.yaml
编辑 `config.yaml` 文件,确保数据库和 Redis 配置与 docker-compose.yaml 一致:
```yaml
database:
default:
type: "pgsql"
link: "pgsql:team_api:team_api_secret@tcp(postgres:5432)/team_api?sslmode=disable"
# ^用户名 ^密码 ^主机名:端口 ^数据库名
redis:
default:
address: "redis:6379" # 注意:主机名是 "redis" 而不是 localhost
pass: "redis_secret" # 密码需与 docker-compose.yaml 中设置的一致
db: 0
```
### 四、启动服务
```bash
# 构建并启动所有服务
docker compose up -d
# 查看日志
docker compose logs -f app
```
### 五、访问应用
启动成功后,可以访问:
- **管理后台**: http://localhost:18888/admin
- **租户控制台**: http://localhost:18888
- **API 文档**: http://localhost:18888/api/docs
## 配置说明
### docker-compose.yaml 配置项
| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| `POSTGRES_PASSWORD` | 数据库密码 | `team_api_secret` |
| `--requirepass` | Redis 密码 | `redis_secret` |
| `INIT_ADMIN_USERNAME` | 管理员用户名 | `admin` |
| `INIT_ADMIN_PASSWORD` | 管理员密码 | `admin123` |
### config.yaml 配置项
#### 数据库配置
```yaml
database:
default:
link: "pgsql:用户名:密码@tcp(主机名:端口)/数据库名?sslmode=disable"
```
**注意**:Docker 网络中,主机名使用服务名(`postgres`、`redis`),而不是 `localhost`。
#### Redis 配置
```yaml
redis:
default:
address: "redis:6379" # 主机名使用 "redis"
db: 0
```
#### JWT 密钥(重要)
```yaml
jwt:
secret: "change-me-to-a-random-secret" # 生产环境必须修改
```
## 服务说明
Docker Compose 包含以下服务:
| 服务 | 容器名 | 端口 | 说明 |
|------|--------|------|------|
| `postgres` | `team-api-postgres` | 5432 | PostgreSQL 数据库 |
| `redis` | `team-api-redis` | 6379 | Redis 缓存 |
| `app` | `team-api-app` | 18888 | Team-API 应用 |
## 常用命令
```bash
# 启动服务
docker compose up -d
# 停止服务
docker compose down
# 查看日志
docker compose logs -f
# 仅查看应用日志
docker compose logs -f app
# 重启服务
docker compose restart app
# 重新构建镜像
docker compose build --no-cache
docker compose up -d
# 查看服务状态
docker compose ps
```
## 数据持久化
以下数据通过 Docker 卷持久化:
| 卷名 | 用途 |
|------|------|
| `postgres_data` | 数据库数据 |
| `redis_data` | Redis 数据 |
| `app_logs` | 应用日志 |
## 清理数据
```bash
# 停止并删除容器、网络
docker compose down
# 删除数据卷(注意:会删除所有数据!)
docker volume rm team-api-postgres_data team-api-redis_data team-api-app_logs
```
## 生产环境建议
### 1. 修改默认密码
务必修改以下密码:
- `docker-compose.yaml` 中的 `POSTGRES_PASSWORD`
- `docker-compose.yaml` 中的 `INIT_ADMIN_PASSWORD`
- `config.yaml` 中的 `jwt.secret`
### 2. 使用外部数据库
对于生产环境,建议使用托管数据库服务。修改 `config.yaml` 中的数据库连接信息即可。
### 3. 配置 HTTPS
使用反向代理(如 Nginx)配置 HTTPS:
```nginx
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:18888;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# WebSocket 支持
location /api/admin/ws {
proxy_pass http://localhost:18888;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
```
## 故障排查
### 应用无法启动
1. 检查日志:`docker compose logs app`
2. 确认 `config.yaml` 已创建且配置正确
3. 确认数据库和 Redis 就绪:`docker compose ps`
### 数据库连接失败
1. 确认 `config.yaml` 中的密码与 `docker-compose.yaml` 中的 `POSTGRES_PASSWORD` 一致
2. 确认主机名使用的是 `postgres` 而非 `localhost`
3. 查看数据库日志:`docker compose logs postgres`
### 无法访问应用
1. 确认端口未被占用:`lsof -i :18888`
2. 检查防火墙设置
3. 验证容器状态:`docker compose ps`
## 更新应用
```bash
# 拉取最新代码
cd ../../
git pull
# 重新构建并启动
cd manifest/docker
docker compose build
docker compose up -d
```
## 使用 Make 快捷命令
```bash
# 构建镜像
make docker-build
# 启动服务
make docker-up
# 停止服务
make docker-down
# 查看日志
make docker-logs
# 重新构建
make docker-rebuild
# 清理数据
make docker-clean
```