本文最后更新于0 天前,其中的信息可能已经过时,如有错误请发送邮件到d535048@foxmail.com
系统环境Centos7
一、前置环境
#1.替换为阿里云CentOS 7 vault源(适配EOL)
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
#2.清理并重建yum缓存
yum clean all && yum makecache
#3.关闭防火墙和SElinux(生成环境中按需开发端口)
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
二、安装Docker
#1.卸载旧版Docker
yum remove -y docker docker-common docker-selinux docker-engine
#2.安装Docker依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
#3.配置阿里云Docker源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#4.安装Docker-ce
yum install -y docker-ce docker-ce-cli containerd.io
#5.配置Docker加速器
cd /etc/docker
vim daemon.json
#写入以下内容
{
"registry-mirrors" : [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://ccr.ccs.tencentyun.com",
"https://docker.1panelproxy.com",
"https://5e96702d4787418295070cded678a7b6.mirror.swr.myhuaweicloud.com",
"https://docker.m.daocloud.io",
"https://docker.imgdb.de",
"https://docker.wanpeng.life",
"https://docker.1panel.live",
"https://hk11.606166.xyz",
"https://docker.1ms.run",
"https://docker.domys.cc",
"https://docker-0.unsee.tech",
"https://docker.hlmirror.com",
"https://cjie.eu.org",
"https://hub.rat.dev",
"https://docker.rainbond.cc"
]
}
#6.保存文件并重启Docker服务
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
#或
systemctl restart docker.service
systemctl enable docker.service
#7.验证Docker安装
docker --verison
三、安装Docker Compose
因为网络问题,使用curl命令下载时间过长,这里选择去github下载对应版本二进制文件
#这里下载的是2.20.3版本,将下载完的二进制文件保存至/usr/local/bin/docker-compose
#下载完成后,为二进制文件赋予执行权限
chmod +x /usr/local/bin/docker-compose
#验证安装,成功安装显示Docker Compose版本信息
docker-compose --version
四、创建LNMP目录结构
为了方便管理,在宿主机上创建相应的目录结构
#创建核心目录(配置/数据/代码分离)
mkdir -p /opt/lnmp/{nginx/conf.d,nginx/logs,mysql/data,php/conf,wordpress}
#赋予权限(避免容器读写权限问题)
chmod -R 777 /opt/lnmp/mysql/data /opt/lnmp/nginx/logs /opt/lnmp/wordpress
五、编写自定义PHP镜像(采用自定义镜像时有问题,暂未解决)
因为拉取的是php:7.4-fpm的官方镜像,其中没有mysql扩展,所以采用自定义镜像
FROM php:7.4-fpm
# 安装mysqli扩展(用新包名default-libmysqlclient-dev)
RUN apt update && \
apt install -y default-libmysqlclient-dev gcc make -y && \
docker-php-ext-install mysqli
六、编写Docker Compose配置文件(yml)
#在/opt/lnmp目录下创建docker-compose.yml
vim /opt/lnmp/docker-compose.yml
#写入以下内容
version: '1.0'
services:
# 1. MySQL服务(WordPress依赖)
mysql:
image: mysql:5.7 # 推荐5.7版本(兼容WordPress)
container_name: lnmp-mysql
restart: always # 容器异常自动重启
environment:
MYSQL_ROOT_PASSWORD: 123456 # 根密码(自行修改)
MYSQL_DATABASE: wordpress # 预创建WordPress数据库
MYSQL_USER: wpuser # WordPress专用用户
MYSQL_PASSWORD: wppass # 专用用户密码(自行修改)
TZ: Asia/Shanghai # 时区
volumes:
- /opt/lnmp/mysql/data:/var/lib/mysql # 数据持久化
networks:
- lnmp-network
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci # 字符集(支持emoji)
# 2. PHP-FPM服务(处理PHP脚本)
php:
image: php:7.4-fpm # 官方镜像中不含mysqli扩展,更换为自定义镜像
# buiid:
# context: .
# dockerfile: Dockerfile-php
container_name: lnmp-php
restart: always
volumes:
- /opt/lnmp/wordpress:/var/www/html # WordPress代码挂载
- /opt/lnmp/php/conf:/usr/local/etc/php/conf.d # PHP自定义配置
networks:
- lnmp-network
depends_on:
- mysql # 依赖MySQL,先启动MySQL
# 3. Nginx服务(反向代理+静态资源)
nginx:
image: nginx:latest
container_name: lnmp-nginx
restart: always
ports:
- "80:80" # 映射宿主机80端口到容器80
volumes:
- /opt/lnmp/nginx/conf.d:/etc/nginx/conf.d # Nginx虚拟主机配置
- /opt/lnmp/nginx/logs:/var/log/nginx # 日志持久化
- /opt/lnmp/wordpress:/var/www/html # 挂载WordPress代码
networks:
- lnmp-network
depends_on:
- php # 依赖PHP,先启动PHP
# 自定义网络(容器间通信)
networks:
lnmp-network:
driver: bridge
这里在后面重复的时候发现通过Dockerfile文件构建镜像时会因网络连接超时导致无法正常拉取php镜像(网上给出的方法也没有解决问题,怀疑是网络原因,暂未解决),因此这里选择拉取php官方镜像后进入容器内部安装mysql扩展
# 进入lnmp-php容器
docker exec -it lnmp-php bash
# 1. 更新apt源(确保能找到最新包)
apt update
# 2. 安装替代包+编译依赖(替换libmysqlclient-dev为default-libmysqlclient-dev)
apt install -y default-libmysqlclient-dev gcc make -y
# 3. 安装并启用mysqli扩展(核心步骤)
docker-php-ext-install mysqli
#4. 退出容器
exit
# 宿主机执行,重启PHP容器
docker restart lnmp-php
# 验证mysqli扩展是否生效(输出mysqli即成功)
docker exec -it lnmp-php php -m | grep mysqli
七、配置Nginx反向代理
#在/opt/lnmp/nginx/conf.d目录下创建wordpress.conf
vim /opt/lnmp/nginx/conf.d/wordpress.conf
#写入以下内容
server {
listen 80;
server_name _; #匹配所有域名(生产环境填写实际域名)
root /var/www/html; #对应PHP容器的代码目录
index index.php index.html index.htm;
#日志配置
access_log /var/log/nginx/wordpress_access.log;
error_log /var/log/nginx/wordpress_error.log;
#wordpress伪静态规则??
location / {
try_files $uri $uri/ /index.php$args;
}
#PHP脚本转发到PHP-FPM
location ~\.php$ {
fastcgi_pass php:9000; #服务名+PHP-FPM端口(容器内通信)
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#禁止访问隐藏文件
location ~ /\.ht {
deny all;
}
}
八、启动LNMP容器集群
#进入lnmp目录
cd /opt/lnmp
#启动容器(--build强制构建自定义PHP镜像,首次启动会下载镜像,需要一段时间)
docker-compose up -d --build
#查看容器状态,所有容器应为UP状态
docker-compose ps
九、部署WordPress
#进入WordPress目录
cd /opt/lnmp/wordpress
#下载WordPress
wget https://cn.wordpress.org/latest-zh_CN.tar.gz
#解压并整理文件
tar -zxvf latest-zh_CN.tar.gz
mv wordpress/* ./
rm -rf wordpress latest-zh_CN.tar.gz
#确保权限正确
chmod -R 777 /opt/lnmp/wordpress
十、Web界面完成WordPress配置安装
1.打开浏览器,访问服务器IP
2.选择 “简体中文”,点击 “继续”;
- 填写数据库信息(以下为默认配置,若修改过 docker-compose.yml 请对应调整):
- 数据库名:
wordpress - 用户名:
wpuser - 密码:
wppass - 数据库主机:
mysql(服务名,Docker 内部通信) - 表前缀:
wp_
- 数据库名:
- 点击 “提交”→“运行安装程序”;
- 设置站点标题、管理员账号 / 密码 / 邮箱,完成安装后即可登录。
十一、常用命令
# 重启所有容器
docker-compose restart
# 查看容器日志(排查问题)
docker-compose logs -f nginx # 查看Nginx日志
docker-compose logs -f mysql # 查看MySQL日志
docker-compose logs -f php # 查看PHP日志
# 修改MySQL root密码(宿主机执行)
docker exec -it lnmp-mysql mysql -uroot -p123456 -e "ALTER USER 'root'@'%' IDENTIFIED BY '新密码'; FLUSH PRIVILEGES;"
# 停止容器(保留数据)
docker-compose stop
# 停止并删除容器(数据卷仍保留)
docker-compose down