安装 Typecho 的坎坷之旅

前言

按照家里原来的网络架构,Typecho 应该跑在一台独立的服务器上,再由连着外网的 Nginx 做 SSL 加密和反向代理。但装了 Handsome 主题的 Typecho,页面里有些组件会单独向服务器发请求,结果从公网用 HTTPS 访问时,浏览器控制台报 Mixed Content:HTTPS 页面里混进了 HTTP 请求。

前后调了三天也没解决。就算想办法让这些组件请求公网域名,也没法控制它们请求哪个端口(家宽的 443 端口不通,其他服务走的都是 88 端口)。最后干脆直接把 Typecho 装在反代服务器上。

下面的步骤不包括反向代理的配置,也不建议给装了第三方主题的 Typecho 套反向代理。

2024 年 11 月 30 日更新:现在已经通过一台有公网端口的服务器,内网穿透到家里的反代服务器。如果你有公网 IP,并且 80 和 443 端口可用,就可以像反代普通网站一样反代 Typecho,用什么插件和主题都没问题。

整个安装过程基于 Ubuntu 24.04 LTS,其他系统请酌情参考。

安装依赖

Typecho 需要 PHP,以及 MySQL、PostgreSQL、SQLite 中的一种数据库。

更新系统

1
2
sudo apt update
sudo apt upgrade -y

安装 PHP

Typecho 需要 PHP 和几个扩展:

1
sudo apt install -y php-fpm php-mysql php-curl php-mbstring

安装 MySQL

1
sudo apt install -y mysql-server

安装 Nginx

排除冲突

Nginx 要用 80 端口,可能和其他 Web 服务器冲突,安装前先确认没有别的服务占着 80 端口。

先检查系统里有没有预装 Apache2,执行 apache2 -v。如果看到类似下面的输出,就按后面的步骤卸载;没有的话直接跳到“正式安装 Nginx”。

1
2
Server version: Apache/2.4.41 (Ubuntu)
Server built: 2020-08-12T19:46:17

停止并禁用 Apache2:

1
2
sudo systemctl stop apache2
sudo systemctl disable apache2

彻底卸载 Apache2 及相关包:

1
2
sudo apt purge apache2 apache2-utils apache2-bin
sudo apt autoremove -y

再执行一次 apache2 -v,提示 command not found 就说明卸干净了。

正式安装 Nginx

1
sudo apt install -y nginx

配置数据库

用超级用户直接进入 MySQL:

1
sudo mysql

这种进入数据库的方式并不安全。对安全有要求的话,先运行 sudo mysql_secure_installation,按提示加固 MySQL。

在 MySQL 提示符下执行:

1
2
3
4
5
CREATE DATABASE typecho_db;
CREATE USER 'typecho_user'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON typecho_db.* TO 'typecho_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

把 typecho_db 换成你想用的数据库名,typecho_user 和 your_password 换成给 Typecho 用的数据库账号和密码。

部署 Typecho

下载 Typecho 和主题

从 Typecho 官网下载最新的正式版压缩包。现在的 Web 根目录是 /var/www/html,为了方便管理,给 Typecho 单独建一个目录:

1
sudo mkdir /var/www/html/typecho

把压缩包上传到服务器,解压到这个目录,确认 install.php 或 index.php 就在 /var/www/html/typecho 下面。

压缩包是 .zip 格式的话,可能需要先装 unzip。

从友人C的博客购买并下载 Handsome 主题,解压到 /var/www/html/typecho/usr/themes,配套的插件放到 /var/www/html/typecho/usr/plugins。

不确定要不要买的话,可以先在这里看看这款主题的效果,之后再决定。

设置权限,让 Web 服务器能读这些文件:

1
2
sudo chown -R www-data:www-data /var/www/html/typecho
sudo chmod -R 755 /var/www/html/typecho

配置 Nginx

给 Typecho 新建一个站点配置:

1
sudo vim /etc/nginx/sites-available/typecho

写入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
listen 88 ssl http2; # 监听端口
listen [::]:88 ssl http2;
server_name blog.wanglele.top; # 你的域名
ssl_certificate /etc/nginx/cert/cert.pem;
ssl_certificate_key /etc/nginx/cert/key.pem; # 证书路径

root /var/www/html/typecho;
index index.php index.html index.htm;

location / {
try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; # 确保路径正确
}

location ~ /\.ht {
deny all;
}
}

注意第 17 行 fastcgi_pass 的路径,里面的 PHP 版本号要和你装的一致(可以用 ls /var/run/php/ 查看)。域名、证书、公网 IP 请自行解决,不在本文讨论范围内。

启用配置并重启 Nginx:

1
2
sudo ln -s /etc/nginx/sites-available/typecho /etc/nginx/sites-enabled/
sudo systemctl restart nginx

访问 Typecho

这时访问“域名:端口”,应该就能进入 Typecho 的安装界面了。按前面的配置填好数据库信息,再新建管理员账号就能用了。

结语

Typecho 本身装起来并不复杂,大部分时间都花在折腾反向代理上了。踩的坑主要是 MySQL 的权限和 PHP 的版本:直接 apt install php 不会装上 PHP-FPM 和 MySQL 扩展。

这是本博客的第一篇文章,希望我能一直保持记录的热情。