回忆一下19年在无屏幕笔记本上折腾起来的小站
为了给这个无屏幕,HDMI接口和有线网口全部损坏的笔记本装ubuntu,还跑去借了VGA接口的显示器,装机打开ssh连上热点后再拿回家
当年申请下公网v4,蹭了二级域名,从零开始折腾了nextcloud,各种在线小游戏、小工具,live2d看板娘,这个小站就是我跟计算机打交道的起点。
尽管它稳定地运行了五年,甚至现在还在用它挂前端和ddns,但它确实是台电子垃圾。这个型号的华硕笔记本的无线网卡在ubuntu下会卡死速率上限,过去的我没能解决它,现在的我不需要去解决它了——
因为我获得了千兆上下行对等公网V6专线!

于是乎,作为充分利用专线的第一步,以及记录自己大学折腾的小玩具,正经地搭一个博客来记录自己的折腾日记。
由于在ubuntu上已经有过装apache的经验,且出于现实地理位置限制,综合考虑后选择在笔记本上使用apache建站,博客方案使用wordpress,mysql使用远程连接,方便后续在其他服务器部署博客时共用数据库。
踩坑记录
apache和php的安装
参考博客:https://cloud.tencent.com/developer/article/1938414
httpd -k start #启动
httpd -k stop #停止
httpd -k restart #重启服务,后续使用最频繁
在执行完博客内容后,在wordpress官网下载最新版本并解压到apache目录下。
httpd -k start -n apache2.4 #-n后的参数根据自己在安装时设定的自定义访问名称进行更改
打开wordpress下的readme.html,根据指引跳转到./wp-admin后,发现进入了简陋的文件夹页面,没有自动进入index.php
在httpd.conf中找到以下内容,为DirectoryIndex 添加index.php,实现自动打开index文件
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
手动开启php.ini中的扩展。
重新启动apache后进入install.php,弹出提醒:
您的 PHP 似乎没有安装运行 WordPress 所必需的 MySQL 扩展。
请检查 PHP 扩展mysqli
已安装并启用。
若您不明白这些术语的含义,则应联系您的主机商。若仍需要帮助,可随时访问 WordPress 支持论坛。
需要先为extension_dir = "ext"设置正确的目录,否则在php.ini中开启了扩展也无法正常使用。尝试.\ext的邪道写法,惨遭失败,改为绝对路径后成功。
;extension=exif ; Must be after mbstring as it depends on it
;extension=mysqli ;↑启用exif扩展需要先打开mbstring
开启方式:去除扩展前的;即可
对于后面注明了依赖的扩展,需要将依赖一并打开

使用远程MySQL
我愿称之为脱了裤子放屁给自己添麻烦
给自己挖了个大坑,别模仿!
一开始想用snap安装nextcloud时附赠的MariaDB,但是找不到常规安装时应有的my.cnf,取而代之的是auto.cnf文件。在nextcloud社区里查到,snap禁止mysql联网,将配置设定为了只读,只在github放给你看不让你改(
于是只能自己从头开始安装MySQL
sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
#修改bind-address = 127.0.0.1 -> bind-address = 0.0.0.0
sudo ss -tuln | grep 3306 #检测3306端口是否开启
#tcp LISTEN 0 151 0.0.0.0:3306 0.0.0.0:* 出现这样的输出才是打开了
创建远程数据库和对应账户
sudo mysql -u root -p #进入mysql
CREATE DATABASE wordpress_db;
CREATE USER 'wordpress_user'@'%' IDENTIFIED BY '在这里填写你设定的密码';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wordpress_user'@'%';
FLUSH PRIVILEGES;
exit;
蓝色字体是可以自己定义的名称
sudo ufw allow 3306 #开放linux防火墙,允许3306端口通行
配置WSL到Windows的端口映射
因为我是部署在WSL中,需要将WSL的端口映射到Windows下才能映射到公网。
WSL的映射Debug方法:如果localhost能访问,127.0.0.1访问不到,那么说明WSL到Windows的映射未成功
- 获取WSL的ip
- 在wsl中输入ifconfig
- 删除映射:
- 首先,查看当前的端口代理设置,以确认你要删除的记录。
- netsh interface portproxy show all
- 删除特定的端口代理记录
- netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=22#根据端口进行删除
- 添加端口映射(需要管理员powershell)
- netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=3306 connectaddress=IP地址 connectport=3306
- IP为你的WSL的IP地址
- netsh interface portproxy add v6tov4 listenaddress=[::] listenport=3306 connectaddress=IP地址 connectport=3306
- 添加winV6到wslv4的映射
- netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=3306 connectaddress=IP地址 connectport=3306
- 添加防火墙入站 (UDP和TCP)
- netsh advfirewall firewall add rule name=WSL2 dir=in action=allow protocol=TCP localport=3306
- netsh advfirewall firewall add rule name=WSL2 dir=in action=allow protocol=UDP localport=3306
此时使用telnet测试3306端口状态,用法:
telnet IP地址 3306
发现此时公网无法访问,Windows下127.0.0.1可访问说明映射成功。通过局域网内另一台机器telnet Windows,发现访问不到,确定为Windows防火墙问题
通过powershell快速添加防火墙规则
#添加 TCP 入站规则
New-NetFirewallRule -DisplayName "MySQL TCP Inbound Rule" -Direction Inbound -LocalPort 3306 -Protocol TCP -Action Allow
#添加 UDP 入站规则
New-NetFirewallRule -DisplayName "MySQL UDP Inbound Rule" -Direction Inbound -LocalPort 3306 -Protocol UDP -Action Allow
# 添加 TCP 出站规则
New-NetFirewallRule -DisplayName "MySQL TCP Outbound Rule" -Direction Outbound -LocalPort 3306 -Protocol TCP -Action Allow
# 添加 UDP 出站规则
New-NetFirewallRule -DisplayName "MySQL UDP Outbound Rule" -Direction Outbound -LocalPort 3306 -Protocol UDP -Action Allow
公网telnet测试成功,进入wordpress安装引导。
关闭Wordpress的DEPRECATED警告
安装sakurairo主题后出现的问题
症状如图


打开php.ini
error_reporting = E_ALL改为
error_reporting = E_ALL & ~E_DEPRECATED
但是奇了怪了没起作用,在stackoverflow找到了新方案,在wp-config.php中最后一行添加
error_reporting(E_ALL ^ E_DEPRECATED);
在cmd中运行httpd -k restart,重启后一切正常

更新失败。 此响应不是合法的 JSON 响应。
尝试写第一篇博客测试时遇到了上述问题,只能继续处理。
f12打开控制台,满屏404

通过wp-admin/site-health.php进行安全检查,也提醒REST API相关的问题

阅读官方关于伪静态设置的文档
笔者使用的是apache,查了查发现apache的httpd.conf里没打开AllowOverride
将<Directory "${SRVROOT}/wordpress">
中的
AllowOverride None
改成
AllowOverride All
但还是没解决问题
真正的解决方案:WordPress JSON API returns only 404 errors
Old question and answer, but for anyone coming here recently via search results (like me), /wp-json/posts should at least bring a JSON result (albeit still a 404 error), and /wp-json should list some available routes in JSON.
If it doesn't (e.g. it shows an Apache or other 404 error page), it's probably a permalinks issue
这是一个老问题和解答,但对于最近通过搜索结果来到这里的任何人(像我一样),/wp-json/posts 应该至少会返回一个 JSON 结果(尽管仍是 404 错误),而 /wp-json 应该会列出一些可用的 JSON 路由。
如果没有(例如它显示的是 Apache 或其他 404 错误页面),那可能是一个固定链接(Permalinks)问题
点击报错404的链接,显示内容如下图

与社区讨论相符,继续翻找,发现了WordPress REST API (wp-api) 404 Error: Cannot access the WordPress REST API
我在本地项目中也遇到了类似的问题。我在项目 URL 后面加上
index.php
,然后它就可以正常工作了。http://localhost/myproject/index.php/wp-json/wp/v2/posts 如果它显示 404 错误,请先更新固定链接设置(参见 ‘Paged Navigation Doesn't Work’ 部分)。
如果它工作正常,那么你可能需要启用
mod_rewrite
模块。在 Ubuntu 上执行以下操作:
a2enmod rewrite
sudo service apache2 restart
尝试访问index.php/wp-json/wp/v2/types/post?context=edit(手动增加了index.php)
传回内容
{
"code": "rest_forbidden_context",
"message": "抱歉,您不能在此文章类型中编辑文章。",
"data": {
"status": 401
}
}
与描述相符,询问gpt得知
Windows下启用 mod_rewrite
模块对应方法为,修改httpd.ini中LoadModule rewrite_module modules/mod_rewrite.so
为启用
成功解决!
修复Curl扩展

尝试打开样例博客时闪过了报错,且样例一直卡在加载中无法打开。
通过phpinfo();
查到curl未正确地启用,检索结果只有一个作者信息

又又又又又找到了正确的解决方法:Fatal Error Call to undefined function curl_init()
我最终通过在我的 PHP 根文件夹中找到一个名为 libssh2.dll 的文件并复制/粘贴到 Apache bin 文件夹中来解决这个问题。完成此操作后,curl 现在已启用,我不再收到有问题的错误。我遇到了其他错误,但那是另一个问题。
按照如上操作后,phpinfo();
成功出现了curl有关信息,报错消失

至此,严重的报错基本解决,博客成功正常运行
写博客真累QAQ
2024年9月15日 站点添加SSL时,更换域名导致部分文件无法加载,控制台报错为
Failed to load resource: net::ERR_CERT_COMMON_NAME_INVALID
1726290250-th.png:1
Failed to load resource: net::ERR_CERT_COMMON_NAME_INVALID
查看报错文件的链接,均指向了love.xn--rss740ax4f.top(即love.新海天.top)与现用域名love.nimisora.icu不符。推测为使用旧域名时上传的文件链接在数据库中未更新(居然不是用相对路径,绝了)
解决方案为下载Better Search Replace插件,将数据库中旧域名全部替换为新域名。
SSL Done