使用docker compose可快速构建稳定lnmp生产环境,含五种方案:一、官方镜像轻量编排;二、php自定义构建预装扩展;三、mysql数据持久化与初始化强化;四、nginx静态分离及https就绪;五、多环境变量驱动的可移植编排。

如果您希望在生产环境中快速部署一套稳定、可复用的PHP运行环境,但面临Nginx配置繁琐、PHP扩展缺失、MySQL版本不兼容或服务间网络不通等问题,则很可能是LNMP各组件未通过统一编排进行容器化隔离。以下是使用Docker Compose快速构建LNMP生产环境的多种可行方案:
一、基于官方镜像的轻量级编排方案
该方案直接采用Docker Hub官方维护的Nginx、MySQL和PHP-FPM镜像,避免自定义构建耗时,适合对PHP扩展要求不复杂、追求启动速度的生产场景。所有服务通过bridge网络互通,配置集中于docker-compose.yml文件中。
1、创建项目目录:mkdir -p /opt/lnmp-prod/{nginx/conf.d,html,logs,php,mysql/data}
2、编写docker-compose.yml,定义nginx、php-fpm、mysql三个服务,并设置restart: unless-stopped确保生产环境持续可用。
3、在/opt/lnmp-prod/nginx/conf.d/default.conf中配置Nginx反向代理至PHP-FPM容器,关键行包含fastcgi_pass php:9000,其中php为服务名,依赖Docker内置DNS解析。
4、执行docker-compose up -d启动全部服务,并验证docker-compose ps输出状态均为Up。
二、PHP自定义构建+扩展预装方案
该方案适用于需启用特定PHP扩展(如redis、swoole、xdebug)或需调整PHP.ini参数的生产需求。通过编写Dockerfile构建专属PHP镜像,确保扩展版本与生产要求严格一致,避免运行时动态安装带来的不确定性。
1、在/opt/lnmp-prod/php/Dockerfile中基于php:8.2-fpm基础镜像,使用docker-php-ext-install和pecl install预装必需扩展。
2、在Dockerfile末尾添加COPY php.ini /usr/local/etc/php/conf.d/custom.ini,挂载自定义配置覆盖默认值。
3、修改docker-compose.yml中php服务的build字段指向该Dockerfile路径,并移除image字段。
4、执行docker-compose build --no-cache php重建PHP镜像,再运行docker-compose up -d启动整套环境。
三、MySQL数据持久化与初始化强化方案
该方案聚焦生产环境对数据库可靠性的严苛要求,不仅实现/var/lib/mysql目录持久化,还通过初始化脚本自动创建数据库、用户及权限,杜绝手动导入SQL带来的遗漏风险。
1、将初始化SQL文件(如init.sql)放入/opt/lnmp-prod/mysql/init/目录,内容包含CREATE DATABASE IF NOT EXISTS myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;等语句。
2、在docker-compose.yml中mysql服务下添加volumes挂载项:- ./mysql/init:/docker-entrypoint-initdb.d,确保容器首次启动时自动执行。
3、为mysql服务配置environment块,显式声明MYSQL_ROOT_PASSWORD、MYSQL_DATABASE、MYSQL_USER和MYSQL_PASSWORD,且密码必须含大小写字母、数字及特殊字符以满足MySQL 8.0+强策略。
4、确认./mysql/data目录为空后执行docker-compose up -d mysql,等待日志中出现mysqld: ready for connections后再启动其余服务。
四、Nginx静态资源分离与HTTPS就绪方案
该方案面向真实生产流量,将Nginx配置与静态文件解耦,支持独立更新HTML/CSS/JS,并预置SSL证书挂载路径,便于后续一键启用HTTPS,提升安全合规性。
1、在docker-compose.yml中nginx服务的volumes部分,分别挂载:./nginx/conf.d:/etc/nginx/conf.d:ro、./html:/usr/share/nginx/html:ro、./ssl/certs:/etc/nginx/certs:ro、./ssl/private:/etc/nginx/private:ro。
2、编辑./nginx/conf.d/default.conf,在server块中添加ssl_certificate /etc/nginx/certs/fullchain.pem;和ssl_certificate_key /etc/nginx/private/privkey.pem;两行。
3、确保./html目录中存在index.php,且其内容调用phpinfo()或连接MySQL测试语句,用于端到端验证。
4、启动前运行chmod -R 444 ./ssl/certs ./ssl/private限制证书文件仅读权限,再执行docker-compose up -d。
五、多环境变量驱动的可移植编排方案
该方案利用.env文件解耦配置与代码,使同一套docker-compose.yml可在开发、测试、生产环境复用,仅通过替换环境变量即可切换PHP版本、MySQL端口、域名等参数,满足CI/CD流水线自动化部署要求。
1、在项目根目录创建.env文件,写入PHP_VERSION=8.2、MYSQL_PORT=3306、DOMAIN=prod.example.com等键值对。
2、在docker-compose.yml中所有涉及可变值的位置使用${VAR_NAME}语法,例如image: php:${PHP_VERSION}-fpm、- "${MYSQL_PORT}:3306"。
3、在Nginx配置中使用server_name ${DOMAIN};,并确保docker-compose.yml的volumes部分也引用${SOURCE_DIR}等变量。
4、执行docker-compose --env-file .env up -d,Docker Compose将自动加载并替换所有变量,生成最终生效的运行配置。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











