docker 搭建lnmp

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


一、环境准备

1. 安装 Docker 和 Docker Compose

二、启动docker

sudo systemctl start docker
sudo systemctl enable docker

三、创建目录  

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

mkdir -p /opt/docker-lnmp
cd /opt/docker-lnmp

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

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 服务:

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)
server {
    listen 80;
    server_name localhost;
​
    # 强制 HTTP 到 HTTPS 重定向
    location / {
        return 301 https://$host$request_uri;
    }
}
HTTPS 配置(端口 443)
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. 启动容器

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

docker-compose up -d  # 启动容器
2. 查看容器状态

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

docker-compose ps
3. 进入容器

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

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

### 使用 Docker 构建 LNMP 环境 #### 1. 准备工作 在开始之前,确保已经安装了 DockerDocker Compose 工具。可以通过以下命令验证其版本是否存在: ```bash docker --version docker-compose --version ``` 如果没有安装,则需按照官方文档完成安装过程[^3]。 --- #### 2. 创建项目目录结构 创建一个新的目录用于存放所有的配置文件和挂载数据。例如命名为 `lnmp-wordpress` 并进入该目录: ```bash mkdir lnmp-wordpress && cd lnmp-wordpress ``` 在此目录下,需要准备以下几个部分的内容: - **Docker 配置文件 (`docker-compose.yml`)** - **Nginx 配置文件 (可选)** - **MySQL 数据存储路径** - **PHP 文件挂载路径** --- #### 3. 编写 `docker-compose.yml` 以下是完整的 `docker-compose.yml` 文件内容示例,其中包含了 Nginx、MySQL、PHP 和 PhpMyAdmin 的服务定义以及资源限制设置: ```yaml version: '3' services: nginx: image: nginx:latest container_name: docker_nginx ports: - "80:80" volumes: - ./html:/usr/share/nginx/html - ./conf.d:/etc/nginx/conf.d depends_on: - php mem_limit: 500m # 设置最大内存为 500MB memswap_limit: 1g # 设置最大交换分区大小为 1GB mysql: image: mysql:5.7 container_name: docker_mysql environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: wordpressdb MYSQL_USER: wpuser MYSQL_PASSWORD: wppassword volumes: - ./mysql_data:/var/lib/mysql deploy: resources: limits: dm_bps_read_only: - path: / rate: 10MB # 限制磁盘读取速度为 10MB/s command: ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"] php: image: php:7.4-fpm container_name: docker_php volumes: - ./html:/var/www/html phpmyadmin: image: phpmyadmin/phpmyadmin container_name: docker_phpmyadmin ports: - "8080:80" environment: PMA_HOST: mysql PMA_PORT: 3306 ``` 上述配置中: - 定义了一个名为 `nginx` 的容器,并设置了内存限制[^4]。 - 定义了一个名为 `mysql` 的容器,并对其 `/dev/sda` 进行了速率限制。 - 提供了 PHP-FPM 支持 WordPress 动态页面解析的功能。 - 添加了 PhpMyAdmin 作为数据库管理工具以便于调试和维护。 --- #### 4. 初始化并启动服务 当所有必要的文件准备好之后,在终端运行如下指令来初始化并以后台模式启动这些服务: ```bash docker-compose up -d ``` 这会下载所需的镜像(如果尚未存在),然后根据指定参数创建相应的容器实例[^2]。 --- #### 5. 测试访问 打开浏览器输入服务器公网IP或者localhost即可看到默认欢迎界面;对于PhpMyAdmin则通过端口8080进行访问(http://<server-ip>:8080/)。 另外还需要确认各组件之间通信无误——即能够成功加载Wordpress首页及其后台管理系统登录页。 --- #### 6. 备份与恢复 为了防止意外情况发生可以定期做快照保存当前状态下的全部容器信息至本地压缩包形式存档待后续迁移或其他用途之时解压还原使用。 执行下面两条语句分别导出三个主要组成部分(NGINX,Mysql,PHP)成为单独的TAR档案文件: ```bash docker commit $(docker ps -qf name=docker_nginx) > nginx.tar docker save -o mysql.tar mysql:5.7 docker save -o php.tar php:7.4-fpm ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值