Shino Aoi
文章7
標籤2
類別2

文章分類

文章歸檔

在手机上部署并维护hexo博客的奇怪问题

在手机上部署并维护hexo博客的奇怪问题

前情提要:最近我重新捡起了停更长达三年的博客,这个博客最初只是我用来研究各类新工具、新玩法的平台。我花了5块钱重金(雾)购入了一个域名,同时将网站托管到了Cloudflare Pages平台。相较于GitHub Pages。因为学业原因,这段时间一直没办法使用电脑,后续的过程,我都是在手机上完成的,有一些很多网上没讲到的问题,所以就分享一下。**这不是一篇一条龙,只是我自己的问题总结和流程。**我实在是没有精力把注册到创建库都给你走一遍。所以我引用了一些文章,非常感谢那些作者。

正文

准备工作

先是准备工作,你在手机上面要下载Termux(理论上来说,任何一个终端管理器都可以),以及一个 MT 管理器(或者是什么任何功能强大的管理器都可以,但是我这里建议用 MT管理器,因为它可以方便地挂载 Termux 的目录.好像MixPlorer也可以).建议再找一个科学上网环境(毕竟github……)。如果你和我一样的话,你的手机需要ROOT。

注册 Cloudflare和GitHub

首先配置你得先有个账号吧,这里注册我就不再赘述了。
CF官网,github官网
当然,这里也有一个问题,有可能你进不去注册界面,它的域名是 dash.cloudflare.com。你可以参考网上大神的方式,像改host或者是用Cloudflare的SaaS,但是为了省事,我在这里先建议大家用科学上网。

配置Cloudflare pages和Github仓库

https://blog.csdn.net/xxxlxxxxlx/article/details/155951727(配置CF)
这里的问题主要是Github绑定不上(不知道是不是我的VPN的问题),可以试试开隐私页面或者换个节点/浏览器。#注意:一定要勾上“允许访问隐私仓库”或至少把你的库选上,不然部署不了。
创建一个Github仓库。叫什么都可以。因为我们是用的是CF Pages,所以设置私密也可以(只要你上一步允许了就行)。**最好不要用这个仓库存其他的东西!也不要设置多个分支!**除非你想在推送的时候把你搞死。

Termux(ROOT)

什么是ROOT:手机ROOT是Android系统用户获取操作系统超级用户权限的技术操作,用人话讲就是获取你手机的最高权限,因此可以进行一些高级操作。该操作具有 风险性,会让你的手机失去保修(如果你还有的话)。
为什么:理论上来说,如果你的手机版本小于安卓11,那么你也可以不用root(但真的有人用么)。因为并且随着 Android 版本的提升,在 Android 11 中限制了对 /sdcard/Android/data 目录的访问,几乎只能通过 root 权限进行访问。

没有ROOT

还有一种方法:SHIZUKU/DHIZUKU来获取/data的权限。前者使用ADB(Android Debug Bridge),后者使用设备拥有者权限(Owner)权限,后者理论上是除了ROOT的最高权限。具体可以看:Shizuku官网,“不能解锁、无法ROOT也能玩机:Shizuku 基础使用攻略:让应用直接使用高级权限” -知乎,Dzhizuku官网,Shizuku的激活有三种:ROOT,电脑有线链接和手机无线调试,在这里推荐无线调试,因为一个手机搞定,也不要ROOT(不然你也不会在这里)。不过,无线调试要求安卓10+且Shizuku每次重启会掉。Dzhizuku则需要Shizuku,权限更高,而且重启大概率不会掉,也可是实现反激活(Dhizuku激活Shizuku)。但软件生态不怎么样。这些文章十分详细,看完大概就会了。配置完成后,往下看。

有ROOT

往下看就可以

  1. 安装 Git
    打开 Termux,依次执行:
1
2
3
4
# 更新软件源
pkg update && pkg upgrade -y
# 安装git
pkg install git -y
  1. 配置全局用户名邮箱(必须,否则无法提交)
1
2
3
4
5
git config --global user.name "你的GitHub/Gitee用户名"
git config --global user.email "你的注册邮箱"

# 查看配置是否生效
git config --global --list

安装HEXO

一、前置更新

1
2
pkg update && pkg upgrade -y
pkg install git openssh nano -y

二、安装 Node.js(含 npm)
Termux 官方源自带 nodejs:

1
2
3
4
pkg install nodejs -y
# 验证版本
node -v
npm -v

三、全局安装 Hexo

1
2
3
npm install -g hexo-cli
# 验证 hexo 是否装好
hexo -v

四、初始化 Hexo 博客
创建博客文件夹(比如 blog,其实叫什么都可以)

1
2
3
4
hexo init blog
cd blog
# 安装依赖
npm install

但这里注意,在第四步时,你的目录最好创建在Termux的默认目录下(>/data/data/com.termux/files/home)
因为Termux在高版本安卓里对你的SDCard目录有访问限制,会报错。如果你ROOT了,直接挂就行。如果没有,你也可以试试Shizuku,或者祈祷你的手机可以使用(?)
如果你和我一样挂在了默认目录,你可以打开MT管理器,点挂载,点本地,把Termux挂上就可以了。

编写,部署和提交博客

首先,配置Hexo就不多说了。关于编写blog,我的建议是:用管理器内置。因为最方便,权限啥的也更好管理(网上的什么编辑器很大一部分访问不了底层目录)。况且,MD格式也不需要什么编码器(碎碎念)。

部署,你可以像之前一样,git add . git commit git push,但你如果恰巧和我一样懒,你可以试这个(万能的AI):
一、创建脚本文件

  1. 先建脚本存放目录
1
mkdir -p ~/scripts
  1. 编写 bpush.sh 脚本
1
nano ~/scripts/bpush.sh

把下面内容完整粘贴进去(碎碎念:其实这一步用管理器更好,我个人真用不惯nano):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

#!/usr/bin/env bash

# ========== 配置区(按需修改) ==========
# 你的 Hexo 博客目录
BLOG_DIR="$HOME/blog"
# 固定提交信息
COMMIT_MSG="更新博客"
# 远程分支名(main/master 自行修改)
BRANCH="main"
# ======================================

# 检查博客目录是否存在
if [ ! -d "$BLOG_DIR" ]; then
echo "❌ 错误:博客目录 $BLOG_DIR 不存在"
exit 1
fi

cd "$BLOG_DIR" || exit 1

# 检测是否有文件变更(工作区+暂存区)
if git diff --quiet && git diff --cached --quiet; then
echo "ℹ️ 暂无文件更新,无需提交"
exit 0
fi

echo "🔍 检测到文件更新,开始处理..."

# 1. 重新生成 Hexo 静态页面
echo "📦 正在生成静态页面..."
hexo clean && hexo generate
if [ $? -ne 0 ]; then
echo "❌ Hexo 生成失败,已终止"
exit 1
fi

# 2. Git 提交所有变更
echo "📝 正在提交到本地仓库..."
git add .
git commit -m "$COMMIT_MSG" --allow-empty-message > /dev/null 2>&1
echo "✅ 本地提交完成"

# 3. 判断是否带 -p 参数(推送远程)
if [ "$1" = "-p" ]; then
echo "🚀 正在推送到远程仓库..."
git push origin "$BRANCH"
if [ $? -eq 0 ]; then
echo "🎉 全部完成:博客已更新并推送到 GitHub"
else
echo "❌ 推送失败,请检查网络、凭证或仓库配置"
fi
else
echo "ℹ️ 已本地提交,如需推送远程请执行:bpush -p"
fi

保存退出:Ctrl+O → 回车 → Ctrl+X
3. 给脚本加执行权限
bash
运行
chmod +x ~/scripts/bpush.sh
二、绑定别名到 Termux

  1. 编辑 .bashrc 配置文件
1
nano ~/.bashrc

在文件末尾加上这一行:

1
alias bpush='bash ~/scripts/bpush.sh'

保存退出。
2. 让配置立即生效

1
source ~/.bashrc

三、使用方法
只本地提交,不推送

1
bpush

自动检测文件变化 → 生成静态页 → git 提交,不推送到 GitHub
提交并推送到 GitHub

1
2
bpush -p

其他问题

Node.js版本

Hexo 7.x 官方最低要求:Node.js 18.0.0 及以上
Termux 默认 pkg install nodejs 安装的是最新稳定版,大概率满足,但存在两种坑问题:
旧版 Termux 源 node 16 及以下:直接不兼容 Hexo7,运行会报语法 / API 错误
Node 22 最新版:少数 Hexo 插件存在兼容警告,优先推荐 Node 20 LTS
建议在运行前看看版本。如需稳定直接指定安装 nodejs-lts 锁定 20LTS。

报错“Username for ‘https://github.com’:

Password for ‘https://xxx@github.com’:”
没有配置 Git 推送凭证。有两种可选:SSH,PAT。
PAT 令牌密码登录简单点、SSH 密钥免密推送更长期推荐。具体可以看:https://www.cnblogs.com/tlnshuju/p/19358599

3. 权限问题

  • 脚本无执行权限
    现象:bash: ./xxx.sh: Permission denied
    原因:新建脚本默认没有 x 执行位
    解决:chmod +x ~/scripts/bpush.sh
  • 访问手机共享存储报错(如果你真的想在sdcard目录下创建的话…)
    现象:Permission denied 无法读写 ~/storage/
    原因:没申请存储权限
    修复:
1
termux-setup-storage

弹窗点允许,会自动生成 ~/storage 软链接。但不建议,因为我手机上经常失败。

4. Hexo/Node 不能读写目录

报错:EACCES: permission denied
诱因:
把博客项目放在 ~/storage(安卓共享存储不支持 Linux 文件权限模型)
手动复制 Windows 文件进 Termux 携带错误权限
解决:
项目全部移回 ~/ 家目录
批量修复权限:chmod -R 755 ~/blog

5. 缓存目录 npm 权限不足

报错:npm ERR! EACCES mkdir
Termux 的 npm 全局安装无需 sudo,但缓存损坏会锁权限:

1
2
3
rm -rf ~/.npm
pkg reinstall nodejs
cd ~/blog && rm -rf node_modules package-lock.json && npm install

6. 无法修改配置文件

比如 _config.yml、~/.bashrc 只读:

1
chmod u+w ~/.bashrc ~/blog/_config.yml

7. 为什么我进入ROOT(su)之后什么指令(如GIT)都用不了?

Termux默认root会清空PATH,用人话说就是不认了。
-直接用绝对路径。比如用adb devices:

1
/data/data/com.termux/files/usr/bin/adb devices
  • 单次设定PATH。同样是adb:
1
su -c "PATH=/data/data/com.termux/files/usr/bin:$PATH adb devices"
  • 永久生效
    编辑 Termux 配置 ~/.bashrc,末尾添加:
1
alias su='su -c "export PATH=/data/data/com.termux/files/usr/bin:$PATH; exec sh"'

重载配置:

1
source ~/.bashrc

之后直接输入 su 进入 root即可

8. Shizuku出现问题?

我总结了一些常见问题:

  • 卡在「正在搜索配对服务」
    原因:厂商后台限制 Shizuku 本地网络、锁屏断后台网络,也就是没电
    解决:电池优化设为无限制 / 永不休眠,开启自启动、后台活动,配对时保持屏幕常亮,关闭 VPN、移动数据,只用 2.4G WiFi(其实不用2.4也可以,但是这样跟保险),关闭系统「锁屏后清理后台」「极致省电」
  • 输入配对码立刻失败(MIUI/POCO 专属)
    原因:MIUI 把窗口拦截了
    解决:设置→通知管理→Shizuku→通知显示设置→切换原生通知样式
  • 无线配对提示配对超时 / 端口错误
    原因:WiFi 跨网段、5G WiFi 不稳定、无线调试过期
    解决:
    用2.4Ghz,关闭双频合一,开发者选项关闭再重新打开「无线调试」,多刷新几次调试码,手动查看 IP + 端口,手动输入配对,看看你家路由器有没有网,有没有开内网隔离,有没有把你设置为访客
  • 电脑 USB ADB 激活模式(数据线)
  • 电脑执行 adb 启动脚本提示 Permission denied
    解决:你没勾选「始终允许此电脑调试」,可删除已授权主机,重新授权。**安卓 13 + 必须开启:USB 调试(安全设置)**换一条质量好点的数据线、用后置 USB 口,最好别用拓展坞(也可以用前提是你对这东西很信任且你电脑没有其他的了。前置USB口和扩展坞一个道理,只不过插得是主板的usb插针)
  • adb shell sh /sdcard/xxx/start.sh 提示文件不存在
    新版 Shizuku 脚本在Android/data/moe.shizuku.privileged.api/,天杀的系统会限制该目录访问
    解决:复制start.sh+starter到普通文件夹(Download)再执行 adb 命令
  • adb 命令卡住无输出、光标卡死不动
    解决:这是SELinux 强制模式拦截。系统后台杀 Shizuku 进程,提前关闭所有省电策略。重启 adb 服务,电脑执行adb kill-server && adb start-server。
  • 电脑启动提示 ADB 权限不足、无法启动服务
    解决: 这是厂商限制。MIUI把USB 调试(安全设置)打开;ColorOS是关闭权限监控;Flyme要关闭支付保护OriginOS关闭「ADB 权限管控」

9.为啥推送到Github过了好久都没反应?

到CF面板看一下报错。有时候是你本地的模块没安装,或者是CF node.js版本不对…反正,大概率是CF问题。

结尾+碎碎念

这也是我自己折腾出来的东西,也是我的第一篇长文。加上好久之前了,其实有些也快忘得差不多了(笑)。因为各种问题,前前后后写了快2个月(现在我在写这一段的时候是2026/7/3 15:49,也就是3个月多了???),甚至开头我就是用手机写的。现在快九年级,可能时间越来越少了,已经开始阶段性断网了(悲)。但不管怎么样,好歹是挤完了。以后要是有时间,我也会写点其它的。

FIN

博主:Shino Aoi
文章連結:https://429854.xyz/posts/e245035f
版权声明:本文采用 CC BY-NC-SA 4.0 协议进行许可