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 后端微服务整套环境,实现项目打包、容器运行、数据库联动、缓存联动一键部署。

相关推荐
大貔貅喝啤酒1 小时前
Gitea+Jenkins+Docker 搭建 Node 项目 CI/CD 自动部署完整教程
ci/cd·docker·jenkins·js·gitea
Mortalbreeze1 小时前
MySQL 基础篇(二):数据库和数据表的基本操作
linux·服务器·数据库·mysql
AlfredZhao2 小时前
用 Docker 简化部署与版本升级:一份可复用的实践
docker
zzj_26261010 小时前
MySQL常用操作
数据库·mysql
yolo_guo11 小时前
调试mysql延迟与libevent回调实际发送回复时机问题
c++·mysql·libevent
旺仔学长 哈哈11 小时前
springboot钓鱼爱好者交流平台APP设计与实现
java·spring boot·mysql·充电桩管理系统
bloglin9999912 小时前
vmware部署centos7启动docker容器后无法访问服务
运维·docker·容器
JosieBook12 小时前
【数据库】MySQL 实战精通系列 · 第6篇:InnoDB 存储引擎、日志与崩溃恢复
数据库·mysql
FYKJ_201015 小时前
django电影推荐系统55066-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django