由于服务器上 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.php
和 install
目录。
个性化
主题本来尝试跟两年前用得一样,使用 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 并不支持 PostgreSQL ,其友链插件也无法配合 PostgreSQL 使用,所以需要对 500 Database Query Error
等 bug 进行修复。
对 Cuckoo 主题的修复可以查看我的提交,这个 PR 已经合并。
友链插件解压到 usr/plugins
下后,将我的 Pgsql.sql 放到插件根目录中,就可以正常在在 Typecho 后台启用这个插件。
顺便放上我使用版本的 Cuckoo Release 和 Links 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