docker 搭建lnmp

本次搭建的 LNMP 是 Linux + Nginx + MySQL 8.0 + PHP 8.1 组合(生产环境主流稳定版本),基于 Docker Compose 实现一键编排、容器化隔离部署,无需手动配置任何环境依赖,支持「目录挂载、端口映射、数据持久化、容器自启」,直接可用于开发 / 生产环境。


一、环境准备

1. 安装 Docker 和 Docker Compose

二、启动docker

bash 复制代码
sudo systemctl start docker
sudo systemctl enable docker

三、创建目录

/opt 目录下创建 docker-lnmp 项目目录,并进入该目录:

bash 复制代码
mkdir -p /opt/docker-lnmp
cd /opt/docker-lnmp

在该目录下,我们将创建所需的子目录和配置文件:

bash 复制代码
mkdir -p nginx/conf.d
mkdir -p nginx/html
mkdir -p wordpress_data
mkdir -p mysql_data
mkdir -p ssl/certs
mkdir -p ssl/private
二、配置文件
1. docker-compose.yml 文件

/opt/docker-lnmp 下创建 docker-compose.yml 文件,配置 Nginx、PHP 和 MySQL 服务:

bash 复制代码
version: "3"
​
services:
  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d  # 挂载 Nginx 配置
      - ./nginx/html:/usr/share/nginx/html  # 挂载静态文件和 WordPress 数据
      - ./wordpress_data:/var/www/html  # 挂载 WordPress 数据
      - ./ssl/certs:/etc/nginx/certs     # 挂载 SSL 证书
      - ./ssl/private:/etc/nginx/private   # 挂载 SSL 私钥目录
​
    depends_on:
      - php
    restart: always
​
  php:
    image: php:8.2-fpm
    container_name: php
    volumes:
      - ./wordpress_data:/var/www/html  # 挂载 WordPress 数据
    restart: always
​
  mysql:
    image: mysql:5.7
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: root123456
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: wp123456
    volumes:
      - ./mysql_data:/var/lib/mysql  # 持久化 MySQL 数据
    ports:
      - "3306:3306"
    restart: always
2. Nginx 配置文件

nginx/conf.d 目录下创建 nginx.conf 文件,配置 Nginx 处理 HTTP 和 PHP 请求:

HTTP 配置(端口 80)
bash 复制代码
server {
    listen 80;
    server_name localhost;
​
    # 强制 HTTP 到 HTTPS 重定向
    location / {
        return 301 https://$host$request_uri;
    }
}
HTTPS 配置(端口 443)
bash 复制代码
server {
    listen 443 ssl;
    server_name localhost;
    ssl_certificate /etc/nginx/certs/nginx-selfsigned.crt;
    ssl_certificate_key /etc/nginx/private/nginx-selfsigned.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;
​
    root /var/www/html;
    index index.php index.html index.htm;
​
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
​
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
​
    location ~ /\.ht {
        deny all;
    }
}

三、启动 Docker 服务

1. 启动容器

执行以下命令启动所有容器服务:

bash 复制代码
docker-compose up -d  # 启动容器
2. 查看容器状态

查看容器状态,确认所有服务都在运行:

复制代码
docker-compose ps
3. 进入容器

如果需要进入容器进行调试,可以使用以下命令:

bash 复制代码
docker exec -it nginx bash   # 进入 Nginx 容器
docker exec -it php bash     # 进入 PHP 容器
docker exec -it mysql bash   # 进入 MySQL 容器

在本地电脑浏览器输入 https://服务器IP(如 https://192.168.10.170

相关推荐
深念Y10 小时前
Windows → WSL2 全面迁移:工具链、Docker、OpenCode
linux·运维·windows·docker·容器·环境·wsl
一池秋_10 小时前
云笔记本,刷linux,天翼云笔记本rk3568
linux·运维·电脑
九硕智慧建筑一体化厂家19 小时前
数字化管控落地,直流照明构筑安全照明体系
运维·人工智能·笔记·安全·智慧城市
刘某的Cloud21 小时前
ceph osd 导入导出 rbd volume 卷
linux·运维·ceph·volume
QX_hao1 天前
【Kubernetes】 的三个Probe
容器·kubernetes
神奇霸王龙1 天前
Agent 准入门控屠夫:5 旗舰 4 维度评估
linux·运维·数据库·ai·ai作画·agent·ai编程
cfm_29141 天前
基于Binlog实现不停机数据库平滑迁移技术
运维·数据库·架构
迪康Defender1 天前
AI 重构终端安全运营:智能分析中枢 AI Insight 模块架构与落地场景深度解析
运维·网络·人工智能·其他·安全·重构·架构
HiDev_1 天前
【非标自动化】2、认识元器件(固态继电器)
运维·自动化
明达智控技术1 天前
国产 PLC 落地立库自动化,MC5000边缘智能控制器破局
运维·自动化