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

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

特性

  • 基于官方 PHP 8.4 FPM 镜像
  • 集成 Nginx 作为 Web 服务器
  • 支持 PHP 文件动态处理和静态资源服务
  • 预装常用 PHP 扩展PDO MySQL, PDO PostgreSQL, PostgreSQL, MySQLi, OPcache
  • 支持外部配置文件覆盖
  • 使用 Supervisor 管理进程
  • 包含健康检查端点

快速开始

构建镜像

# 构建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 .

运行容器

# 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 示例

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

故障排除

查看日志

# 查看容器日志
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

测试配置

# 测试 Nginx 配置
docker exec <container_id> nginx -t

# 测试 PHP-FPM 配置
docker exec <container_id> php-fpm -t
Description
No description provided
Readme 96 KiB
Languages
Shell 54.5%
PHP 30.5%
Dockerfile 15%