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

相关推荐
广州中轴线6 小时前
OpenStack on Kubernetes 生产部署实战(十七)
容器·kubernetes·openstack
生而为虫6 小时前
[Windows] 【浏览器自动化精灵V1.0】用Excel表格控制浏览器的自动化
运维·自动化
Fcy6486 小时前
Linux下 进程(二)(进程状态、僵尸进程和孤儿进程)
linux·运维·服务器·僵尸进程·孤儿进程·进程状态
第七序章6 小时前
【Linux学习笔记】初识Linux —— 理解gcc编译器
linux·运维·服务器·开发语言·人工智能·笔记·学习
迎仔6 小时前
A-总览:GPU驱动运维系列总览
linux·运维
AI_56787 小时前
阿里云OSS成本优化:生命周期规则+分层存储省70%
运维·数据库·人工智能·ai
yyy的学习记录7 小时前
Ubuntu下urdf模型转换成proto模型
linux·运维·ubuntu
礼拜天没时间.7 小时前
自定义镜像制作——从Dockerfile到镜像
linux·docker·容器·centos·bash
猫头虎7 小时前
OpenClaw开源汉化发行版:介绍、下载、安装、配置教程
运维·windows·开源·aigc·ai编程·agi·csdn
luffy54597 小时前
windows下通过docker-desktop创建redis实例
windows·redis·docker·容器