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

相关推荐
howard20052 小时前
Docker实战:使用CGroups控制资源
docker·cgroups
虾..2 小时前
Linux 信号发送和保存
linux·运维·服务器
峰顶听歌的鲸鱼2 小时前
16.docker:存储
运维·笔记·docker·容器·云计算
乾元2 小时前
AI 在云网络(VPC / VNet)部署的编排与安全对齐——从“手工堆资源”到“意图驱动的网络生成”(含 Terraform 工程化)
运维·网络·人工智能·网络协议·安全·云计算·terraform
盛满暮色 风止何安2 小时前
负载均衡的部署模式
运维·服务器·网络·网络安全·负载均衡
无双@2 小时前
Github BettaFish 微舆docker部署教程 —— 打造你的八卦天团!
docker·容器·开源·github·微舆·bettafish
_F_y2 小时前
数据链路层
运维·服务器·网络
就叫飞六吧2 小时前
常见服务器黑话/术语名称
运维·服务器
iconball2 小时前
个人用云计算学习笔记 --29 华为云网络云服务
运维·笔记·学习·华为云·云计算