当前位置: 首页 > news >正文

LNMP 环境部署 WordPress

前言

一、环境准备

1. 安装 Docker 和 Docker Compose

2. 启动 Docker 服务

3. 创建项目目录

4. 权限设置(可选)

二、配置文件

1. docker-compose.yml 文件

配置项解释:

Nginx 服务:

PHP 服务:

MySQL 服务:

2. Nginx 配置文件

HTTP 配置(端口 80)

HTTPS 配置(端口 443)

三、启动 Docker 服务

1. 启动容器

2. 查看容器状态

3. 进入容器

四、安装 WordPress

1. 手动创建 wp-config.php 文件

2. 完成 WordPress 安装

五、安装 PHP mysqli 扩展(如果需要)

六、总结

前言

在本文中,我们将使用 Docker 在 CentOS 系统上搭建 LNMP 环境(Linux、Nginx、MySQL、PHP),并通过 Nginx 和 PHP-FPM 来部署 WordPress。我们将详细解释每个步骤和配置,确保你可以顺利完成部署。

一、环境准备

1. 安装 Docker 和 Docker Compose

具体步骤请查看该连接:

https://blog.csdn.net/kirito0000/article/details/152418142?spm=1001.2014.3001.5501

2. 启动 Docker 服务

确保 Docker 服务正在运行:

sudo systemctl start docker
sudo systemctl enable docker

3. 创建项目目录

/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

4. 权限设置(可选)

确保目录有适当的权限,以便 Docker 容器可以读写这些目录:

chmod -R 777 /opt/docker-lnmp

二、配置文件

1. docker-compose.yml 文件

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

version: "3"
​
services:nginx:image: nginx:latestcontainer_name: nginxports:- "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:- phprestart: always
​php:image: php:8.2-fpmcontainer_name: phpvolumes:- ./wordpress_data:/var/www/html  # 挂载 WordPress 数据restart: always
​mysql:image: mysql:5.7container_name: mysqlenvironment:MYSQL_ROOT_PASSWORD: root123456MYSQL_DATABASE: wordpressMYSQL_USER: wpuserMYSQL_PASSWORD: wp123456volumes:- ./mysql_data:/var/lib/mysql  # 持久化 MySQL 数据ports:- "3306:3306"restart: always
配置项解释:
  • version: "3":指定 Docker Compose 文件的版本。版本 3 是当前使用的标准版本。

  • services:定义了多个容器服务,分别是 nginxphpmysql

Nginx 服务:
  • image: nginx:latest:使用官方的最新 Nginx 镜像。

  • container_name: nginx:指定容器的名称为 nginx

  • ports:将宿主机的 80 端口和 443 端口映射到容器的 80 和 443 端口。

    • 80:80:HTTP 服务。

    • 443:443:HTTPS 服务(如果配置了 SSL)。

  • volumes:挂载宿主机的目录到容器内。

    • ./nginx/conf.d:/etc/nginx/conf.d:将宿主机的 nginx/conf.d 目录挂载到容器的 /etc/nginx/conf.d,用于存放 Nginx 配置文件。

    • ./nginx/html:/usr/share/nginx/html:将宿主机的 nginx/html 目录挂载到容器的 /usr/share/nginx/html,用于存放静态文件和 WordPress 文件。

    • ./wordpress_data:/var/www/html:将宿主机的 wordpress_data 目录挂载到容器的 /var/www/html,用于存放 WordPress 数据。

    • ./ssl/certs:/etc/nginx/certs:将宿主机的 SSL 证书挂载到容器中(如果使用 SSL)。

    • ./ssl/private:/etc/nginx/private:将宿主机的 SSL 私钥挂载到容器中(如果使用 SSL)。

  • depends_on:定义了依赖关系,nginx 服务依赖于 php 服务,意味着 php 服务启动后才会启动 nginx 服务。

  • restart: always:容器退出时会自动重启。

PHP 服务:
  • image: php:8.2-fpm:使用 PHP 8.2 和 FPM 模式运行 PHP。

  • container_name: php:指定容器名称为 php

  • volumes:挂载 wordpress_data 目录,确保 PHP 容器访问 WordPress 数据。

  • restart: always:容器退出时会自动重启。

MySQL 服务:
  • image: mysql:5.7:使用 MySQL 5.7 镜像。

  • container_name: mysql:指定容器名称为 mysql

  • environment:设置 MySQL 环境变量。

    • MYSQL_ROOT_PASSWORD:设置 root 用户的密码。

    • MYSQL_DATABASE:创建数据库 wordpress

    • MYSQL_USER:创建数据库用户 wpuser

    • MYSQL_PASSWORD:设置用户 wpuser 的密码。

  • volumes:挂载 mysql_data 目录,持久化 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;}
}
  • listen 80;: 监听 HTTP 请求,即监听 80 端口。HTTP 是不加密的传输协议,通常用于网站的标准访问。

  • server_name localhost;: 定义了服务器的名称,可以是域名或 IP 地址。localhost 代表的是本地服务器。

  • location / { return 301 https://$host$request_uri; }:

    • 这个配置指示 Nginx 将所有 HTTP 请求重定向到 HTTPS(即 443 端口),通过 301 重定向状态码进行永久重定向。

    • $host: 这个变量表示请求的域名或 IP 地址。

    • $request_uri: 这是请求的 URI 部分(即路径和查询参数),例如 /index.php/about?lang=en

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;}
}
  • listen 443 ssl;: 监听 443 端口,并启用 SSL(即 HTTPS)。443 是 HTTPS 的默认端口,SSL 加密会保护通过此端口的通信。

  • server_name localhost;: 设置服务器的名称,可以是域名或者服务器的 IP 地址。此处的 localhost 表示本地服务器。

  • ssl_certificate /etc/nginx/certs/nginx-selfsigned.crt;:

    • 指定 SSL 证书文件的路径,这里使用的是自签名证书 nginx-selfsigned.crt。在生产环境中,您应该使用由可信证书颁发机构签发的证书。

  • ssl_certificate_key /etc/nginx/private/nginx-selfsigned.key;:

    • 指定 SSL 证书的私钥文件路径。私钥文件需要与证书匹配,并且应该保存在安全位置。

  • ssl_protocols TLSv1.2 TLSv1.3;:

    • 设置 Nginx 使用的 TLS 协议版本。在此配置中,我们启用了 TLS 1.2 和 TLS 1.3,这些是当前推荐的安全协议版本。

    • 注意:SSL 3.0 和 TLS 1.0 及 1.1 已不再被广泛使用,建议禁用它们。

  • ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';:

    • 设置 SSL 加密算法的优先级。这个配置列出了允许使用的加密套件(cipher suites),例如 AES 和 ECDHE。这些加密算法会影响数据加密和解密的方式,推荐使用现代安全的加密算法。

    • TLS_AES_128_GCM_SHA256TLS_AES_256_GCM_SHA384 是 TLS 1.3 中的新算法,它们在性能和安全性方面都有优化。

  • ssl_prefer_server_ciphers on;:

    • 启用服务器端优先选择加密套件。如果客户端和服务器支持不同的加密算法,服务器会优先使用配置中的算法,而不是客户端的首选。

  • root /var/www/html;:

    • 指定网站的根目录。在这里,它指向的是容器中的 /var/www/html 目录,这是存放网站文件的位置。

  • index index.php index.html index.htm;:

    • 设置默认的主页文件。当访问根目录时,Nginx 会根据配置按优先级查找 index.phpindex.htmlindex.htm 文件。

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

    • 这个 location 块配置了 URL 请求的处理规则。Nginx 会尝试访问请求的文件 $uri,如果该文件不存在,则尝试访问 $uri/(即目录索引)。如果两者都不存在,Nginx 会将请求传递给 index.php,并带上请求的参数 ?$args

    • $args:表示请求 URL 中的查询参数。

  • location ~ \.php$ { ... }:

    • 这个 location 块处理以 .php 结尾的请求,即 PHP 文件。

    • include fastcgi_params;:包含 FastCGI 的默认配置参数(如 SCRIPT_FILENAME)。

    • fastcgi_pass php:9000;:将请求转发给运行在 php 容器中的 PHP-FPM 服务,默认使用 9000 端口。

    • fastcgi_index index.php;:指定默认的 PHP 文件为 index.php

    • fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;:将请求的 PHP 文件的路径传递给 PHP-FPM 处理。

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

    • 禁止访问 .ht 文件(如 .htaccess)。这些文件通常包含服务器配置,不应该被公开访问。


三、启动 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 容器

四、安装 WordPress

1. 手动创建 wp-config.php 文件

WordPress 安装时会提示 wp-config.php 文件不存在。你可以手动创建此文件,并填入以下内容:

docker exec -it php /bin/bash
#将页面内的代码复制进去
<?php
/*** The base configuration for WordPress** The wp-config.php creation script uses this file during the installation.* You don't have to use the website, you can copy this file to "wp-config.php"* and fill in the values.** This file contains the following configurations:** * Database settings* * Secret keys* * Database table prefix* * ABSPATH** @link https://developer.wordpress.org/advanced-administration/wordpress/wp-config/** @package WordPress*/
​
// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );
​
/** Database username */
define( 'DB_USER', 'wpuser' );
​
/** Database password */
define( 'DB_PASSWORD', 'wp123456' );
​
/** Database hostname */
define( 'DB_HOST', 'mysql' );
​
/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8mb4' );
​
/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
​
/**#@+* Authentication unique keys and salts.** Change these to different unique phrases! You can generate these using* the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.** You can change these at any point in time to invalidate all existing cookies.* This will force all users to have to log in again.** @since 2.6.0*/
define( 'AUTH_KEY',         'QWtR1Q-)tr}BIgc*c.,rpupTV8xiq//@0g_S>w:dB-W)rFbDzj<ag8~]JB6$N5e ' );
define( 'SECURE_AUTH_KEY',  '5WeRJ<|lOq)@SVv^]`M`AxK0qWl)KVgBez097**B=*!WYqd>5x/Oxh#e=W,{O>$k' );
define( 'LOGGED_IN_KEY',    'kA+AfEY@VbnHR/L^I>BJ>~jm2W[sxAQ1=hnYlt5bg9_~VFSce4#-SHc#x[T1wJ_B' );
define( 'NONCE_KEY',        'SnhU5cKBox#dB4YBrkq|_QRodkisy0(@|(3QpN,O^ gpb~pK[o[zqmleft*sV/$v' );
define( 'AUTH_SALT',        '.bIR@X1NMkCNc4F?)FV^S(BVrg|cl`x,qv8X;$35>gB3b@NIe$f*p3tq$cc/SCv|' );
define( 'SECURE_AUTH_SALT', 'eMQJ-pJ}2Wj/x@]3}u8eXl8I227l>sprMED6~%$:ZF<+]^:wCSc]W~rRYN8=Hb:9' );
define( 'LOGGED_IN_SALT',   'Q<qZEyO$~JM9=2n9+zlg+INL9TAY-W!p~*_<T820PVv6XL6l}x>C $4v%-cZQY$k' );
define( 'NONCE_SALT',       'S1hFKAg]Me0WFk35w>!guf@wObr3%;`1ZzC#.yS(9[jes5IkVaz?_vqxnIpl@r$!' );
​
/**#@-*/
​
/*** WordPress database table prefix.** You can have multiple installations in one database if you give each* a unique prefix. Only numbers, letters, and underscores please!** At the installation time, database tables are created with the specified prefix.* Changing this value after WordPress is installed will make your site think* it has not been installed.** @link https://developer.wordpress.org/advanced-administration/wordpress/wp-config/#table-prefix*/
$table_prefix = 'wp_';
​
/*** For developers: WordPress debugging mode.** Change this to true to enable the display of notices during development.* It is strongly recommended that plugin and theme developers use WP_DEBUG* in their development environments.** For information on other constants that can be used for debugging,* visit the documentation.** @link https://developer.wordpress.org/advanced-administration/debug/debug-wordpress/*/
define( 'WP_DEBUG', false );
​
/* Add any custom values between this line and the "stop editing" line. */
​
​
​
/* That's all, stop editing! Happy publishing. */
​
/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {define( 'ABSPATH', __DIR__ . '/' );
}
​
/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';
​
#然后退出容器重启
docker-compose restart php

将该内容保存为 wp-config.php,并将文件放置在 WordPress 数据目录 /var/www/html 中。

2. 完成 WordPress 安装

访问你的服务器或域名,开始 WordPress 安装。填写数据库信息:

  • 数据库名称wordpress

  • 用户名wpuser

  • 密码wp123456

  • 主机mysql(指向 MySQL 容器)

完成安装并创建管理员账号,即可开始使用 WordPress。

最终页面


五、安装 PHP mysqli 扩展(如果需要)

如果 WordPress 安装过程中提示缺少 mysqli 扩展,可以通过以下步骤安装。

  1. 进入 PHP 容器

    docker exec -it php bash
  2. 安装依赖

    apt-get update
    apt-get install -y libmariadb-dev-compat libmariadb-dev
  3. 安装 PHP 扩展

    docker-php-ext-install mysqli
    docker-php-ext-enable mysqli
  4. 重启 PHP 容器

    docker-compose restart php

六、总结

在 CentOS 上搭建 LNMP 环境并安装 WordPress,涉及以下关键步骤:

  1. 安装 Docker 和 Docker Compose。

  2. 创建项目目录并配置 Docker Compose 和 Nginx 配置。

  3. 启动 Docker 容器并安装 WordPress。

  4. 如有需要,安装 PHP 的 mysqli 扩展以确保 WordPress 能正常连接 MySQL 数据库。

  5. 完成 WordPress 配置并开始使用。

通过 Docker 容器化部署,搭建 LNMP 环境变得简单高效,WordPress 的安装和配置也变得更加灵活。如果遇到任何问题,欢迎随时向我咨询!

http://www.dtcms.com/a/438229.html

相关文章:

  • 从域名到网站建设完成的流程连云港做网站哪家好
  • 企业后端多节点部署实现大文件分片与断点上传
  • 算法入门:专题攻克主题一---双指针
  • 长春市城建网站网站建设相关问题
  • 设计模式(C++)详解——状态模式(State)(1)
  • 【计算机组成原理】深入浅出ASCII码:从历史起源到现代应用的全方位解析
  • [USACO11NOV] Cow Lineup S(黄)
  • 安卓开发学习
  • 全人源抗体制备的 “动物工厂”:转基因与嵌合小鼠技术如何突破免疫原性瓶颈?
  • 郑州网站建设报价电子商务的网站建设要求步骤
  • 做前端网站用什么软件写代码吗如何链接自己做的网站
  • 高阳网站建设网站头部通用代码
  • Ubuntu中安装Viper炫彩蛇教程(亲测可用)
  • 欢迎来到量化实战
  • 网站如何增加百度权重的方法亚马逊官网中国网页版
  • DOM 遍历
  • 《C++ STL:vector类(上)》:详解基础使用核心接口及经典算法题
  • osg中相机矩阵到vsg相机矩阵的转换
  • 怎么给网站做seo上海中风险地区什么时候能解除
  • 在IDEA中使用Git
  • IntelliJ IDEA 2025:最新使用图文教程!
  • 十二、SpringMVC
  • 公司营销型网站建设成都建站seo
  • 什么是GO语言里面的GMP调度模型?
  • Traffic Filtering 流过滤 概念及题目
  • 198种组合算法+优化BiGRU双向门控循环单元+SHAP分析+新数据预测+多输出!深度学习可解释分析,强烈安利,粉丝必备!
  • 兼职开发网站开发建设网站需要学什么
  • SQLite 简介
  • TypeScript 中的 JSX 详解
  • Codesys如何读取轴的当前控制模式