Typecho 是一个轻量级的 PHP 博客程序,最早发布于 2008 年,国内老牌个人博客系统之一。它的特点是「小」:程序本体只有几百 KB,装上就能用,后台简洁,对服务器要求极低。
核心特点与优势:
体积极小:官方 1.3.0 的安装包 typecho.zip 只有约 565 KB,1 核 1G 甚至更低配的服务器、虚拟主机都能跑,加载快。
安装简单:上传源码 → 建数据库 → 浏览器访问 install.php,五分钟走完。
数据库自由:MySQL、PostgreSQL、SQLite 都支持,小站用 SQLite 连数据库服务都不用装。
后台克制:文章、分类、标签、页面、评论、外观、插件,没有多余模块,写博客够用。
主题插件生态稳定:主题放 usr/themes/,插件放 usr/plugins/,上传启用即可,不需要重新构建。
原生静态化友好:配合 Nginx 伪静态,文章 URL 可以做成 /archives/123/ 或 /posts/slug.html 这种干净形式。
需要说明的局限:
和 WordPress 的取舍:
| 维度 | Typecho | WordPress |
|---|---|---|
| 资源占用 | 极低,小内存机器可跑 | 较高,插件多了更明显 |
| 上手速度 | 装完即用,后台简单 | 功能多但选项也多 |
| 插件生态 | 少而精 | 覆盖一切需求 |
| 安全面 | 代码少、攻击面小 | 插件和主题是主要风险来源 |
| 适合 | 个人纯写作、低配机器 | 需要复杂功能、多人运营 |
Typecho 是 PHP 程序,部署 = Web 服务器 + PHP + 数据库 + 源码目录。国内最常见的两条路:自己装 LNMP,或者用宝塔面板。
bashsudo apt update
sudo apt install -y nginx mariadb-server \
php-fpm php-mysql php-mbstring php-curl php-xml php-gd php-zip unzip git
php -v # 确认版本,7.4 以上即可,Ubuntu 24.04 默认 8.3
ls /run/php/ # 记下 fpm sock 文件名,后面 Nginx 要用
Typecho 依赖的扩展主要是 mbstring、curl、gd(缩略图)、xml,漏了会在安装页或后台上传时报错。
bashsudo mysql
sqlCREATE DATABASE typecho DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'typecho'@'localhost' IDENTIFIED BY '换成强密码';
GRANT ALL PRIVILEGES ON typecho.* TO 'typecho'@'localhost';
FLUSH PRIVILEGES;
EXIT;
字符集必须是 utf8mb4,否则 emoji 和部分中文会写不进去。
用官方仓库的 tag 拉取,避免第三方打包夹带东西:
bashcd /var/www
sudo git clone --depth 1 --branch v1.3.0 https://github.com/typecho/typecho.git typecho
sudo rm -rf /var/www/typecho/.git
版本号按 Releases 页的最新稳定版替换。也可以从官网下载压缩包,解压到 /var/www/typecho。
bashsudo chown -R www-data:www-data /var/www/typecho
sudo find /var/www/typecho -type d -exec chmod 755 {} \;
sudo find /var/www/typecho -type f -exec chmod 644 {} \;
安装向导要在根目录写 config.inc.php,所以整个目录归 www-data。装完之后再收紧权限也不迟,但不要一上来就设成只读。
浏览器访问 http://服务器IP/install.php(域名解析好之后换成域名):
localhost;typecho_;http:// 或 https://)、管理员账号密码;config.inc.php。装完做两件事:
bashsudo rm /var/www/typecho/install.php # 确认安装成功、数据已备份后再删
以及登录后台 http://服务器IP/admin,先改一次管理员密码。
/etc/nginx/sites-available/typecho.conf:
nginxserver { listen 80; listen [::]:80; server_name blog.example.com; root /var/www/typecho; index index.php index.html; client_max_body_size 64m; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.3-fpm.sock; } location ~ /\. { deny all; } location ~* \.(css|js|png|jpe?g|webp|svg|woff2?|ico)$ { expires 7d; add_header Cache-Control "public, max-age=604800"; } }
fastcgi_pass 里的 PHP 版本按 ls /run/php/ 的结果改(8.2 / 8.3 都可能)。
启用:
bashsudo ln -s /etc/nginx/sites-available/typecho.conf /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx
伪静态说明:Typecho 后台「设置 → 永久链接」勾选「启用地址重写」后,上面的 try_files 就能工作。如果仍有个别路径 404,换成官方 rewrite 规则:
nginxlocation / { if (-f $request_filename/index.html) { rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php) { rewrite (.*) $1/index.php; } if (!-f $request_filename) { rewrite (.*) /index.php; } }
bashsudo apt install -y certbot python3-certbot-nginx sudo certbot --nginx -d blog.example.com sudo certbot renew --dry-run
签发成功后,把后台「设置 → 基本 → 站点地址」从 http:// 改成 https://,否则后台里生成的链接还是 http。
服务器 IP 假设 1.2.3.4:
| 服务商 | 入口 | 记录 | 注意点 |
|---|---|---|---|
| Cloudflare | DNS → Records | A blog → 1.2.3.4 | 橙云时 SSL/TLS 用 Full (strict);签证书先灰云 |
| 阿里云 / 腾讯云 | 云解析 DNS → 添加记录 | A blog → 1.2.3.4,TTL 600 | 国内服务器先备案 |
| DNSPod | 域名解析 → 添加记录 | A blog → 1.2.3.4,TTL 600 | 等 TTL 过期再验证 |
bashdig +short blog.example.com curl -I https://blog.example.com
php -v ≥ 7.4,php -m 里有 mbstring / curl / gd / xmlutf8mb4install.php 已删除,config.inc.php 存在index.php)https://usr/uploads/usr/uploads/ 已做一次备份国内虚拟主机 / 面板用户的常规路径:
https://域名/install.php,按向导填数据库信息;https://域名。宝塔的好处是 PHP 扩展、伪静态、证书都是按钮;代价是多一层面板,出问题时要同时看面板日志和 Nginx 日志。
| 现象 | 原因 | 处理 |
|---|---|---|
| 文章页 404 | 伪静态未开或规则不对 | 后台开启地址重写;Nginx 加 try_files 或官方 rewrite |
| 首页 500 | 权限 / PHP 扩展缺失 | 看 /var/log/nginx/error.log 和 PHP-FPM 日志;补扩展 |
| 安装页空白 | PHP 版本过低或缺 mbstring | php -m 检查,装扩展后重启 fpm |
| 上传图片失败 | 超过 upload_max_filesize / Nginx 上限 | 改 php.ini 与 client_max_body_size,重启 fpm |
| 后台登录后跳回 http | 站点地址还是 http | 改「设置 → 基本 → 站点地址」 |
| 打开 install.php 提示已安装 | config.inc.php 还在 | 确认要重装再删除该文件,重新走向导 |
| 中文乱码 | 数据库字符集不是 utf8mb4 | 建库时指定,已建库需要转码 |
| 内存不足 502 | PHP-FPM 进程被 OOM | 降 pm.max_children 或加内存 |
Typecho 的配置集中在后台,装完主题插件即可用。
后台 → 设置 → 基本:
Asia/Shanghai;后台 → 设置 → 永久链接:
/archives/{cid}/(稳定、不随标题变化)或 /posts/{slug}.html(可读性好);usr/themes/ 下放主题目录,后台 → 控制台 → 外观 → 启用;usr/plugins/ 下放插件目录,后台 → 控制台 → 插件 → 启用;后台 → 设置 → 讨论:开启「评论审核」和「评论需要填写邮箱」;垃圾评论多时装反垃圾插件(验证码、Akismet 类)。个人博客建议默认先审后发。
/feed/ RSS 输出,可直接提交;sitemap.xml,再提交到搜索平台;三样东西:
bash# 数据库
mysqldump -u typecho -p typecho > typecho-$(date +%F).sql
# 上传的文件、主题、插件
tar -czf typecho-files-$(date +%F).tar.gz /var/www/typecho/usr /var/www/typecho/config.inc.php
恢复时先还原数据库,再把 usr/ 和 config.inc.php 放回原位。
内容在数据库,浏览器登录后台即写。没有 Git、没有构建,写完点发布就上线。
手机 / 电脑浏览器 → https://域名/admin → 写文章 → 发布
usr/uploads/,按年月归档;/admin 加到主屏幕。| 方案 | 平台 | 优点 | 代价 |
|---|---|---|---|
| 浏览器后台 | 全平台 | 零配置,随时写,图片直接传 | 长文编辑体验一般,依赖网络 |
| XML-RPC 客户端 | 桌面 / 手机 | 可离线写、批量管理(MetaWeblog 协议) | 客户端配置繁琐,入口不是 /xmlrpc.php |
| 本地 Markdown + 复制粘贴 | 全平台 | 用熟悉的编辑器,版本自己控 | 图片要单独上传,格式需手动对齐 |
Typecho 支持 XML-RPC(MetaWeblog 协议),入口是 https://域名/action/xmlrpc——1.3.0 的根目录里已经没有 xmlrpc.php 了,老教程里的地址不要照抄;MarsEdit 一类客户端填这个地址即可。接口对公网开放存在暴力破解风险,不用时建议在 Nginx 里把 /action/xmlrpc 限制为只允许自己的 IP。
Typecho 没有「发布命令」,流程就是:
如果同时维护静态站(Hugo / Hexo),建议分工明确:Typecho 放随手记,静态站放长文,避免同一篇内容两处维护。
本文作者:Weee
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!