安装Typecho的坎坷之旅

前言

按照家中之前的网络架构,Typecho应由独立的服务器运行,并由接通外网的Nginx进行SSL加密与反向代理。然而配置了Handsome主题的Typecho页面包含需要单独向服务器发送请求的组件,这使得在用公网访问Typecho时,在浏览器后台会出现Mixed Content报错,即在通过HTTPS加载的界面上出现了尝试发出HTTP的请求的组件。

在经历了历时三天的各种调试后依然无法解决这个问题,因为即便设法使组件向公网域名发送请求,也无法限制其向指定的端口发送。(家宽的443端口不通,其他服务都是访问88端口)最终决定直接在反代服务器上部署Nginx。

以下的步骤中不会包含如何配置反向代理,同时也不建议对安装了第三方主题的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 和 以及其必要扩展的支持。

安装PHP及其必要扩展:

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

安装MySQL

安装MySQL:

1
sudo apt install -y mysql-server

安装Nginx

冲突排除

Nginx需要使用80端口,这可能与其他的Web服务器冲突,请确保安装之前没有其他服务占用80端口。

为了避免安装时出现错误,我们需要提前检查系统中有没有预装Apache2。首先,使用apache2 -v检查系统中是否安装了 Apache2,如果你看到了类似如下的输出,请继续接下来的操作,否则请直接跳转至安装Nginx的部分。

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

停止 Apache2 服务:

1
sudo systemctl stop apache2

禁用 Apache2 服务:

1
sudo systemctl disable apache2

完全移除 Apache2 及其相关包:

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

这时再次使用apache2 -v检查,如果你看到 command not found 的提示,说明 Apache2 已经被成功移除。

完成上述步骤后,我们可以继续按照前述步骤安装并配置 Nginx 以及其他所需组件。

正式安装Nginx

安装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使用的数据库名,对应的,将typecho_useryour_password替换为你希望Typcho使用的数据库账户和密码。

部署Typecho

下载Typecho及其主题

Typecho官网下载最新的正式版压缩包,并将其解压至Web根目录。我们目前的环境下,Web根目录为/var/www/html为了方便管理,我们最好为Typecho新建一个文件夹:

1
sudo mkdir /var/www/html/typecho

将下载的压缩包上传至服务器并解压至刚刚新建的目录,解压完成后,确保install.phpindex.php处于该路径下。

如果压缩包为.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 配置一个新的 Nginx 站点:

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行的路径,不同版本的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安装PHP,不会安装PHP-fpm以及MySQL的扩展。

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