起因
在大概2016年左右用搭建过一次wordpress的博客,那时候是在Windows环境下,通过Tomcat傻瓜式搭建的。一来是那个云服务器已经过期了,二来是访问速度实在是很慢,现在差不多10年过去了很多技术也和当年不一样了。所以这次简单再在Linux环境下搭建试试看。
本次环境是在cenos7.9,mysql8,然后docker和wordpress都使用的最新版本(截止2024年11月)。
架构
- 安装docker
- 安装mysql
- 使用docker在容器中运行wordpress
- 简单配置Wordpress
- 配置nginx、slb和https、域名解析等
1.安装docker
省流,使用如下脚本安装。
python
#!/bin/bash
# 安装指定版本docker
# 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 指定阿里云的repo,国外的镜像很慢
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 查看可用的版本
yum list docker-ce --showduplicates | sort -r
# 安装指定版本docker
sudo yum install -y docker-ce-24.0.6-1.el7 docker-ce-cli-24.0.6-1.el7 containerd.io docker-buildx-plugin docker-compose-plugin
# docker的systemd配置,代理配置
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://registry.aliyuncs.com",
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn"
],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
# 查看版本
docker --version
# 启动docker
systemctl start docker
# 设置开机启动
systemctl enable docker
2.安装mysql
省流,使用如下脚本即可。
python
#!/bin/bash
# 安装mysql8
# 下载rpm文件
wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm -P /opt/
# 导入License
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
# 安装mysql
yum -y install /opt/mysql80-community-release-el7-3.noarch.rpm
yum -y install mysql-community-server
# 启动mysql
systemctl start mysqld
init_pw=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
new_pw="Abc@1234"
# 设置root密码,会有一个warning,但是修改成功了
mysqladmin -uroot -p"$init_pw" password $new_pw
# 配置允许远程登录
sed -i 's/bind-address/#bind-address/g' /etc/my.cnf
# 更新用户主机
mysql -uroot -p"$new_pw" -e "use mysql;update user set user.Host='%' where user.User='root';flush privileges;"
sleep 2
mysql -uroot -p"$new_pw" -e "ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Abc@123';flush privileges;"
# 重启mysql
systemctl restart mysqld
# 开启3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重启一下防火墙服务
firewall-cmd --reload
3.安装Wordpress
拉取镜像
bash
docker pull wordpress
使用如下命令在docker'中启动Wordpress
bash
mkdir /opt/wordpress
docker run -it --name wordpress -p 9898:80 -v /opt/wordpress:/var/www/html -d wordpress
简单解释下各个参数:
- ---name:给容器起一个名字
- 9898:80:将宿主机的9898端口转发到容器的80端口
- -v:挂载的目录,将宿主机目录挂载到容器中指定目录,这样便于上传文件
- -d:后台运行
- 刚刚的镜像名称
4.配置Wordpress
在浏览器访问 http://ip:9898/wp-admin/setup-config.php 进行安装。注意,我这里可以通过这种方式访问,是因为配置了到阿里云的vpn,相当于是内网。如果你的云服务器带公网地址的话可以直接访问,否则需要设置了SLB之后才能访问到。这块请自行取舍,第四步最后再配置也可以的。
输入数据库信息,注意以下已默认在数据库建了一个叫db_wordpress的数据库
也可以参考如下图片,手动进行配置。在上面图片上填写提交,实际上就会生成一个wp-config.php文件。
修改数据库配置文件
bash
[root@node4 wordpress]# vim /opt/wordpress/wp-config-sample.php
修改以下部分
完事之后点上面的提交,后面的设置就比较简单了。根据画面提示进行操作即可。
5.配置https访问
配置https有2条路可以走,要么使用nginx,要么直接用阿里云的负载均衡。
顺便这里默认你已经配置好了域名解析和域名备案什么的。
-
nginx参考配置。证书申请略。请准备好证书丢在/etc/nginx/certs/里
pythonserver { listen 443 ssl; server_name kayotin.cn; 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 https://127.0.0.1:9898; # 反向代理到9898端口 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 kayotin.cn; return 301 https://$host$request_uri; }
-
阿里云的slb参考配置(不使用nginx:
阿里云的负载均衡就相当于一个nginx,里面可以直接添加证书。
-
网站主url修改
如下所示,在数据库的表wp_options中,这里请修改成https加你的域名
6.开启https访问后的一些配置修改
终于可以通过https访问网站了,再也不会有一个不安全的标记了。但是还有很多问题,首先是格式不太对,这是因为很多css样式的引用失败了;另外你会发现后台也登录不了。可以通过如下手段解决。
-
修改functions.php配置
pythonvim /opt/wordpress/wp-includes/functions.php
在最下面添加如下配置,顺便vim可以用shift+G一下去到最下方。
pythonadd_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); }
-
修改wp-config.php
pythonvim /opt/wordpress/wp-config.php
在最前面加上如下代码:
python$_SERVER['HTTPS'] = 'on'; define('FORCE_SSL_LOGIN', true); define('FORCE_SSL_ADMIN', true);
终于大功告成啦。