回忆一下19年在无屏幕笔记本上折腾起来的小站

为了给这个无屏幕,HDMI接口和有线网口全部损坏的笔记本装ubuntu,还跑去借了VGA接口的显示器,装机打开ssh连上热点后再拿回家

当年申请下公网v4,蹭了二级域名,从零开始折腾了nextcloud,各种在线小游戏、小工具,live2d看板娘,这个小站就是我跟计算机打交道的起点。

尽管它稳定地运行了五年,甚至现在还在用它挂前端和ddns,但它确实是台电子垃圾。这个型号的华硕笔记本的无线网卡在ubuntu下会卡死速率上限,过去的我没能解决它,现在的我不需要去解决它了——

此图片的 alt 属性为空;文件名为 1726314422-image-1024x519.png
羡慕吗

于是乎,作为充分利用专线的第一步,以及记录自己大学折腾的小玩具,正经地搭一个博客来记录自己的折腾日记。

由于在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的映射
  • 添加防火墙入站 (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

幾重にも辛酸を舐め、七難八苦を越え、艱難辛苦の果て、満願成就に至れ
最后更新于 2024-09-25