由于服务器上 PostgreSQL 和 Nginx 已经稳定运行了非常久,所以经过一段时间的考虑决定使用 Linux + Nginx + PostgreSQL + PHP 的架构。

安装 php

Nginx 需要 FastCGI 的加持来解析 PHP 页面,这里安装 php-fpm 。

sudo apt-get update
sudo apt-get install php-fpm

此时 Debian11 上的 PHP 版本为 php7.4 。

配置 Nginx

初次配合 Typecho 配置 Nginx 往往会忽略掉 pathinfo 和 伪静态化 ,所以可以参考参考 Typecho 官方文档

注意 FastCGI 不见得像文档所说监听在 127.0.0.1:9000 ,比如我的环境下就是 .sock 文件,所以 fastcgi_pass 需要按实际情况修改。这里放上我的配置供参考:

# /etc/nginx/sites-available/blog

server {
    listen 443;
    listen [::]:443;

    ssl_certificate_key /path/blog.inuyasha.love.key;
    ssl_certificate /path/blog.inuyasha.love.pem;

    root    /srv/blog;
    index    index.html index.htm index.php;

    server_name blog.inuyasha.love;

    limit_rate_after 2M;
    limit_rate 100k;

    if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php$1 last;
    }

    location ~ .*\.php(\/.*)*$ {
        include fastcgi.conf;
        fastcgi_pass unix:/run/php/php-fpm.sock;
    }

    access_log /var/log/nginx/blog_access.log combined;
    error_log /var/log/nginx/blog_error.log;
}

确认配置完成后将其软链接到 sites-enabled ,测试后让 Nginx 重载配置:

$ sudo ln -s  /etc/nginx/sites-available/blog  /etc/nginx/sites-enabled/blog
$ sudo nginx -t
$ sudo nginx -s reload

如果配置正确,这时候访问域名应该就可以进入它的安装页面即 install.php

在 Step 1 起始的阶段, Typecho 会自动检测缺失的模块和目录的可读写性,有需要写权限的(如上传文件用的 uploads )将所有者改为 www-data (这是默认的 php-fpm 用户)就行,其他目录没有必要给写权限。

这里填上 Typecho 报的一个缺失模块:

$ sudo apt-get install php-mbstring

连接 PostgreSQL

Typecho 的 Step 2 需要设置数据库,如果没有所需的驱动模块,则会无法选择使用 PostgreSQL ,模块安装如下:

$ sudo apt-get install php-pgsql

咱是本地连接,数据库密码留空即可,我只修改了端口号和数据库名,其他都留了默认。

直接连肯定是连不上的,需要修改 PostgreSQL 的 pg_hba.conf 最后添加一行:

local   blog-typecho    www-data        scram-sha-256

这里 blog-typecho 是指定的数据库名,和 Typecho 配置一致,注意 www-data 是运行 php-fpm 的用户名而不是 postgres 。具体可以参考手册。

创建 blog-typecho 数据库,11451 改为你自己端口号,当然默认端口不需要指定:

$ createdb -p 11451 -U postgres blog-typecho

重启 PostgreSQL 就再在 Typecho 中连接数据库就可以成功了,如果还不行就看日志吧。

$ sudo systemctl restart postgresql

完成 Typecho 配置

连接数据库后就没啥难度了,按提示键入你自己的用户密码即可,登录上以后就可以进行个性化配置了。

对了,安装完成以后可以删掉 install.phpinstall 目录。

个性化

主题本来尝试跟两年前用得一样,使用 Material ,但是发现最新的 master 分支依然对最新的 Typecho 支持不是很好,于是放弃。

如果想尝试,要使用最新的 master 分支而不是从 release 下,另外安装一个依赖的模块:

$ sudo apt-get install php-xml

已知 bug 有搜索 bug :

Argument 1 passed to Utils\AutoP::parse() must be of the type string, null given, called in /srv/blog/var/Widget/Base/Contents.php on line 938

换了新的主题 Cuckoo 以及和它配套的友链插件

注意 Cuckoo 并不支持 PostgreSQL ,其友链插件也无法配合 PostgreSQL 使用,所以需要对 500 Database Query Error 等 bug 进行修复。

对 Cuckoo 主题的修复可以查看我的提交,这个 PR 已经合并。

友链插件解压到 usr/plugins 下后,将我的 Pgsql.sql 放到插件根目录中,就可以正常在在 Typecho 后台启用这个插件。

顺便放上我使用版本的 Cuckoo ReleaseLinks plugin

其他配置遵循官方的文档就好了。创建一个独立页面,将自定义模版设置为“Links”,点击“发表页面”即可完成友链的创建。

友链头像防盗链

因为 Cuckoo 的友链页面是支持图像链接的,设置以后发现有些图片链接总是无法正常显示。这往往都是因为 referrer ,浏览器 F12 看一下就可以发现。

如果确定是这个原因,那么手动修改一下就好了:在 functions.php 第 465 行 img 标签中添加 referrerpolicy='no-referrer'

Google Analytics

Cuckoo 集成了百度统计,但是如果我们需要加入 Google Analytics 就需要自行解决。

虽然 Cuckoo 提供了插入更多 JS 的功能,但是很不幸这部分 JS 会被插入在页面的底部,而 Google Analytics 要求代码必须被插在 <head> 部分。巧的是 Cuckoo 插入更多 CSS 的功能就是将 CSS 代码插入到头部。

由于这部分 CSS 会被 <style> 标签包围,所以需要在 JS 代码的开头插入 </style> 结尾插入 <style> ,这样就可以使插入的 JS 生效,也不影响今后插入更多代码。

bilibili 追番列表

(一开始我还没意识到独立页面模板那个“Bungumi”是啥)

需要 cURL ,安装之:

$ sudo apt-get install php-curl

注意打开缓存以后,缓存路径为 /usr/themes/Cuckoo/assets/cache/BilibiliFollow/BilibiliFollow.json ,所以要建立这个父目录。

在 Typecho 根目录下:

$ cd usr/themes/Cuckoo/assets
$ sudo mkdir -p cache/BilibiliFollow
$ cd cache
$ sudo chown www-data:www-data BilibiliFollow
$ ls BilibiliFollow

刷新页面,页面载入追番列表成功后,应该就可以在 BilibiliFollow 目录下看到缓存的 BilibiliFollow.json 了。

至于设置不显示的番剧 id ,如果实在找不到 id (比如我),在 BilibiliFollow.json 中寻找就行。

一个奇怪 bug

不知道是谁的问题,但是先记录在这里吧。

当用户名中出现特殊符号时,回复似乎会失败,表现为在各个页面都看不到这条回复,而且后续回复也会失败。但是数据库中确实存在它。有趣的是在我从数据库中手动删除这条后,依然会有很短一段时间不能回复主题。但是我用同样用户名不登陆状态下又是好的欸……

也有可能是浏览器的 bug ?

by SDUST weilinfox