当前位置: 首页 > news >正文

Typecho 博客搭建记录 - Higurashi

前言

最近想单独搭建博客,因为服务器性能一般,选择用轻量级的 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 = nginxlisten = /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 性能调优

暂时没用到。

http://www.jsqmd.com/news/304887/

相关文章:

  • 桌面图片——壁纸
  • GEO出海营销榜单揭晓:AI巨浪下,原圈科技如何领航企业增长?
  • Windows录制浏览器音视频
  • 【扩展卡尔曼滤波算法EKF估计SOC】 基于二阶RC锂电池模型,利用扩展卡尔曼滤波器EKF在线...
  • AI模型监控与告警:AI应用架构师的技术前沿研究
  • ‌情绪化测试场景:让AI模拟愤怒用户的破坏力‌
  • 微电网并离网下垂控制Simulink模型,完美运行!这就是下垂控制的精髓
  • 量子算法测试入门:验证薛定谔的代码稳定性
  • No.1141 S7-200 PLC和MCGS组态自动化搬运机械手的组态系统 带解释的梯形图程...
  • 咱们搞信号处理的老司机,谁没被噪声折磨过?今天来唠唠几种滤波方法的实战体验,带点代码实操,直接上干货不废话
  • MP2636充电升压模块原理图设计,已量产
  • 三相异步电机矢量控制调速系统Simulink仿真探索
  • 滑模与终端滑模(SMC):控制领域的奇妙之旅
  • Agentic AI做社交媒体运营:提示工程架构师的3个增加粉丝案例
  • 智能算法实战:粒子群优化在配电网调度中的妙用
  • 二项式系数的素数整除性质的研究
  • 目标检测数据集 - 排球比赛场景排球检测数据集下载
  • 20260126_215218_RAG(Retrieval-Augmented_Genera
  • 基于DEMATEL-ISM法的民航飞行员综合安全能力结构模型研究(文章浮现)。 关键词:民航飞...
  • 构建 OpenHarmony 随机颜色生成器:用纯数学生成视觉灵感
  • 构建 OpenHarmony 简易待办事项清单:用状态驱动实现最小可行任务管理
  • 构建 OpenHarmony 简易 BMI 健康指数计算器:用基础数学实现健康自评
  • 基于斑点鬣狗的LSSVM回归预测:PSO - LSSVM的探索
  • 基于狼群优化算法的LSSVM回归预测:GWO - LSSVM的探索
  • 探索信捷PLC的奇妙应用:随机密码、动态验证码与更多
  • 基于IEEE33的主动配电网优化探索
  • AI技术小白必看!老王带你10分钟搞懂大模型核心概念,RAG、Agent、LoRA一次讲透,附全套工具模板!
  • Turbo码编码译码在MATLAB中的实现探索
  • 程序员必看!大模型技术栈全解析,从Token到Agent,小白也能变大神
  • 【小白必看】大模型RAG技术实战教程,让你的AI开发技能yyds!保姆级教学,从入门到精通,一键搞定检索增强生成!