Docker Compose部署LNMP环境完整教程:一键启动Nginx+MySQL+PHP

为什么用 Docker Compose 部署 LNMP?

传统方式在服务器上安装 Nginx、MySQL、PHP 需要处理大量依赖冲突和版本问题,迁移时更是麻烦。Docker Compose 将整个 LNMP 环境打包成几个容器,一条命令启动,一条命令销毁,迁移只需复制配置文件,极大降低运维复杂度。


一、环境准备

# 安装 Docker
curl -fsSL https://get.docker.com | bash

# 安装 Docker Compose
sudo apt install docker-compose-plugin -y

# 验证安装
docker --version
docker compose version

二、目录结构规划

mkdir -p ~/lnmp/{nginx/conf.d,php,mysql/data,www}
cd ~/lnmp

目录说明:

  • nginx/conf.d/:Nginx 站点配置文件
  • php/:PHP 自定义配置
  • mysql/data/:MySQL 数据持久化目录
  • www/:网站根目录

三、编写 docker-compose.yml

nano docker-compose.yml
version: '3.8'

services:
  nginx:
    image: nginx:1.25-alpine
    container_name: lnmp_nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./www:/var/www/html
      - ./nginx/logs:/var/log/nginx
    depends_on:
      - php
    networks:
      - lnmp_net
    restart: unless-stopped

  php:
    image: php:8.2-fpm-alpine
    container_name: lnmp_php
    volumes:
      - ./www:/var/www/html
      - ./php/php.ini:/usr/local/etc/php/conf.d/custom.ini
    networks:
      - lnmp_net
    restart: unless-stopped

  mysql:
    image: mysql:8.0
    container_name: lnmp_mysql
    environment:
      MYSQL_ROOT_PASSWORD: your_root_password
      MYSQL_DATABASE: mydb
      MYSQL_USER: myuser
      MYSQL_PASSWORD: your_db_password
    volumes:
      - ./mysql/data:/var/lib/mysql
    ports:
      - "127.0.0.1:3306:3306"
    networks:
      - lnmp_net
    restart: unless-stopped

networks:
  lnmp_net:
    driver: bridge

安全注意:MySQL 端口只绑定到 127.0.0.1,不对外网暴露。


四、配置 Nginx 站点

nano nginx/conf.d/default.conf
server {
    listen 80;
    server_name your-domain.com;
    root /var/www/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }
}

五、配置 PHP

nano php/php.ini
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
memory_limit = 256M
date.timezone = Asia/Shanghai

PHP 镜像默认不包含常用扩展,需要安装 mysqli 和 pdo_mysql:

# 进入 PHP 容器安装扩展
docker compose exec php sh -c "docker-php-ext-install mysqli pdo_mysql && docker-php-ext-enable mysqli"
docker compose restart php

六、启动并验证

# 启动所有服务
docker compose up -d

# 查看运行状态
docker compose ps

# 查看日志
docker compose logs -f nginx

创建测试文件验证 PHP 运行:

echo "" > www/info.php

浏览器访问 http://服务器IP/info.php,看到 PHP 信息页面说明 LNMP 环境运行正常。


七、常用管理命令

# 停止所有容器
docker compose down

# 重启单个服务
docker compose restart nginx

# 进入容器内部
docker compose exec mysql mysql -u root -p

# 更新镜像并重启
docker compose pull && docker compose up -d

总结

Docker Compose 部署 LNMP 的核心优势是:环境隔离、配置版本化、一键迁移。整个部署流程约 10 分钟,适合在香港 VPS 上快速搭建 Web 环境,也适合需要同时维护多个项目的开发者。

如需运行本文教程,IDC.Net 香港云服务器首月 10 元起,支持 Ubuntu 22.04,自助面板随时重装,CN2 GIA 直连大陆,支付宝付款即可开通。

THE END