LNPP 架构搭建 Typecho 新家简单记录
由于服务器上 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 用户)就行,其他目录没有必要给写权限。
由于我们使用 PostgreSQL ,还需要单独安装驱动,所以我这里额外安装了这两个模块:
$ sudo apt-get install php-mbstring php-pgsql
连接 PostgreSQL
Typecho 的 Step 2 需要设置数据库。咱是本地连接,数据库密码留空即可,我只修改了端口号和数据库名,其他都留了默认。
直接连肯定是连不上的,需要修改 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 配置
连接数据库后就没啥难度了,按提示键入你自己的用户密码即可,登录上以后就可以进行个性化配置了。
个性化
主题本来尝试跟两年前用得一样,使用 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 主题的修复查看我fork中的提交,我尝试提 PR 但是并不知道会不会合并。
友链插件解压到 usr/plugins
下后,将我的 Pgsql.sql 放到插件根目录中,就可以正常在在 Typecho 后台启用这个插件。
顺便放上我使用版本的 Cuckoo Release 和 Links plugin
其他配置遵循官方的文档就好了。创建一个独立页面,将自定义模版设置为“Links”,点击“发表页面”即可完成友链的创建。
友链头像防盗链
因为 Cuckoo 的友链页面是支持图像链接的,设置以后发现有些图片链接总是无法正常显示。这往往都是因为 referrer
,浏览器 F12 看一下就可以发现。
如果确定是这个原因,那么手动修改一下就好了:在 functions.php
第 455 行 img
标签中添加 referrerpolicy='no-referrer'
。
by SDUST weilinfox