
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
本Docker镜像提供高性能、优化的PHP-FPM容器,基于Alpine Linux构建,包含多项配置增强:Alpine Linux优化、Opcache启用、动态资源分配、监控机制及安全加固等,适用于与NGINX配合部署PHP Web应用。
bashdocker build -t openbridge/ob_php-fpm .
默认使用Alpine 3.11,可通过ALPINE_VERSION构建参数指定版本:
bashdocker build -t ob_php-fpm --build-arg ALPINE_VERSION=3.13 .
Docker Hub镜像默认使用Alpine 3.13:
bashdocker pull docker.xuanyuan.run/openbridge/ob_php-fpm
bashdocker run -it --rm \ -p 9000:9000 \ -e "APP_DOCROOT=/app" \ --name php-fpm \ docker.xuanyuan.run/openbridge/php-fpm
bashdocker-compose up -d # 需确保项目中存在docker-compose.yml
默认应用根目录为/app,可通过APP_DOCROOT环境变量修改:
bash-e "APP_DOCROOT=/html" # 将文档根目录设为/html
重要:
APP_DOCROOT需与NGINX配置中的NGINX_DOCROOT保持一致,否则可能导致文件访问错误。
挂载Web应用文件
将主机Web应用目录挂载至容器文档根目录(只读推荐):
bash-v /your/webapp/path:${APP_DOCROOT}:ro # 例如 -v /host/app:/app:ro
缓存目录优化
使用tmpfs挂载缓存目录(内存文件系统,提升性能):
bash-v /tmpfs:${CACHE_PREFIX}:ro # 缓存目录路径由环境变量CACHE_PREFIX定义
| 变量名 | 描述 | 默认值 |
|---|---|---|
APP_DOCROOT | PHP文档根目录 | /app |
PHP_FPM_PORT | PHP-FPM监听端口 | 9000 |
PHP_START_SERVERS | 初始FPM进程数 | 动态计算(CPU/2) |
PHP_MIN_SPARE_SERVERS | 最小空闲进程数 | 动态计算(CPU/2) |
PHP_MAX_SPARE_SERVERS | 最大空闲进程数 | 动态计算(CPU) |
PHP_MEMORY_LIMIT | PHP内存限制(MB) | 动态计算(总内存/2) |
PHP_POST_MAX_SIZE | POST数据最大尺寸(MB) | 50 |
PHP_UPLOAD_MAX_FILESIZE | 上传文件最大尺寸(MB) | 50 |
PHP_MAX_INPUT_VARS | 最大输入变量数 | 1000 |
PHP_MAX_EXECUTION_TIME | 最大执行时间(秒) | 300 |
PHP_OPCACHE_ENABLE | 是否启用Opcache(1=启用) | 1 |
PHP_OPCACHE_MEMORY_CONSUMPTION | Opcache内存(MB) | 动态计算(总内存/6) |
PHP_MAX_CHILDREN | 最大FPM进程数 | 动态计算(CPU*2) |
容器启动时自动根据CPU和内存计算PHP-FPM配置,核心逻辑如下:
bash# 动态配置核心代码(容器内自动执行) CPU=$(grep -c ^processor /proc/cpuinfo) TOTALMEM=$(free -m | awk '/^Mem:/{print $2}') TOTALCPU=$((CPU > 2 ? CPU : 2)) # PHP-FPM进程数计算 PHP_START_SERVERS=${PHP_START_SERVERS:-$((TOTALCPU / 2))} PHP_MIN_SPARE_SERVERS=${PHP_MIN_SPARE_SERVERS:-$((TOTALCPU / 2))} PHP_MAX_SPARE_SERVERS=${PHP_MAX_SPARE_SERVERS:-$TOTALCPU} PHP_MAX_CHILDREN=${PHP_MAX_CHILDREN:-$((TOTALCPU * 2))} # 内存配置计算 PHP_MEMORY_LIMIT=${PHP_MEMORY_LIMIT:-$((TOTALMEM / 2))} PHP_OPCACHE_MEMORY_CONSUMPTION=${PHP_OPCACHE_MEMORY_CONSUMPTION:-$((TOTALMEM / 6))}
镜像PHP配置文件结构如下(关键配置片段):
bash# /etc/php7/php-fpm.conf [global] include=/etc/php7/php-fpm.d/*.conf # /etc/php7/php-fpm.d/docker.conf [global] error_log = {{LOG_PREFIX}}/error.log [www] access.log = {{LOG_PREFIX}}/access.log clear_env = no catch_workers_output = yes # /etc/php7/php-fpm.d/zz-docker.conf(核心配置) [www] user = www-data group = www-data listen = [::]:{{PHP_FPM_PORT}} pm = static pm.max_children = {{PHP_MAX_CHILDREN}} pm.start_servers = {{PHP_START_SERVERS}} pm.min_spare_servers = {{PHP_MIN_SPARE_SERVERS}} pm.max_spare_servers = {{PHP_MAX_SPARE_SERVERS}} # /etc/php7/conf.d/50-setting.ini(PHP.ini配置) memory_limit={{PHP_MEMORY_LIMIT}}M upload_max_filesize={{PHP_UPLOAD_MAX_FILESIZE}}M opcache.enable={{PHP_OPCACHE_ENABLE}} opcache.memory_consumption={{PHP_OPCACHE_MEMORY_CONSUMPTION}}M
容器使用标准化用户www-data(UID=82,GID=82):
bashaddgroup -g 82 -S www-data adduser -u 82 -D -S -h /var/cache/php-fpm -s /sbin/nologin -G www-data www-data
容器启动时自动修复文档根目录及缓存目录权限:
bash# 权限修复逻辑(容器内自动执行) find ${APP_DOCROOT} ! -user www-data -exec chown www-data:www-data {} \; find ${APP_DOCROOT} ! -perm 755 -type d -exec chmod 755 {} \; find ${APP_DOCROOT} ! -perm 644 -type f -exec chmod 644 {} \;
tmpfs挂载/var/cache(如docker-compose中配置):yamltmpfs: - /var/cache
PHP-FPM日志默认输出至stdout/stderr,建议结合日志收集服务(如Amazon CloudWatch)进行集中管理,以便设置告警和监控容器活动。
容器集成Monit监控PHP-FPM服务,核心监控规则:
bashcheck process php-fpm with pidfile "/var/run/php-fpm.pid" if not exist for 10 cycles then restart if cpu > 90% for 5 cycles then exec "/bin/bash -c /usr/bin/pkill -INT php-fpm" if failed port {{PHP_FPM_PORT}} then exec "/bin/bash -c /usr/bin/pkill -INT php-fpm"
CMD ["php-fpm7", "-g", "/var/run/php-fpm.pid"]会退出--restart always,Docker将自动重启容器如遇镜像使用问题,请通过GitHub Issue反馈。
欢迎贡献新功能、修复或更新,建议先通过GitHub Issue讨论大型变更,再提交Pull Request。
本项目基于MIT许可证开源,详见LICENSE文件。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务