# PHP Docker 开发环境

一个完整的PHP开发环境，包含多版本PHP、数据库、缓存等服务。

## 服务列表

| 服务 | 端口 | 版本 | 说明 |
|------|------|------|------|
| Nginx | 80 | latest | Web服务器 |
| PHP 7.1 | 9000 | 7.1 | PHP-FPM |
| PHP 7.4 | 9000 | 7.4 | PHP-FPM |
| PHP 8.3 | 9000 | 8.3 | PHP-FPM |
| MySQL | 3306 | 5.7 | 数据库 |
| MySQL8 | 3306 | 8.0 | 数据库 |
| Redis | 6379 | latest | 缓存 |
| Python | 8000 | latest | Python环境 |
| Node.js | - | latest | Node.js环境 |

## 快速开始

### 1. 环境变量配置
创建 `.env` 文件并设置以下变量：
```bash
LOCAL_CODE_ROOT=/path/to/your/code  # 本地代码目录
PROJECT_PATH=/path/to/your/project  # 项目路径
```

### 2. 启动服务

**普通环境：**
```bash
docker-compose up -d
```

**WSL环境：**
```bash
docker-compose -f docker-compose.yml -f docker-compose.wsl.yml up -d
```

### 3. 验证服务
```bash
docker-compose ps
```

## 使用说明

### Nginx配置
- 配置文件位置：`./nginx/conf.d/`
- 参考示例：`./nginx/conf.d/example.conf`
- 网站根目录：`/var/www/http`

### PHP版本切换
在Nginx配置中修改 `fastcgi_pass` 参数：
- PHP 7.1：`fastcgi_pass php71:9000;`
- PHP 7.4：`fastcgi_pass php74:9000;`
- PHP 8.3：`fastcgi_pass php83:9000;`

### 数据库连接
- **MySQL 5.7**：`mysql:3306`，用户名/密码：`root/root`
- **MySQL 8.0**：`mysql8:3306`，用户名/密码：`root/root`
- **Redis**：`redis:6379`

### 常用命令

**查看日志：**
```bash
docker-compose logs -f [服务名]
```

**进入容器：**
```bash
docker exec -it [容器名] bash
```

**重启服务：**
```bash
docker-compose restart [服务名]
```

**停止所有服务：**
```bash
docker-compose down
```

## 故障排除

### Laravel权限问题
如果遇到Laravel日志文件权限错误，执行以下步骤：

1. **重新构建PHP容器**（已配置用户ID匹配）：
```bash
docker-compose build php83
docker-compose up -d php83
```

2. **设置Laravel目录权限**：
```bash
# 进入PHP容器
docker exec -it php83 bash

# 设置storage和cache目录权限
chown -R www-data:www-data /var/www/mono-be/storage
chown -R www-data:www-data /var/www/mono-be/bootstrap/cache
chmod -R 775 /var/www/mono-be/storage
chmod -R 775 /var/www/mono-be/bootstrap/cache
```

3. **或者在宿主机直接设置**：
```bash
# 在WSL中执行
sudo chown -R 1000:1000 /path/to/mono-be/storage
sudo chown -R 1000:1000 /path/to/mono-be/bootstrap/cache
chmod -R 775 /path/to/mono-be/storage
chmod -R 775 /path/to/mono-be/bootstrap/cache
```

## 注意事项

1. 确保本地80、3306、6379端口未被占用
2. WSL环境需要额外的挂载配置
3. Xdebug已预配置，端口9003
4. 日志文件保存在 `./log/` 目录
