# Docker镜像构建说明

## 概述

本目录包含了Laravel知识库系统的Docker化配置文件，支持构建适用于OpenEuler服务器的amd64架构镜像。

## 文件结构

```
docker/
├── build.sh                    # 镜像构建脚本
├── php/
│   └── php.ini                 # PHP配置
├── supervisor/
│   └── supervisord.conf       # Supervisor配置
├── mysql/
│   └── my.cnf                 # MySQL配置
├── redis/
│   └── redis.conf             # Redis配置
└── README.md                  # 本文件
```

## 镜像特性

- **基础环境**: PHP 8.2-cli + Alpine Linux
- **Web服务器**: Swoole (通过 Laravel Octane)
- **架构**: linux/amd64 (OpenEuler兼容)
- **文档转换**: Pandoc
- **进程管理**: Supervisor
- **优化**: 多阶段构建，最小化镜像大小

## 构建镜像

### 方法1: 使用构建脚本（推荐）

```bash
# 在项目根目录执行
./docker/build.sh
```

### 方法2: 手动构建

```bash
# 在项目根目录执行
docker build --platform linux/amd64 -t knowledge-base-app:latest .
```

## 运行容器

### 单独运行（测试用）

```bash
docker run -d \
  --name knowledge-base \
  -p 8000:8000 \
  -e APP_ENV=production \
  -e APP_KEY=your-app-key \
  knowledge-base-app:latest
```

### 使用docker-compose（推荐）

请参考项目根目录的docker-compose.yml文件。

## 环境变量

主要环境变量配置：

- `APP_ENV`: 应用环境 (production/local)
- `APP_KEY`: Laravel应用密钥
- `DB_HOST`: 数据库主机
- `DB_DATABASE`: 数据库名称
- `DB_USERNAME`: 数据库用户名
- `DB_PASSWORD`: 数据库密码
- `REDIS_HOST`: Redis主机
- `MEILISEARCH_HOST`: Meilisearch主机

## 健康检查

镜像内置健康检查端点：

- HTTP检查: `http://localhost/health`
- PHP-FPM检查: `http://localhost/ping`

## 日志

日志文件位置：

- Swoole访问日志: `/var/log/supervisor/swoole_stdout.log`
- Swoole错误日志: `/var/log/supervisor/swoole_stderr.log`
- PHP错误日志: `/var/log/php_errors.log`
- Supervisor日志: `/var/log/supervisor/`

## 故障排除

### 构建失败

1. 检查Docker是否运行
2. 确保网络连接正常（需要下载依赖）
3. 检查磁盘空间是否充足

### 容器启动失败

1. 检查环境变量配置
2. 查看容器日志: `docker logs <container-name>`
3. 检查端口是否被占用

### 权限问题

确保storage和bootstrap/cache目录有正确的写权限。

## 镜像导出和导入

### 导出镜像

```bash
docker save knowledge-base-app:latest | gzip > knowledge-base-app.tar.gz
```

### 导入镜像

```bash
gunzip -c knowledge-base-app.tar.gz | docker load
```

## 安全注意事项

1. 生产环境请使用HTTPS
2. 定期更新基础镜像
3. 使用非root用户运行应用
4. 配置适当的防火墙规则