Typecho 博客搭建记录

前言

最近想单独搭建博客,因为服务器性能一般,选择用轻量级的 Typecho。下面是搭建记录,搭建过程主要参考自 ChatGPT,博文主要总结自 ChatGPT 对话,补充中途遇到的部分问题。

1. 准备工作

前置基础:

  • 一台服务器(我用的是腾讯云 OpenCloudOS,基于 CentOS)。
  • 一个已解析到服务器 IP 地址的域名(例如blog.example.site)。
  • 预先已经配置好防火墙,80、443 端口已放开。

2. 安装与配置 PHP (含 PHP-FPM)

Typecho 是一个基于 PHP 的应用,需要 PHP 运行时和 PHP-FPM (FastCGI 进程管理器) 来处理动态请求。

2.1 安装 PHP 及常用扩展

使用dnf包管理器安装 PHP 及其 Typecho 所需的常用扩展:

dnf install -y php php-fpm php-mysqlnd php-gd php-xml php-mbstring php-json php-opcache php-curl

安装完成后,可以通过以下命令检查 PHP 版本:

php -v

2.2 启动并设置 PHP-FPM

启动php-fpm服务并设置开机自启:

systemctl enable php-fpm --now

确认php-fpm正在运行:

systemctl status php-fpm

2.3 确认 PHP-FPM 监听方式

默认情况下,PHP-FPM 会通过 Unix Socket 监听请求,通常路径为/run/php-fpm/www.sock。确认该文件是否存在:

ls /run/php-fpm/www.sock

一般路径是:

/run/php-fpm/www.sock

这个 Socket 路径将在后续 Nginx 配置中用到。

3. 安装与配置 MariaDB (MySQL)

Typecho 需要数据库来存储博客内容、用户数据等。这里我们选择 MariaDB。

3.1 安装并启动 MariaDB

dnf install -y mariadb-server
systemctl enable mariadb --now

3.2 初始化安全配置

强烈建议运行安全初始化脚本,设置root密码并移除不安全的默认项:

mysql_secure_installation

按照提示操作,通常建议选择:

  • 设置root密码:Y
  • 删除匿名用户:Y
  • 禁止root远程登录:Y
  • 删除test数据库:Y
  • 重新加载权限表:Y

3.3 创建 Typecho 数据库和用户

登录 MariaDB root用户:

mysql -u root -p

然后执行以下 SQL 命令,为 Typecho 创建数据库和专用用户。请将 '强密码' 替换为实际密码:

CREATE DATABASE typecho DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'typecho'@'localhost' IDENTIFIED BY '强密码';
GRANT ALL PRIVILEGES ON typecho.* TO 'typecho'@'localhost';
FLUSH PRIVILEGES;
EXIT;

请记住数据库名 (typecho)、用户名 (typecho) 和密码,它们将在 Typecho 安装时使用。

4. 下载并部署 Typecho 程序

4.1 下载 Typecho

选择一个合适的网站根目录,例如/var/www/typecho

mkdir -p /var/www/typecho
cd /var/www/typecho

下载最新版 Typecho 程序并解压:

curl -L https://github.com/typecho/typecho/releases/latest/download/typecho.zip -o typecho.zip
unzip typecho.zip
rm typecho.zip # 清理安装包

解压后,/var/www/typecho目录下应包含admininstallusrindex.php等文件和目录。

4.2 设置文件权限

为了让 Nginx 和 PHP-FPM 能够正常读写 Typecho 文件,需要设置正确的属主和权限。Nginx 在 OpenCloudOS 上通常以nginx用户运行。

chown -R nginx:nginx /var/www/typecho
find /var/www/typecho -type d -exec chmod 755 {} \;
find /var/www/typecho -type f -exec chmod 644 {} \;

5. 配置 Nginx Web 服务器

5.2 安装并启动本地 Nginx

dnf install -y nginx
systemctl enable nginx --now

访问服务器 IP (http://你的服务器IP),如果看到 "Welcome to nginx!" 页面,说明 Nginx 已成功运行。

5.3 配置 Typecho 站点

创建 Nginx 站点配置文件:

vim /etc/nginx/conf.d/typecho.conf

将以下配置内容粘贴到文件中。将blog.example.site替换为实际域名:

server {
    listen 80;
    listen [::]:80;
    server_name blog.example.site;

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

    access_log /var/log/nginx/typecho.access.log;
    error_log  /var/log/nginx/typecho.error.log;

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

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~* \.(jpg|jpeg|png|gif|css|js|ico|webp)$ {
        expires 30d;
        access_log off;
    }
}

5.4 检查并重载 Nginx 配置

nginx -t
systemctl reload nginx

这时候已经能够通过blog.example.site访问 Typecho 配置页了。但是在配置时遇到报错“上传目录无法写入, 请手动将安装目录下的 /usr/uploads 目录的权限设置为可写然后继续升级”。

6. 解决权限与 SELinux 问题

权限问题和 SELinux 是常见的部署障碍。上面的报错就是权限问题导致。

6.1 确保 PHP-FPM 以nginx用户运行

这是解决 Typecho 上传目录写入问题的关键。Nginx 进程通常以nginx用户运行,为了避免权限冲突,PHP-FPM 也应以相同的用户运行。

首先,确认php-fpm当前的运行用户:

ps -ef | grep php-fpm

如果worker进程不是nginx用户(通常为apache),需要修改 PHP-FPM 配置:

vim /etc/php-fpm.d/www.conf

找到并修改以下行,确保usergroupnginx,并配置listen.ownerlisten.grouplisten.mode以确保 Nginx 可以访问 Socket:

user = nginx
group = nginx

listen = /run/php-fpm/www.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

修改后,重启 PHP-FPM 服务:

systemctl restart php-fpm

6.2 处理 SELinux (如果启用)

OpenCloudOS 默认启用 SELinux (Enforcing 模式),这会严格限制进程的文件访问权限。如果 SELinux 处于Enforcing状态,即使文件权限看起来正确,也可能导致 Typecho 无法写入上传目录。我这里没有开启(运行getenforce输出Disabled),就不记录了。

7. 完成 Typecho 初始化配置

现在,访问域名http://blog.example.site,应该会看到 Typecho 的安装页面。

7.1 填写数据库信息

按照页面提示填写数据库连接信息:

  • 数据库适配器: 保持默认PDO Mysql 适配器
  • 数据库前缀: 保持默认typecho_
  • 数据库地址: localhost
  • 数据库用户名: typecho(之前创建的)。
  • 数据库密码: 为typecho用户设置的密码。
  • 数据库名: typecho(之前创建的)。

7.2 填写管理员信息

继续填写管理员账号信息:

  • 管理员用户名: 希望的后台登录用户名。
  • 管理员密码: 后台登录密码 (建议复杂且与数据库密码不同)。
  • 管理员邮箱: 邮箱地址。

点击「确认,开始安装」。如果一切顺利,Typecho 将完成数据库表的创建和配置文件的写入,并提示安装成功。

7.3 安装后的重要操作

  1. 删除install目录: 这是非常重要的安全步骤,防止他人重新安装或利用安装程序漏洞。

    rm -rf /var/www/typecho/install
    
  2. 验证上传功能: 登录 Typecho 后台,尝试发布文章并上传图片,确认上传功能正常。

  3. 备份数据库: 首次安装成功后,建议立即备份数据库,作为初始干净状态的快照。

    mysqldump -u typecho -p typecho > typecho_init.sql
    

8. 启用 HTTPS (Let's Encrypt)

我们使用 Certbot 自动申请和配置 Let's Encrypt 证书。

8.1 前置条件检查

在执行 Certbot 之前,需确保:

  • 域名已正确解析到服务器 IP。
  • Nginx 服务正在运行,且 80 端口可正常访问。

8.2 安装 Certbot 并申请证书

使用一条命令即可完成 Certbot 的安装、证书申请和 Nginx 配置(注意修改为自己的域名):

dnf install -y certbot python3-certbot-nginx && certbot --nginx -d blog.example.site

在执行过程中,Certbot 会提示:

  1. 输入邮箱地址: 用于接收证书到期提醒。
  2. 同意服务条款: 输入A
  3. 是否接收 EFF 邮件: 可选,输入N即可。
  4. 选择 HTTPS 行为: 强烈建议选择2(Redirect),这将自动将所有 HTTP 请求重定向到 HTTPS。

如果一切顺利,将看到Congratulations! You have successfully enabled HTTPS on https://blog.example.site的提示。

8.3 验证 HTTPS

现在,访问https://blog.example.site,浏览器地址栏应显示安全锁图标,表明 HTTPS 已成功启用。

Certbot 会自动修改 Nginx 配置文件 (/etc/nginx/conf.d/typecho.conf),添加listen 443 ssl配置、证书路径和 HTTP 到 HTTPS 的重定向规则。它还会自动创建定时任务,确保证书在到期前自动续期。

运行下面的命令检查是否启动了定时任务,没有输出,定时任务应该是没有启动:

systemctl list-timers | grep certbot

运行下面的命令输入显示为禁用状态:

systemctl list-unit-files | grep certbot
certbot-renew.service                        static          -
certbot-renew.timer                          disabled        disabled

执行以下命令启动:

systemctl enable --now certbot-renew.timer

再次list-timers能够正常看到定时任务。

9. 基础安全加固与性能优化

9.1 Nginx 禁止上传目录执行 PHP 脚本

为了防止恶意用户上传 WebShell 等可执行脚本,应在 Nginx 配置中禁止uploads目录执行 PHP 文件。

编辑 Nginx 配置文件/etc/nginx/conf.d/typecho.conf,在server块内添加以下location规则:

location ~* ^/usr/uploads/.*\.(php|php5|phtml)$ {
    deny all;
}

添加后,测试并重载 Nginx 配置:

nginx -t && systemctl reload nginx

9.2 PHP-FPM / OPcache 性能调优

暂时没用到。

posted @ 2026-01-26 22:19  Higurashi-kagome  阅读(0)  评论(0)    收藏  举报