Docker Compose企业实战系列(一):LNMP环境一键部署(Nginx\+MySQL\+PHP)

Docker Compose企业实战系列(一):LNMP环境一键部署(Nginx+MySQL+PHP)

前言

前面 Docker 基础八篇系列 我们已经完整学完:容器原理、镜像构建、数据挂载、网络、Compose 基础编排、生产最佳实践。

理论学完,接下来进入企业落地实战阶段。

本系列主打:一篇一套真实可复用模板、开箱即用、生产级配置、无废话。

很多个人站长、小团队开发、测试环境,最常用的就是 LNMP 环境:Nginx + MySQL + PHP。

传统搭建 LNMP 耗时、环境容易脏、版本冲突、卸载不干净。用 Docker Compose 一键搭建,全程5分钟,环境纯净、可迁移、可销毁。

本篇给大家一套完整成型、可直接上线的 LNMP Compose 模板。

一、环境架构说明

本次搭建包含三大服务:

  • Nginx:静态资源服务、反向代理、入口服务

  • MySQL 8.0:数据库持久化存储

  • PHP-FPM 8.1:PHP 解析运行环境

所有服务统一组网、自动挂载目录、数据持久化、开机自启。

二、项目目录结构

先建好统一目录结构,规范整洁、方便后续维护:

plain 复制代码
lnmp-docker/
├── docker-compose.yml   # 核心编排文件
├── .env                 # 环境变量配置
├── nginx/
│   └── conf/            # Nginx配置挂载目录
├── www/                 # 网站根目录
└── mysql/
    └── data/            # 数据库数据持久化目录

三、编写环境变量 .env

在根目录新建 .env,统一管理密码、版本、端口,避免硬编码:

env 复制代码
# MySQL配置
MYSQL_ROOT_PASSWORD=123456
MYSQL_DATABASE=default_db
MYSQL_USER=webuser
MYSQL_PASSWORD=web123456

# 镜像版本
MYSQL_VERSION=8.0
NGINX_VERSION=alpine
PHP_VERSION=8.1-fpm-alpine

四、核心 docker-compose.yml 完整配置

新建 docker-compose.yml,复制下面全套配置,直接可用:

yaml 复制代码
version: '3.8'

services:
  # Nginx服务
  nginx:
    image: nginx:${NGINX_VERSION}
    ports:
      - "80:80"
    volumes:
      - ./www:/usr/share/nginx/html
      - ./nginx/conf:/etc/nginx/conf.d
    depends_on:
      - php
    restart: always
    networks:
      - lnmp-net

  # PHP服务
  php:
    image: php:${PHP_VERSION}
    volumes:
      - ./www:/usr/share/nginx/html
    restart: always
    networks:
      - lnmp-net

  # MySQL服务
  mysql:
    image: mysql:${MYSQL_VERSION}
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    restart: always
    networks:
      - lnmp-net

# 自定义网络
networks:
  lnmp-net:
    driver: bridge

五、默认 Nginx 配置支持 PHP 解析

在 nginx/conf 目录新建 default.conf,解决 Nginx 不解析 PHP 的经典问题:

nginx 复制代码
server {
    listen 80;
    server_name localhost;

    root /usr/share/nginx/html;
    index index.html index.php;

    # 支持PHP解析
    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

六、测试 PHP 环境

在 www 目录新建 info.php

php 复制代码
<?php
phpinfo();
?>

七、一键启动 LNMP 环境

进入项目根目录,执行启动命令:

bash 复制代码
# 后台启动所有服务
docker compose up -d

查看服务状态:

bash 复制代码
docker compose ps

八、访问测试

  • 静态页面:http://localhost

  • PHP环境检测:http://localhost/info.php

能正常展示 PHP 信息,代表 Nginx + PHP 联动成功。

九、MySQL 连接测试

本地数据库工具直接连接:

  • 地址:服务器IP / localhost

  • 端口:3306

  • 账号:root / webuser

  • 密码:.env 文件中配置的密码

十、常用运维命令

bash 复制代码
# 查看日志
docker compose logs -f

# 重启单个服务
docker compose restart nginx

# 停止服务不删数据
docker compose stop

# 销毁容器网络(保留数据)
docker compose down

十一、本方案优势(对比传统搭建)

  • 环境纯净隔离:不污染宿主机系统

  • 一键迁移:换服务器直接拉目录启动即可

  • 数据持久化:删容器不丢数据库数据

  • 版本可控:PHP、MySQL 版本固定,不会乱升级

  • 开箱即用:新手5分钟搭建完整网站环境

本期总结

本篇我们完成了 Docker Compose 版本 LNMP 完整生产环境,彻底告别传统繁琐编译安装。

所有配置规范化:挂载配置、数据持久化、环境变量隔离、自定义网络、自动重启,完全满足个人建站、测试环境、小型生产环境使用。

下期预告

Docker Compose企业实战系列(二):SpringBoot+MySQL+Redis 后端项目完整部署

下一篇带你部署最常用的 Java 后端微服务整套环境,实现项目打包、容器运行、数据库联动、缓存联动一键部署。

相关推荐
aiks_yuan2 小时前
MySQL GROUP BY 很慢怎么优化:加了索引反而从 1 秒变 7 秒,Using temporary 该不该消(MySQL 8.2 实测 400 万行)
mysql
数据库小学妹3 小时前
MySQL大字段治理:行溢出机制、覆盖索引与拆表
数据库·mysql·性能优化
这个DBA有点耶4 小时前
MySQL 8.0不可见索引:删索引怕出事,不删又拖慢写入——中间态怎么用?
数据库·mysql·代码规范
噜哥带你玩转 AI 大模型7 小时前
面试加分项!CASE WHEN 两种写法、CTE 公共表表达式、四大类窗口函数,老哥一次讲透
mysql·窗口函数·cte·sql 进阶
瑞克-桑切斯7 小时前
ERP 企业生产管理系统部署手册
运维·docker·云原生·容器·eureka
bksczm7 小时前
InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer
数据库·mysql
招风的黑耳7 小时前
SpringBoot+Vue+MySQL 民宿在线预定平台 完整可运行版(源码+文档)
vue.js·spring boot·mysql
瑞克-桑切斯8 小时前
docker mail商城
运维·docker·容器
java_logo9 小时前
Docker 部署 ReMe:轻松搭建 AI Agent 记忆管理平台
人工智能·docker·容器·ai agent·轩辕镜像·reme·agentscope-ai
不庸.9 小时前
WPScan 实战入门:从 Docker 靶场到弱密码爆破
运维·安全·web安全·docker·容器·安全性测试·wpscan