我对docker不感冒,不过看到有网友说这个只要40m内存就能跑,有空试试,要是真可以,那就windows上跑一些签到类的小项目倒是可以。
仓库地址: https://github.com/vbskycn/php-nginx
特性
- 基于轻量级且安全的 Alpine Linux 发行版构建
- 多平台支持,支持 AMD64, ARMv6, ARMv7, ARM64
- 极小的 Docker 镜像大小(约40MB)
- 使用 PHP 8.4 以获得最佳性能、低CPU使用率和内存占用
- 环境变量配置系统 – 支持通过环境变量灵活配置,适应不同设备规格
- 针对512M VPS优化,支持20个并发用户,可扩展到更大规格服务器
- 优化为仅在流量时使用资源(通过使用PHP-FPM的
ondemand
进程管理器) - Nginx、PHP-FPM、Redis和supervisord服务在非特权用户(nobody)下运行,更加安全
- 所有服务的日志都重定向到Docker容器的输出(可通过
docker logs -f <容器名称>
查看) - 自动服务管理和故障恢复,任何服务崩溃都会自动重启
- 遵循KISS原则(Keep It Simple, Stupid),易于理解和调整镜像以满足您的需求
项目目标
这个容器镜像的目标是提供一个在容器中运行Nginx和PHP-FPM的示例,专门针对512M VPS进行优化,遵循最佳实践,易于理解和修改以满足您的需求。特别适合资源受限的小型服务器环境。如你需要可以自行调整并重新编译
环境变量配置系统
核心优势
- 灵活配置:支持通过环境变量自定义所有关键参数
- 多设备适配:从512M VPS到4G+服务器的完整配置方案
- 向后兼容:不设置环境变量时使用512M VPS默认优化配置
- 实时生效:配置在容器启动时动态生成,无需重新构建镜像
512M VPS 默认配置
- 内存优化:PHP内存限制64MB,OPcache内存32MB,Redis内存限制64MB
- 进程管理:PHP-FPM使用
ondemand
模式,按需创建进程,空闲时自动回收 - 并发控制:最大20个PHP-FPM进程,支持20个并发用户
- 缓存策略:启用OPcache加速,Redis LRU淘汰策略,静态资源5天缓存
- 轻量级基础:基于Alpine Linux,镜像大小仅约40MB
- 资源监控:所有服务日志统一输出,便于监控和调试
快速开始
基本使用
启动Docker容器:(不加变量为默认优化1H512M机器,直接使用就行)
docker run -p 80:8080 zhoujie218/php-nginx:latest
访问以下地址:
- 首页信息: http://localhost
挂载自定义代码
docker run -p 80:8080 -v ~/my-codebase:/var/www/html zhoujie218/php-nginx:latest
使用Docker Compose
创建 docker-compose.yml
:
version: '3.8'
services:
php-nginx:
image: zhoujie218/php-nginx:latest
ports:
- "80:8080"
volumes:
- ./src:/var/www/html
environment:
- PHP_MEMORY_LIMIT=128M
restart: unless-stopped
启动服务:
docker-compose up -d
环境变量配置
支持通过环境变量自定义配置,适应不同设备规格。如果不设置环境变量,将使用512M VPS的默认优化配置。
核心环境变量
变量名 | 默认值 | 说明 |
---|---|---|
PHP_MEMORY_LIMIT |
64M | PHP内存限制 |
PHP_FPM_PM_MODE |
ondemand | PHP-FPM进程管理模式 |
PHP_FPM_MAX_CHILDREN |
20 | 最大子进程数 |
OPCACHE_ENABLE |
1 | 是否启用OPcache |
OPCACHE_MEMORY_CONSUMPTION |
32 | OPcache内存大小(MB) |
REDIS_MAXMEMORY |
64mb | Redis最大内存 |
NGINX_WORKER_PROCESSES |
auto | Nginx工作进程数 |
使用示例
1G内存服务器配置示例:
version: '3.8'
services:
php-nginx:
image: zhoujie218/php-nginx:latest
ports:
- "80:8080"
volumes:
- ./src:/var/www/html
environment:
- PHP_MEMORY_LIMIT=128M
- OPCACHE_MEMORY_CONSUMPTION=64
- PHP_FPM_MAX_CHILDREN=40
- REDIS_MAXMEMORY=128mb
- NGINX_WORKER_PROCESSES=2
restart: unless-stopped
2G内存服务器配置示例:
version: '3.8'
services:
php-nginx:
image: zhoujie218/php-nginx:latest
ports:
- "80:8080"
volumes:
- ./src:/var/www/html
environment:
- PHP_MEMORY_LIMIT=256M
- OPCACHE_MEMORY_CONSUMPTION=128
- PHP_FPM_MAX_CHILDREN=60
- REDIS_MAXMEMORY=256mb
- NGINX_WORKER_PROCESSES=2
restart: unless-stopped
小内存机器配置示例:
docker stop php-nginx
docker rm php-nginx
docker run -d \
--name php-nginx \
--restart=always \
-p 80:8080 \
-e PHP_MEMORY_LIMIT=64M \
-e PHP_DISPLAY_ERRORS=Off \
-e PHP_MAX_EXECUTION_TIME=30 \
-e OPCACHE_ENABLE=1 \
-e OPCACHE_MEMORY_CONSUMPTION=32 \
-e PHP_FPM_PM_MODE=ondemand \
-e PHP_FPM_MAX_CHILDREN=20 \
-e REDIS_MAXMEMORY=64mb \
-e NGINX_WORKER_PROCESSES=1 \
-e NGINX_WORKER_CONNECTIONS=1024 \
zhoujie218/php-nginx:latest
版本管理
主要或次要更改总是作为发布版本发布,并附有相应的变更日志。
当前版本:1.1.47
latest
标签每周自动更新,包含Alpine Linux的最新补丁。
配置
本项目支持两种配置方式:环境变量配置(推荐)和配置文件挂载。
方式一:环境变量配置(推荐)
通过环境变量可以灵活配置所有关键参数,无需修改配置文件:
# 基本配置示例
docker run -d \
--name php-nginx \
-p 80:8080 \
-e PHP_MEMORY_LIMIT=128M \
-e PHP_FPM_MAX_CHILDREN=40 \
-e OPCACHE_MEMORY_CONSUMPTION=64 \
-e REDIS_MAXMEMORY=128mb \
zhoujie218/php-nginx:latest
优势:
- ✅ 无需创建配置文件
- ✅ 配置在容器启动时动态生成
- ✅ 支持不同环境使用不同配置
- ✅ 配置参数完整,覆盖所有服务
方式二:配置文件挂载
如果需要自定义配置文件,可以通过挂载方式覆盖默认配置:
Nginx配置示例
创建 nginx-custom.conf
:
server {
listen 8080;
server_name localhost;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
挂载配置:
# Linux/macOS
docker run -v "$(pwd)/nginx-custom.conf:/etc/nginx/conf.d/default.conf" zhoujie218/php-nginx:latest
# Windows PowerShell
docker run -v "${PWD}/nginx-custom.conf:/etc/nginx/conf.d/default.conf" zhoujie218/php-nginx:latest
PHP配置示例
创建 php-custom.ini
:
; 自定义PHP配置
memory_limit = 256M
max_execution_time = 60
upload_max_filesize = 10M
post_max_size = 10M
挂载配置:
# Linux/macOS
docker run -v "$(pwd)/php-custom.ini:/etc/php84/conf.d/99-custom.ini" zhoujie218/php-nginx:latest
# Windows PowerShell
docker run -v "${PWD}/php-custom.ini:/etc/php84/conf.d/99-custom.ini" zhoujie218/php-nginx:latest
PHP-FPM配置示例
创建 php-fpm-custom.conf
:
[www]
pm = dynamic
pm.max_children = 100
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
挂载配置:
# Linux/macOS
docker run -v "$(pwd)/php-fpm-custom.conf:/etc/php84/php-fpm.d/www.conf" zhoujie218/php-nginx:latest
# Windows PowerShell
docker run -v "${PWD}/php-fpm-custom.conf:/etc/php84/php-fpm.d/www.conf" zhoujie218/php-nginx:latest
配置优先级
- 环境变量配置 > 挂载配置文件 > 默认配置
- 环境变量配置会在容器启动时覆盖默认配置
- 挂载的配置文件会覆盖默认配置文件
注意事项
- 配置文件挂载需要绝对路径
- 建议优先使用环境变量配置,更灵活且易于管理
- 配置文件修改后需要重启容器才能生效
- 环境变量配置在容器启动时自动生成,无需重启
API文档
Redis管理API
获取键信息
GET /redis.php?action=get_key_info&key={key_name}
删除键
GET /redis.php?action=delete_key&key={key_name}
系统状态
GET /admin.php
系统自带管理密码(挂载自己的目录后就无效了)
admin123
健康检查端点
- PHP-FPM状态:
/fpm-status
- PHP-FPM Ping:
/fpm-ping
文档和示例
要修改此容器以满足您的特定需求,请查看以下文档:
- 🔧 技术文档 – 技术栈介绍、配置说明、扩展功能
- 🚀 部署指南 – 工作流触发、版本管理、镜像使用
- 📖 项目指南 – 贡献指南、开发指南、代码规范
- 💡 使用示例 – 实际应用场景、最佳实践、故障恢复
- ⚙️ 环境变量配置指南 – 详细的环境变量配置说明和最佳实践
没有回复内容