一、解决方案
首先我们需要分析问题的解决方案,运行个人博客需要web服务器,数据库,个人博客前端。而WordPress可以完美将三者结合为一个整体,是简历个人博客的首选。
WordPress 建立在 PHP 和 MySQL 之上,并使用 GPLv2 进行许可,是互联网上超过 43% 的站点的首选平台。因为其部署简单,只需简单的几条命令部署后便不必再书写任何代码,用使用软件的习惯创建您的个人博客而不必陷入繁杂的代码书写中。
要运行 WordPress,建议您的服务器支持:
- PHP 7.4+。
- MySQL 版本 8.0+ 或 MariaDB 版本 10.5+。
- HTTPS
- 至少800MB内存(推荐内存2G或以上)和10G以上的存储(用于存储站点资源)
- phpmyadmin等数据库管理软件(可选,如果您需要外部编辑数据库)
Web服务器推荐使用 Apache 或者 Nginx, 因为其稳定性和丰富的功能适合运行 WordPress,但是任何支持 PHP 和 MySQL 的服务器都可以。
注意: 如果您处于只有较旧 PHP 或 MySQL 版本的旧环境中,WordPress 仍然可以在 7.0+ 以及 MySQL 5.5.5+ 上工作。 然而,这些版本已经结束了它们的官方支持周期,并且可能使您的站点暴露于安全漏洞之中。
主机vps建议购买国内大厂的云服务器,如腾讯云,阿里云,华为云等。
以下配置均为完全自建所需的配置,即不使用外部mysql,且具备较充足的冗余能力推荐配置为---2核2G---轻量应用服务器;当然有钱上2核4G的云服务器更好,但是对于搭建个人博客而言并不划算。
服务器细致配置条目如下:
- 至少准备2G以上的内存,且分配至少1G的交换空间用于存储缓存数据,wordpress以内存换性能和便捷性,没有大内存玩什么wordpress
- 使用docker全量部署参考内存[mysql8.0 --400MB * wordpress --400MB openresty --50MB]
- 确保购买的服务器使用SSD硬盘,机械硬盘会严重拖慢交换分区速度
- 国内服务器务必备案,否则服务器厂商会封禁80、443端口,无法直接进行域名解析访问网站
- 确保服务器带宽为3M或以上,且配置CDN加速(你也不想10秒还打不开你的网站吧)
切记:最小权限原则,自行搭建的mysql配置只允许本机访问,且使用独立的数据库用户,只在数据审核时放通mysql的外部访问!!!!!
1-面板安装-推荐
安装主流的图形化linux管理面板,如宝塔,1panel等,使用图形面板能极大提升服务器运维效率,这种方法最为推荐。
面板安装完成后,只需要进入管理面板的应用商店,安装docker容器后在容器内依次安装MySQL,WordPress,OpenResyt即可。使用面板安装免去了繁杂的配置文件调整部分,如需个性化配置也有图形化页面支持,非常方便。
软件安装面板
容器化安装应用
2-命令安装
注:使用命令安装可能会遇到各种奇奇怪怪的问题,博主更推荐使用面板工具一键部署。
相比传统软件直接安装,容器化部署极少产生垃圾,出现问题可直接摧毁容器重新拉取镜像而不改变主机运行环境,且更换迁移服务更加方便,是新一代的软件安装方式。
- 安装docker
- 拉取MySQL,WordPress,OpenResty
- 启动并创建WordPress数据库
- 配置OpenResyt反向代理,启动WordPress
首先,我们通过命令行安装 Docker,更换 Docker 软件源为阿里云,然后拉取 WordPress、MySQL 和 OpenResty,并成功搭建个人博客。
重要提示:由于大陆地区的网络问题,docker镜像的官方源极不稳定,此处推荐直接将镜像源替换为国内的私服,例如阿里云,腾讯云,华为云等。非大陆地区服务器则不必担心。
本文章示例采取更换为阿里云镜像。
1. 安装 Docker
首先,更新你的包索引并安装必要的软件包:
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
添加 Docker 的官方 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
将 Docker 仓库添加到 APT 源中:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
更新包索引,并安装 Docker CE:
sudo apt-get update
sudo apt-get install docker-ce
启动 Docker 并设置开机自启:
sudo systemctl start docker
sudo systemctl enable docker
2. 更换软件源为阿里云
首先,创建或编辑 Docker 配置文件 /etc/docker/daemon.json:
sudo nano /etc/docker/daemon.json
添加以下内容以使用阿里云镜像源:
{
"registry-mirrors": ["https://<你的阿里云加速器ID>.mirror.aliyuncs.com"]
}
注意:阿里云镜像源是私有镜像源,必须登录自己的容器管理页面才能查看,如果没有就需要自己申请一个
保存文件并重新启动 Docker 服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
3. 拉取并运行 WordPress 和 MySQL
创建一个 Docker 网络,以便容器之间可以互相通信:
docker network create wordpress-network
拉取并运行 MySQL 容器:
docker run --name wordpress-mysql --network wordpress-network -e MYSQL_ROOT_PASSWORD=your_password -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress_password -d mysql:8.2
拉取并运行 WordPress 容器:
docker run --name wordpress --network wordpress-network -e WORDPRESS_DB_HOST=wordpress-mysql:3306 -e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=wordpress_password -e WORDPRESS_DB_NAME=wordpress -p 8080:80 -d wordpress
3.1 MySQL 容器配置
我们之前已经启动了MySQL数据库。
docker run --name wordpress-mysql --network wordpress-network -e MYSQL_ROOT_PASSWORD=your_password -e MYSQL_ATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress_password -d mysql:8.2
启动的命令参数具有以下释义,这些环境变量的含义如下:
MYSQL_ROOT_PASSWORD:MySQL root 用户的密码。MYSQL_DATABASE:要创建的数据库名称(在这个例子中是wordpress)。MYSQL_USER:要创建的数据库用户(在这个例子中是wordpress)。MYSQL_PASSWORD:数据库用户的密码(在这个例子中是wordpress_password)。
3.2 WordPress 容器配置
我们已经使用以下命令启动了 WordPress 容器:
docker run --name wordpress --network wordpress-network -e WORDPRESS_DB_HOST=wordpress-mysql:3306 -e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=wordpress_password -e WORDPRESS_DB_NAME=wordpress -p 8080:80 -d wordpress
这些环境变量的含义如下:
WORDPRESS_DB_HOST:MySQL 容器的地址和端口(在这个例子中是wordpress-mysql:3306,因为我们使用了 Docker 网络wordpress-network)。WORDPRESS_DB_USER:WordPress 连接数据库时使用的用户名(在这个例子中是wordpress)。WORDPRESS_DB_PASSWORD:WordPress 连接数据库时使用的密码(在这个例子中是wordpress_password)。WORDPRESS_DB_NAME:WordPress 使用的数据库名称(在这个例子中是wordpress)。
3.3 访问 WordPress 安装页面
启动所有容器后,打开浏览器并访问 http://你的服务器IP:8080。你将看到 WordPress 的安装页面。
3.4 配置 WordPress 数据库
在 WordPress 安装页面上,你需要输入以下数据库信息:
- 数据库名称:
wordpress(与MYSQL_DATABASE一致) - 用户名:
wordpress(与MYSQL_USER一致) - 密码:
wordpress_password(与MYSQL_PASSWORD一致) - 数据库主机:
wordpress-mysql:3306(与WORDPRESS_DB_HOST一致) - 表前缀:
wp_(可以使用默认值,也可以根据需要进行更改)
输入这些信息后,点击“提交”按钮。如果数据库配置正确,WordPress 将连接到数据库并继续安装过程。
3.5 完成 WordPress 安装
按照页面提示完成 WordPress 的安装过程,包括设置站点标题、管理员用户名和密码等信息。完成后,你将能够访问并管理你的 WordPress 博客。
通过以上步骤,你应该已经成功配置了 WordPress 数据库,并完成了 WordPress 的安装。
4. 拉取并运行 OpenResty
拉取并运行 OpenResty 容器:
docker run --name openresty --network wordpress-network -p 80:80 -v /path/to/your/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf:ro -d openresty/openresty:alpine
你需要创建一个适当的 nginx.conf 文件,以便 OpenResty 能够代理到 WordPress 容器。以下是一个示例配置文件:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream wordpress {
server wordpress:80;
}
server {
listen 80;
location / {
proxy_pass http://wordpress;
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;
}
}
}
将这个配置文件保存为 nginx.conf,并将其路径替换为 /path/to/your/nginx.conf。
5. 验证安装
打开浏览器并访问 http://你的服务器IP,你应该会看到 WordPress 的安装页面。按照提示完成 WordPress 的安装和配置。
通过以上步骤,你将成功在 Linux 服务器上安装 Docker,更换 Docker 软件源为阿里云,并通过 Docker 容器搭建 WordPress、MySQL 和 OpenResty,成功搭建个人博客。
3-手动上传 X
这种方式仅适合需要公司内网或开发环境等无外网访问的情况,个人用户极度不推荐这种方式。由于购买的云服务器现在均包含可访问的独立IP地址,故此处不讲解这种安装方式。
二、主题美化
WordPress支持可扩展的主题美化,在开源社区包含众多开源的主题,且绝大多数主题均为开箱即用的发行版。
对于Sakura主题,我们可以采取以下方式优化页面显示
1. 悬挂备案号
凡是大陆地区的服务器进行互联网访问必须悬挂备案号,可以在页面尾部添加一下HTML代码:
<p style="text-align: left; position: absolute; right: 3%; font-family: 'Arial', sans-serif; font-size: 14px; color: #555; background-color: #f9f9f9; padding: 10px; border-radius: 5px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);">
版权所有 © 2024 Atri 保留所有权利.
<br>
备案号:ICP备案号占位123123123
</p>
显示效果如下:
版权所有 © 2024 Atri 保留所有权利.
备案号:ICP备案号占位123123123
2. 控制台输出信息
在页尾添加以下JS代码
<!-- JavaScript控制台语句 -->
<script>
function printBeautifulMessages(...messages) {
// 定义样式
const styles = [
'color: white',
'background: linear-gradient(to right, #ff7e5f, #feb47b)',
'padding: 10px 20px',
'font-size: 20px',
'border-radius: 10px',
'text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3)',
'font-family: "Comic Sans MS", cursive, sans-serif'
].join(';');
// 打印每条消息
messages.forEach(message => {
console.log(`%c${message}`, styles);
});
}
// 调用函数打印多条消息
printBeautifulMessages(
'你好,异世界的漂泊者,欢迎访问先行公约',
'如遇到问题,请发送邮件至邮箱:admin@waveraven.cn',
'我们的管理员会在24小时内回复您的邮件'
);
</script>
当页面完成加载后,浏览器web页面控制台便会输出以下内容(按F12便可开启浏览器控制台):
3. 发送弹幕小按钮
在页尾添加以下JS代码和样式表:
JS代码:
<!-- 弹幕容器 -->
<div id="danmaku-container"></div>
<!-- 弹幕按钮 -->
<button id="danmaku-button">别点我>-<</button>
<!-- JavaScript弹幕库 -->
<script>
// 随机弹幕内容数组,录入想要现实的内容。
const danmakuTexts = [
'这是一个弹幕!'
];
// 弹幕函数
function createDanmaku() {
const container = document.getElementById('danmaku-container');
const danmaku = document.createElement('div');
danmaku.className = 'danmaku';
// 随机选择弹幕内容
const randomText = danmakuTexts[Math.floor(Math.random() * danmakuTexts.length)];
danmaku.innerText = randomText;
// 随机位置和速度
const startPos = Math.random() * (window.innerHeight - 50) + 'px';
const speed = Math.random() * 5 + 5 + 's';
danmaku.style.top = startPos;
danmaku.style.animationDuration = speed;
container.appendChild(danmaku);
// 动画结束后移除弹幕
danmaku.addEventListener('animationend', () => {
container.removeChild(danmaku);
});
}
// 按钮点击事件
document.getElementById('danmaku-button').addEventListener('click', createDanmaku);
// 滚动事件,滑动到底部才显示按钮
window.addEventListener('scroll', () => {
const button = document.getElementById('danmaku-button');
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
button.style.display = 'block';
} else {
button.style.display = 'none'; /* 离开底部时隐藏按钮 */
}
});
</script>
弹幕样式:
<style>
#danmaku-container {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
overflow: hidden;
z-index: 9999;
}
.danmaku {
position: absolute;
white-space: nowrap;
font-size: 20px;
color: white;
text-shadow: 1px 1px 2px black;
animation: moveDanmaku linear, fadeInOut 5s;
}
@keyframes moveDanmaku {
from {
transform: translateX(100%);
}
to {
transform: translateX(-100%);
}
}
@keyframes fadeInOut {
0% {
opacity: 0;
}
10% {
opacity: 1;
}
90% {
opacity: 1;
}
100% {
opacity: 0;
}
}
#danmaku-button {
position: fixed;
bottom: 20px;
left: 5%; /* 改为左边显示 */
padding: 10px 20px;
font-size: 16px;
z-index: -1; /* 确保按钮在弹幕之上 */
display: none;
background-color: #007BFF; /* 按钮背景色 */
color: #ffffff; /* 按钮文字颜色 */
border: none; /* 去掉边框 */
border-radius: 5px; /* 圆角边框 */
cursor: pointer; /* 鼠标悬停时的光标形状 */
transition: background-color 0.3s; /* 背景色过渡效果 */
}
#danmaku-button:hover {
background-color: #0056b3; /* 鼠标悬停时的背景色 */
}
#danmaku-button:active {
background-color: #003d79; /* 鼠标按下时的背景色 */
}
</style>
此时,将页面滑动到最底部,便可显示发送弹幕按钮,点击即可发送弹幕:
弹幕效果演示
注:在sakura主题中使用弹幕按钮,只有在主页面下滑到最低端才会显示,离开页面底部后便会被图层遮盖隐藏,如果想使按钮常态显示,可删除以下代码:
// 滚动事件,滑动到底部才显示按钮
window.addEventListener('scroll', () => {
const button = document.getElementById('danmaku-button');
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
button.style.display = 'block';
} else {
button.style.display = 'none'; /* 离开底部时隐藏按钮 */
}
});
参考文档
- [1] Docker 官方文档: https://docs.docker.com/
- [2] WordPress 官档: https://wordpress.org/support/article/how-to-install-wordpress/
- [3] MySQL 官方文档: https://dev.mysql.com/doc/
- [4] OpenResty 官方文档: https://openresty.org/en/
