主题功能配置教程(宝塔面板)
V3 主题功能配置教程(宝塔面板)
一、媒体自动转码功能
功能说明
上传 mp4 视频自动生成 webm 格式,上传 mp3 音频自动生成 ogg 格式。webm/ogg 格式体积更小、兼容性更好,可实现浏览器自动选择最优格式播放,加速页面打开。
配置步骤
第一步:安装 FFmpeg
- 登录宝塔面板
- 点击左侧菜单「软件商店」
- 在搜索框输入「FFmpeg」
- 找到后点击「安装」

手动安装方式(SSH):
# CentOS 系统
yum install -y ffmpeg
# Ubuntu/Debian 系统
apt-get update
apt-get install -y ffmpeg第二步:启用 PHP exec 函数
- 点击左侧菜单「软件商店」
- 找到已安装的 PHP 版本,点击「设置」
- 在弹出的窗口中选择「禁用函数」
- 在禁用函数列表中找到「exec」,点击删除按钮移除它
- 点击「保存」

第三步:修改 PHP 运行模式(可选)
如果转码速度较慢,可以修改 PHP 运行模式:
- 点击左侧菜单「网站」
- 找到你的网站,点击「设置」
- 选择「PHP 版本」
- 将运行模式改为「FastCGI」或「PHP-FPM」
- 点击「保存」
第四步:后台开关控制
在 Typecho 后台「外观」→「设置外观」→「内容设置」中,可以找到「媒体自动转码」开关:
- 开启:上传 mp4/mp3 时自动触发转码
- 关闭:不进行转码,仅保留原始文件
测试转码功能
- 登录 Typecho 后台
- 新建或编辑一篇文章
- 上传一个 mp4 视频或 mp3 音频文件
- 发布文章后访问前台查看效果
测试方法:
- 上传文件后,等待 1-2 分钟(视频较大时需要更长时间)
- 打开文章页面,按 F12 打开开发者工具
- 查看 Network 面板,应该能看到 webm/ogg 文件的请求
常见问题
Q1:上传文件后没有生成 webm/ogg 文件?
- 确认 FFmpeg 已安装(
ffmpeg -version) - 确认 exec 已从禁用函数列表中移除
- 将 PHP 运行模式改为「FastCGI」或「PHP-FPM」
Q2:转码速度很慢?
- 升级服务器配置(增加 CPU 核心数)
- 限制上传文件大小
二、友情链接自动生成功能
功能说明
自动从评论中提取访客填写的网址,通过 Puppeteer 截图生成生动的友情链接卡片。完全自动化,无需人工干预。
工作流程:
- 从评论数据库中提取所有填写了网址的访客
- 验证网址有效性(HTTP 200 OK)
- 使用 Puppeteer 对有效网址进行截图
- 按评论数从高到低排序
- 生成友链缓存文件,供前台展示
配置步骤
第一步:安装 Node.js 和 Puppeteer
安装 Node.js:
# 宝塔面板方式:软件商店搜索 Node.js 安装 # 或手动安装: curl -fsSL https://deb.nodesource.com/setup_18.x | bash - apt-get install -y nodejs安装 Puppeteer(推荐使用国内源):
方法一:使用 cnpm(推荐,国内服务器)
# 安装 cnpm sudo npm install -g cnpm --registry=https://registry.npmmirror.com # 使用 cnpm 安装 puppeteer cd /www/wwwroot/你的域名/usr/themes/V3/assets/scripts npm init -y cnpm install puppeteer --save方法二:使用 npm + 国内源
cd /www/wwwroot/你的域名/usr/themes/V3/assets/scripts npm init -y npm install puppeteer --save --registry=https://registry.npmmirror.com方法三:使用环境变量指定国内源
cd /www/wwwroot/你的域名/usr/themes/V3/assets/scripts npm init -y PUPPETEER_DOWNLOAD_HOST=https://registry.npmmirror.com npm install puppeteer --save注意: Puppeteer 会自动下载 Chromium,可能需要几分钟时间。使用国内源可以加速下载。
验证安装:
node -v # 应该显示 Node.js 版本号 node -e "const puppeteer = require('puppeteer'); console.log('Puppeteer 安装成功');"
第二步:创建友链页面
- 登录 Typecho 后台
- 点击「管理」→「独立页面」→「新建页面」
- 填写标题:友情链接
- 在右侧「自定义模板」中选择「links.php」
- 点击「发布」
第三步:手动运行构建脚本
方法一:SSH 命令行
cd /www/wwwroot/你的域名/usr/themes/V3/assets/scripts
php build_links.php方法二:浏览器访问
在浏览器中访问:
https://你的域名/usr/themes/V3/assets/scripts/build_links.php输出示例:
友链数据构建完成
共找到 12 个有效友链
缓存文件已保存: /www/wwwroot/xxx/usr/themes/V3/assets/cache/links_cache.json
更新时间: 2026-07-23 10:30:00第四步:设置定时任务(每天自动重建)
- 登录宝塔面板
- 点击左侧菜单「计划任务」
- 点击「添加任务」
填写任务信息:
- 任务名称: 每日更新友情链接
- 执行周期: 每天
- 执行时间: 02:00(凌晨 2 点,服务器负载低时)
- 任务类型: Shell 脚本
脚本内容:
cd /www/wwwroot/你的域名/usr/themes/V3/assets/scripts && php build_links.php >> /www/wwwroot/你的域名/logs/links_cron.log 2>&1
- 点击「保存」
友链页面效果
友链页面展示为三列卡片网格,每个卡片包含:
- 网站截图(Puppeteer 生成)
- 网站头像(Gravatar)或首字母占位符
- 网站名称和 URL
- 评论次数
响应式适配:
- 桌面端:3 列布局
- 平板端:2 列布局
- 移动端:1 列布局
技术说明
文件结构
assets/
├── cache/
│ └── links_cache.json # 友链缓存文件
├── screenshots/ # 网站截图目录
│ ├── xxx_desktop.jpg # 桌面端截图(1440×900)
│ └── xxx_mobile.jpg # 移动端截图(390×844)
└── scripts/
├── build_links.php # 友链构建主脚本
├── screenshot.js # Puppeteer 双模式截图脚本
└── package.json # Node.js 依赖配置脚本逻辑
build_links.php:
- 查询 Typecho 评论表,按 URL 分组统计评论数
- 验证每个 URL 的 HTTP 状态码(必须为 200)
- 验证 Content-Type 是否为 text/html(排除图片、文件等)
- 调用 Puppeteer 脚本生成桌面端和移动端双截图
- 按评论数从高到低排序
- 将结果保存为 JSON 缓存文件
screenshot.js:
- 使用 Puppeteer 启动无头 Chrome(配置防沙箱参数)
- 桌面端模式:设置视口 1440×900,访问 URL,等待 domcontentloaded
- 截取桌面端截图,保存为 JPEG 格式(质量 85)
- 移动端模式:设置视口 390×844,标记 isMobile: true,重新访问 URL
- 截取移动端截图,保存为 JPEG 格式(质量 85)
- 关闭浏览器
双截图适配机制
- 使用 HTML
<picture>元素实现设备适配 - 桌面端(>768px)加载
xxx_desktop.jpg - 移动端(≤768px)加载
xxx_mobile.jpg - 即使移动端截图失败,仍可回退显示桌面端截图
缓存机制
- 截图文件以 URL 的 MD5 值 + _desktop/_mobile 后缀命名
- 已存在的截图不会重新生成,只更新不存在的
- JSON 缓存文件包含所有友链数据,前台直接读取
- 定时任务每天重建,确保数据最新
常见问题
Q1:友链页面显示空白?
- 确认已运行过 build_links.php 脚本
- 检查缓存文件是否生成:
assets/cache/links_cache.json - 确认 PHP 有权限写入
assets/cache/和assets/screenshots/目录
Q2:Puppeteer 截图失败?
- 确认 Node.js 和 Puppeteer 已正确安装
- 检查服务器是否有足够内存(建议至少 1GB)
尝试手动运行截图脚本测试:
node screenshot.js https://example.com /tmp/test.png
Q3:截图很慢?
- 正常现象,每个网站需要加载完整页面
- 建议在凌晨定时执行,避免影响白天访问
Q4:如何添加手动友链?
- 当前版本仅支持自动从评论提取
- 如果需要手动添加,可以直接编辑
links_cache.json文件
注意事项
- 服务器资源: Puppeteer 截图会消耗较多 CPU 和内存,建议在低峰期执行
- 存储空间: 每个截图约 50-200KB,大量友链会占用较多空间
- 隐私保护: 仅抓取公开网站,不抓取需要登录的页面
- 网络超时: 每个网站截图超时时间为 30 秒,超时会跳过
三、技术说明
转码参数说明
- VP9 编码:Google 开发的开源视频编码,压缩率高,质量好
- CRF 30:恒定质量模式,值越小质量越好,体积越大
- libopus:WebM 音频编码,音质好,体积小
- libvorbis:OGG 音频编码,开源免费
文件命名规则
video.mp4→video.webmaudio.mp3→audio.ogg- 截图文件:
md5(url).png
版本:V3 主题 1.3.0
日期:2026年7月23日