# Docker 部署文档

本目录包含 CTF 系统的所有 Docker 相关配置文件。

## 📁 文件结构

```
docker/
├── Dockerfile              # Docker 镜像构建文件
├── docker-compose.yml      # Docker Compose 配置文件
└── README.md               # 本文档
```

注意：容器启动脚本已整合到根目录的 `deploy.sh` 中

## 🚀 快速开始

### 一键部署（推荐）

```bash
# 在项目根目录执行
chmod +x deploy.sh
./deploy.sh
```

部署脚本会自动：
1. 检查应用程序文件
2. 生成或使用现有的 `.env` 文件
3. 检查 Docker 环境
4. 构建镜像
5. 启动容器
6. 进行健康检查
7. **自动初始化数据库并创建管理员账户**

### 首次部署后

部署完成后，系统会自动创建管理员账户，默认登录信息：
- **用户名**: `admin`
- **邮箱**: `admin@example.com`
- **密码**: `admin123456`

⚠️ **重要**: 首次登录后请立即修改管理员密码！

## 📝 配置说明

### 环境变量

`deploy.sh` 脚本会自动生成 `.env` 文件（在项目根目录），包含以下配置：

#### 数据库配置
- `POSTGRES_PASSWORD`: PostgreSQL 数据库密码（自动生成）

#### Flask 配置
- `SECRET_KEY`: Flask 应用密钥（自动生成）
- `FLASK_ENV`: Flask 环境（production/development）
- `APP_PORT`: 应用端口（默认 5002）

#### 管理员账户配置
- `ADMIN_USERNAME`: 管理员用户名（默认 `admin`）
- `ADMIN_EMAIL`: 管理员邮箱（默认 `admin@example.com`）
- `ADMIN_PASSWORD`: 管理员密码（默认 `admin123456`）

#### 其他配置
- `AUTO_INIT_DB`: 是否自动初始化数据库（默认 `true`）
- `OPENAI_API_KEY`: OpenAI API 密钥（可选）
- `CPU_LIMIT`: CPU 限制（默认 2.0）
- `MEMORY_LIMIT`: 内存限制（默认 2G）

### 自定义配置

#### 方式一：首次部署前自定义（推荐）

在首次运行 `./deploy.sh` 之前，可以通过环境变量自定义管理员账户：

```bash
# 设置自定义管理员账户
export ADMIN_USERNAME="myadmin"
export ADMIN_EMAIL="admin@mydomain.com"
export ADMIN_PASSWORD="MySecurePassword123!"

# 然后执行部署
./deploy.sh
```

#### 方式二：修改 .env 文件后重新部署

编辑项目根目录的 `.env` 文件来自定义配置：

```bash
nano .env
```

修改以下配置：
```env
# 管理员账户配置
ADMIN_USERNAME=myadmin
ADMIN_EMAIL=admin@mydomain.com
ADMIN_PASSWORD=MySecurePassword123!
```

然后重新部署：
```bash
cd docker
docker-compose down
cd ..
./deploy.sh
```

## 🔧 常用命令

### 在项目根目录执行

```bash
# 一键部署
./deploy.sh

# 查看日志
cd docker && docker-compose logs -f ctf-app

# 停止服务
cd docker && docker-compose down

# 重启服务
cd docker && docker-compose restart

# 进入容器
docker exec -it ctf-app bash

# 查看资源使用
docker stats ctf-app
```

### 在 docker 目录内执行（高级用法）

```bash
cd docker

# 构建镜像
docker-compose build

# 启动服务
docker-compose up -d

# 查看日志
docker-compose logs -f ctf-app

# 停止服务
docker-compose down

# 重启服务
docker-compose restart
```

## 📊 服务信息

- **应用地址**: http://localhost:5002（或自定义端口）
- **容器名称**: ctf-app
- **数据卷**:
  - `postgres_data`: PostgreSQL 数据
  - `ctf_deployments`: 部署数据
  - `flask_session`: Flask 会话数据

## 🔍 健康检查

容器内置健康检查，可以通过以下命令查看：

```bash
docker inspect --format='{{.State.Health.Status}}' ctf-app
```

状态说明：
- `healthy`: 健康
- `unhealthy`: 不健康
- `starting`: 启动中
- `none`: 未配置

## 🛠️ 故障排查

### 查看容器日志

```bash
cd docker
docker-compose logs -f ctf-app
```

### 查看容器状态

```bash
docker ps -a | grep ctf-app
```

### 进入容器调试

```bash
docker exec -it ctf-app bash
```

### 重新构建镜像

```bash
cd docker
docker-compose build --no-cache
docker-compose up -d
```

## 📚 更多信息

- Docker Compose 文档: https://docs.docker.com/compose/
- Docker 文档: https://docs.docker.com/

## ⚠️ 注意事项

1. **数据持久化**: 所有数据存储在 Docker 卷中，删除容器不会丢失数据
2. **端口冲突**: 确保端口 5002（或自定义端口）未被占用
3. **权限问题**: 确保当前用户有 Docker 执行权限
4. **资源限制**: 根据服务器配置调整 `.env` 中的资源限制参数
5. **安全**: 生产环境请修改默认密码和密钥

