1 安装docker环境
curl -fsSL https://get.docker.com | sh \
&& ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin
2 docker部署mysql环境
2.1 部署mysql
docker run -d \
-p 3306:3306 \
--privileged=true \
--name wp_mysql \
--restart=always \
-v /data/wordpress/wp_mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=YOUR_PASSWD \
mysql:latest
说明:
--privileged=true: 表示容器将以特权模式运行,即容器内的进程将拥有宿主机的权限。CentOS系统下的安全Selinux禁止了一些安全权限,导致MySQL容器在运行时会因为权限不足而报错,所以需要增加该选项
-e: 环境变量,设置镜像中MySQL的root 密码
2.2 创建需要的数据库
#1、进入mysql容器
docker exec -it wp_mysql /bin/bash
#2、在容器内登陆mysql
mysql -u root -p
#3、创建blog数据库
CREATE DATABASE wordpress DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
#4、检查是否创建成功
show databases;
2.3 使用DBeaver客户端连接
配置好数据库连接信息后,测试报错 Public Key Retrieval is not allowed
需更在驱动属性中更改以下配置
3 docker部署wordpress环境
3.1 部署wordpress
docker run -d \
-p 543:80 \
--link wp_mysql \
--restart=always \
--name wp_wordpress \
-v /data/wordpress/wp_wordpress:/var/www/html \
wordpress:latest
说明:
-d: 以"detached"模式运行容器,即容器在后台运行,并且不会在当前终端显示输出。
-p 543:80: 将容器内的80端口映射到宿主机的543端口。这意味着如果你在浏览器中访问宿主机的543端口,请求会被转发到容器的80端口,80端口是Web服务器默认使用的端口。
--link wp_mysql::将当前启动的容器与名为 wp_mysql 的另一个运行中的容器链接起来,允许它们之间通过网络进行直接通信。--link 是一种较老的 Docker 网络功能,现在推荐使用用户自定义网络来连接容器。
--restart=always: 设置重启策略为 always,意味着如果容器停止(无论退出代码是什么),Docker 守护进程总是会重新启动容器。这有助于确保服务的持续可用性,尤其是在生产环境中。
--name wp_wordpress: 为容器指定一个名称 wp_wordpress,这使得对容器的引用和管理更加方便,比如停止和查看日志等操作。
-v /data/wordpress/wp_wordpress:/var/www/html: 将宿主机的目录 /data/wordpress/wp_wordpress 挂载到容器的 /var/www/html 目录。这是 WordPress 容器中 Apache 服务器默认服务文件的位置。通过这种方式,宿主机上的目录可以存储网站文件,确保即使容器重启,数据也不会丢失。此外,这也便于直接在宿主机上管理网站文件。
wordpress:latest: 指定要使用的 Docker 镜像是 wordpress 的最新版本。Docker 会从 Docker Hub 下载最新的官方 WordPress 镜像,如果本地没有缓存的话。
3.2 确认容器是否跑起来
docker ps
3.3 访问配置网站
使用浏览器打开你的wordpress机器的 公网ip:port ,例:http://byteromance.com:543/
按照如下步骤一步一步来。
出现这个页面表示已经创建成功。wordpress基础功能已经配置好了。
4 docker部署nginx环境
4.1 先决条件
如图所示:
4.1.1 配置证书和密钥
如何申请免费证书:使用Certbot申请 Let’s Encrypt证书 轻松获得免费 SSL 证书并自动续签
mkdir -p /data/wordpress/wp_nginx/certs & cd /data/wordpress/wp_nginx/certs
#将证书和密钥复制到该文件下
4.1.2 配置 nginx.conf
mkdir -p /data/wordpress/wp_nginx/confs & cd /data/wordpress/wp_nginx/confs
vim nginx.conf
nginx.conf文件内容如下:
worker_processes auto; #worker_processes指的是开启的线程数,一般跟逻辑CPU核数一致
events {
worker_connections 1024; #定义每个进程的最大连接数,受系统进程的最大打开文件数量限制
}
http {
server {
listen 443 ssl;
server_name wordpress.byteromance.com;
ssl_certificate /etc/nginx/certs/public.pem;
ssl_certificate_key /etc/nginx/certs/private.key;
root /var/www/html;
index index.php index.html index.htm;
location / {
proxy_pass http://127.0.0.1:543; # 反向代理到543端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 重定向HTTP到HTTPS
error_page 497 https://$host$request_uri;
}
# 确保HTTP流量被重定向到HTTPS
server {
listen 80;
server_name wordpress.byteromance.com;
return 301 https://$host$request_uri;
}
}
4.2 配置nginx反向代理
docker run -d \
--name wp_nginx \
--restart=always \
--net=host \
-v /data/wordpress/wp_nginx/confs/nginx.conf:/etc/nginx/nginx.conf \
-v /data/wordpress/wp_nginx/htmls:/usr/share/nginx/html \
-v /data/wordpress/wp_nginx/logs:/var/log/nginx \
-v /data/wordpress/wp_nginx/certs:/etc/nginx/certs \
nginx:latest
说明:
-d: 启动容器在后台运行(detached mode),即容器在后台执行,终端不会显示容器的输出。
--name wp_nginx: 设置容器的名称为 wp_nginx。这个名称用于Docker命令中引用容器,如 docker stop wp_nginx 或 docker logs wp_nginx。
--restart=always: 设置容器的重启策略为 always,确保在容器退出时(无论退出状态码如何),Docker都会自动重启容器。这有助于确保关键服务如Web服务器在遇到问题时能够快速恢复。
--net=host: 使用宿主机的网络堆栈。这意味着容器不会获得一个隔离的网络环境,而是直接使用宿主机的IP地址和端口。这样容器可以监听宿主机的端口,而无需进行端口映射。
-v /data/wordpress/wp_nginx/confs/nginx.conf:/etc/nginx/nginx.conf: 将宿主机上的 /data/wordpress/wp_nginx/confs/nginx.conf 文件挂载到容器内的 /etc/nginx/nginx.conf。这允许你直接在宿主机上编辑 Nginx 的配置文件,容器内的 Nginx 会使用这个配置文件。
-v /data/wordpress/wp_nginx/htmls:/usr/share/nginx/html: 将宿主机上的 /data/wordpress/wp_nginx/htmls 目录挂载到容器内的 /usr/share/nginx/html。这是 Nginx 默认的静态文件服务目录,使得你可以在宿主机上管理网页文件。
-v /data/wordpress/wp_nginx/logs:/var/log/nginx: 将宿主机上的 /data/wordpress/wp_nginx/logs 目录挂载到容器内的 /var/log/nginx。这样,所有 Nginx 生成的日志文件都会直接存储在宿主机上,方便日志管理和分析。
-v /data/wordpress/wp_nginx/certs:/etc/nginx/certs: 将宿主机上的 /data/wordpress/wp_nginx/certs 目录挂载到容器内的 /etc/nginx/certs。这个目录用于存放 SSL/TLS 证书,Nginx 配置文件中可以引用这些证书来启用 HTTPS。
nginx:latest: 指定使用 Docker Hub 上的 nginx 镜像的最新版本。如果本地没有这个镜像,Docker 会从 Docker Hub 自动下载。
4.3 修改wordpress URL
修改完成后,发现前端文章可以打开,但是后端页面无法打开,此时还需要修改wordpress对应的mysql数据库和php代码(记得备份哦)
4.4 修改mysql数据和php代码
4.4.1 修改mysql
UPDATE wp_options SET option_value = replace(option_value, 'http://byteromance.com', 'https://wordpress.byteromance.com') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET guid = replace(guid, 'http://byteromance.com','https://wordpress.byteromance.com');
UPDATE wp_posts SET post_content = replace(post_content, 'http://byteromance.com', 'https://wordpress.byteromance.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://byteromance.com','https://wordpress.byteromance.com');
4.4.2 修改php
1、打开网站根目录文件\wp-includes\functions.php
,找到代码 require( ABSPATH . WPINC . '/option.php' );
大概在第8行。
在下方添加以下代码:
add_filter('script_loader_src', 'agnostic_script_loader_src', 20,2); function agnostic_script_loader_src($src, $handle) { return preg_replace('/^(http|https):/', '', $src); }
add_filter('style_loader_src', 'agnostic_style_loader_src', 20,2); function agnostic_style_loader_src($src, $handle) { return preg_replace('/^(http|https):/', '', $src); }
2、打开网站根目录\wp-config.php文件找到代码
*
* @package WordPress
*/
$_SERVER['HTTPS'] = 'on';
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);
5 验证
1、使用curl查看http和https情况,此时http已经重定向。
2、使用网页登录后端
Comments | 1 条评论
博主 嘿嘿
写的真不错
(`・ω・´)