common-nginx-fpm/README.md
Caijinglong e28c0de955
feat: common-nginx-fpm-alpine
Signed-off-by: Caijinglong <cjl_spy@163.com>
2025-06-25 09:35:17 +08:00

167 lines
3.8 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.

# Common Nginx + PHP-FPM Docker Image
这是一个通用的 Nginx + PHP-FPM Docker 镜像,支持外部配置文件覆盖。
## 🔒 安全版本说明
提供两个版本供选择:
### Alpine版本 (推荐生产环境)
- **镜像标签**: `common-nginx-fpm-alpine`
- **基础镜像**: `php:8.4-fpm-alpine`
- **安全状态**: ✅ 0个高危漏洞
- **镜像大小**: ~754MB
- **推荐用途**: 生产环境、安全要求高的场景
### Debian版本 (开发环境可选)
- **镜像标签**: `common-nginx-fpm`
- **基础镜像**: `php:8.4-fpm`
- **安全状态**: ⚠️ 152个高危漏洞
- **镜像大小**: ~569MB
- **推荐用途**: 开发环境、需要glibc兼容性的场景
> 📋 详细安全对比请查看 [SECURITY_REPORT.md](SECURITY_REPORT.md)
## 特性
- 基于官方 PHP 8.4 FPM 镜像
- 集成 Nginx 作为 Web 服务器
- 支持 PHP 文件动态处理和静态资源服务
- 预装常用 PHP 扩展PDO MySQL, PDO PostgreSQL, PostgreSQL, MySQLi, OPcache
- 支持外部配置文件覆盖
- 使用 Supervisor 管理进程
- 包含健康检查端点
## 快速开始
### 构建镜像
```bash
# 构建Alpine版本 (推荐)
docker build -t common-nginx-fpm-alpine .
# 构建Debian版本 (需要修改Dockerfile第一行)
# 将 FROM php:8.4-fpm-alpine 改为 FROM php:8.4-fpm
docker build -t common-nginx-fpm .
```
### 运行容器
```bash
# Alpine版本 - 基本运行
docker run -d -p 80:80 common-nginx-fpm-alpine
# Alpine版本 - 挂载代码目录
docker run -d -p 80:80 -v /path/to/your/code:/var/www/html common-nginx-fpm-alpine
# Alpine版本 - 安全运行 (推荐生产环境)
docker run -d -p 80:80 \
--name web-app \
--read-only \
--tmpfs /tmp \
--tmpfs /var/run \
--memory=512m \
--cpus=1.0 \
-v /path/to/your/code:/var/www/html:ro \
-v /path/to/custom/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /path/to/custom/php.ini:/usr/local/etc/php/conf.d/custom.ini:ro \
common-nginx-fpm-alpine
# Debian版本 - 基本运行
docker run -d -p 80:80 common-nginx-fpm
```
## 配置覆盖
### Nginx 配置
- 默认配置:`/etc/nginx/nginx.conf`
- 自定义配置:挂载到 `/etc/nginx/nginx.conf``/etc/nginx/conf.d/default.conf`
### PHP 配置
- 默认配置:`/usr/local/etc/php/php.ini`
- 自定义配置:挂载到 `/usr/local/etc/php/conf.d/custom.ini`
### PHP-FPM 配置
- 默认配置:`/usr/local/etc/php-fpm.d/www.conf`
- 自定义配置:挂载到 `/usr/local/etc/php-fpm.d/custom.conf`
## 目录结构
```
/var/www/html/ # Web 根目录
/var/log/nginx/ # Nginx 日志
/var/log/php-fpm/ # PHP-FPM 日志
/var/lib/php/sessions/ # PHP 会话存储
```
## 端口
- `80`: HTTP 端口
## 健康检查
访问 `http://localhost/health` 进行健康检查。
## Docker Compose 示例
```yaml
version: '3.8'
services:
web:
build: .
ports:
- "80:80"
volumes:
- ./src:/var/www/html
- ./config/custom-nginx.conf:/etc/nginx/nginx.conf
- ./config/custom-php.ini:/usr/local/etc/php/conf.d/custom.ini
environment:
- TZ=Asia/Shanghai
```
## 环境变量
- `TZ`: 时区设置默认Asia/Shanghai
## 安全注意事项
- 默认禁用了一些危险的 PHP 函数
- 设置了 open_basedir 限制
- 隐藏了敏感文件和目录
- 添加了安全响应头
## 日志
- Nginx 访问日志:`/var/log/nginx/access.log`
- Nginx 错误日志:`/var/log/nginx/error.log`
- PHP-FPM 错误日志:`/var/log/php-fpm/www-error.log`
- PHP-FPM 慢日志:`/var/log/php-fpm/slow.log`
## 故障排除
### 查看日志
```bash
# 查看容器日志
docker logs <container_id>
# 进入容器查看详细日志
docker exec -it <container_id> bash
tail -f /var/log/nginx/error.log
tail -f /var/log/php-fpm/www-error.log
```
### 测试配置
```bash
# 测试 Nginx 配置
docker exec <container_id> nginx -t
# 测试 PHP-FPM 配置
docker exec <container_id> php-fpm -t
```