用Termux在Android手机上部署Hexo静态博客:从环境配置到Nginx服务完整指南 📅 发布时间:2026/9/9 17:31:38 👁 浏览次数: 把个人博客部署在手机上这事听起来有点像“伪需求”但实际折腾下来你会发现它带来的反馈特别直接。最近我在Android手机上用Termux把一个完整的个人博客网站跑了起来从安装环境、写文章、生成静态页面到手机浏览器访问整个过程非常“硬核”但又意外地顺滑。Termux不是虚拟机也不是模拟器它是一个运行在Android上的Linux环境终端能做的事情远不止输入几条命令。这篇内容我就把这套完整的部署过程、方案取舍和踩坑记录写出来给想尝试的同学一条可复现的路径。这篇内容适合谁如果你是刚接触Termux的新手想搞一个真正属于自己的博客网站但不想花钱买服务器或者你已经在用Hexo、Hugo这类静态博客工具想在手机端继续写文章、随时发布甚至你只是好奇手机上跑Nginx会不会卡死——这篇文章都能给你答案。整个过程我会用尽量白话的方式讲清楚同时把关键命令和配置文件直接贴出来。1. 项目方案选型与设计思路1.1 搞清楚Termux到底能干什么Termux是Android平台上的一款终端模拟器软件它不依赖root权限也不需要在手机里装一个完整的虚拟机而是通过Android系统提供的原生接口在用户态搭建了一套精简的Linux环境。这意味着你可以在里面跑bash、装Python、Node.js、Nginx这样的软件包甚至可以安装完整的Linux发行版但日常使用中我们只需要用它自带的基础环境就够了。很多同学第一次打开Termux会有点懵这就是一个黑底白字的终端怎么安装软件其实它内置了包管理器pkg底层是apt用法和Debian/Ubuntu的apt几乎一样。比如想装Python只要输入pkg install python想装Nginx输入pkg install nginx。它背后会从Termux维护的软件源下载预编译好的二进制包省去了自己编译的麻烦。但要注意一点Termux的环境和普通的Linux发行版有些区别。它的根目录是/data/data/com.termux/files/usr这个路径在Android的文件系统里属于应用私有目录不需要root权限就能读写。你在Termux里安装的所有软件、配置的所有文件都会存放在这个目录下。理解这一点后面配置Nginx和博客文件路径时会非常有帮助。1.2 为什么静态博客才是手机端的最优解在手机上部署博客有两种思路动态博客和静态博客。动态博客的代表是WordPress、Typecho这类系统它们需要PHP、数据库MySQL/PostgreSQL以及运行环境每次用户访问页面时都要动态执行脚本、查询数据库然后生成HTML返回给浏览器。这种方案功能强大但对运行环境要求高在手机这么点算力上跑起来会比较吃力而且内存占用大后台稍微一折腾就容易被Android系统杀掉进程。静态博客的思路则完全不同。它把文章内容用Markdown编写通过静态站点生成器比如Hexo、Hugo在本地生成一堆预先渲染好的HTML、CSS、JavaScript文件。用户访问时Nginx只需要把这些静态文件原样发送给浏览器不涉及脚本执行、不涉及数据库查询。因此它极其轻量CPU和内存占用几乎可以忽略不计特别适合手机端这种资源受限的场景。这里我推荐使用静态博客还有一个重要原因是数据管理方便。所有文章都是一份份纯文本的Markdown文件你可以随时备份到云端、同步到Git仓库甚至换一台手机重新部署时只要把文件夹拷过去就行了完全不会有数据库迁移的烦恼。对于个人博客来说静态方案带来的简洁和维护性远大于动态方案的功能堆砌。1.3 选Hexo还是Hugo我的取舍思路静态博客生成器非常多主流的有Hexo、Hugo、Jekyll、VuePress等。其中在手机端部署最顺手的两个是Hexo和Hugo。我最终选择了Hexo但这里把两者的差异说出来你可以根据自己的偏好来选。Hexo基于Node.js生态非常成熟尤其在国内的使用人数很多主题、插件资源丰富几乎你想要的任何功能都能找到现成的插件。缺点是需要先安装Node.js环境第一次npm install在手机上会比较慢而且占用存储空间相对大一些。Hugo则是一个用Go语言编译的静态二进制文件部署极其简单没有依赖环境生成页面速度非常快尤其适合文章数量多的博客。缺点是对新手来说主题模板的语法相对复杂自定义起来没有Hexo那么门槛友好。考虑到大多数写博客的人对Markdown、Node.js的熟悉程度更高而且Hexo的文档和社区资料更全我在部署时选择了Hexo。如果你不喜欢Node.js那套直接换成Hugo也完全可行Nginx配置部分完全不受影响。1.4 整体架构一篇文章从写到访问的完整链路在动手之前先在心里画一张图。整个博客系统分为几个独立的部分它们各司其职内容层你用Markdown写的文章存放于博客项目的source/_posts/目录下。构建层Hexo读取Markdown文件结合你选定的主题模板生成一套完整的静态网页文件输出到public/目录。服务层Nginx监听手机上的某个端口比如8080将public/目录作为网站根目录收到浏览器请求后返回对应文件。访问层手机浏览器访问localhost:8080同一Wi-Fi下电脑访问手机IP:8080如果你有公网域名还可以通过内网穿透工具把服务发布到公网。这个架构的好处是每一层都可以单独替换。比如你用Hugo替代了Hexo生成静态文件的位置变了只需要改Nginx的root路径就行今天不想用Nginx用python -m http.server也能临时顶上。理解了这条链路你后面遇到任何问题都能快速定位是内容、构建还是服务的问题。2. 环境准备与核心细节解析2.1 安装Termux与基础初始化第一步肯定是把Termux装到手机上。这里有一个容易踩坑的地方不要从Google Play商店下载Termux。原因是Play版的Termux早就停止维护了功能不完整很多包安装不上。推荐从F-Droid应用商店或Termux的GitHub官方仓库下载最新版本装好后打开终端先执行一次更新pkg update -y pkg upgrade -ypkg update会从软件源获取最新的包列表pkg upgrade则是把已安装的包升级到最新版本。第一次执行时可能会遇到网络不通或者软件源连接缓慢的情况这就需要了解接下来的换源操作。安装完成之后建议顺手执行一下termux-setup-storage这个命令会申请访问手机外部存储的权限并在Termux的home目录下生成~/storage快捷方式。虽然部署博客暂时用不到外部存储但后续你如果要备份文章、把写好的Markdown文件从其他编辑器拷贝进来就不用来回折腾权限了。2.2 换源加速Termux包下载的关键操作Termux默认的软件源服务器在国外国内网络环境下pkg update经常超时。解决这个问题的方式和Linux换apt源是一模一样的把源地址改成国内镜像。这里推荐使用清华TUNA镜像源或者中科大镜像源替换方法比较直接。先备份原文件然后编辑源配置cp $PREFIX/etc/apt/sources.list $PREFIX/etc/apt/sources.list.bak nano $PREFIX/etc/apt/sources.list如果你使用的是Termux新版本源配置被拆散放在$PREFIX/etc/apt/sources.list.d/目录下最常见的是termux.list文件。修改内容如下以清华源为例deb https://mirrors.tuna.tsinghua.edu.cn/termux/apt/termux-main stable main保存后重新执行pkg update速度会明显提升。这里有个小提示以后如果发现某个包版本始终跟不上大概率是缓存出的问题先pkg clean再pkg update基本就能解决。2.3 安装Node.js和Nginx既然选择了HexoNode.js就是必须的运行时环境。Termux的软件源里提供了nodejs和nodejs-lts两个包我建议装nodejs-lts因为LTS版本更稳定对Hexo这类工具的兼容性更好。Nginx同样通过pkg安装这两项可以一起搞定pkg install nodejs-lts nginx -y安装完成后记得验证一下版本确保命令可用node -v npm -v nginx -v如果node和npm版本都正常打印出来了就说明基础环境已经就绪。这里有一个小知识点Termux里的Nginx默认安装路径是$PREFIX/etc/nginx可执行文件在$PREFIX/bin/nginx它的配置文件和普通Linux发行版略有差异后续配置时需要留意。2.4 目录规划别让文件散落得到处都是手机上的存储空间不像电脑上那么宽裕目录规划越清晰越好维护。我的建议是在Termux的home目录下新建一个专门用于博客的目录比如~/blog里面再细分几个子目录~/blog/hexo/存放Hexo项目源文件包括Markdown文章、主题配置等。~/blog/www/存放Hexo生成的静态文件即public目录Nginx直接指向这个目录。~/blog/backup/定期备份文章和配置的归档目录。之所以把hexo和www分开是为了构建产物的独立性。每执行一次hexo generate生成的静态文件会覆盖到www目录但你手写的Markdown源文件却不会受影响。如果你哪天想换一套主题、换一种生成器源文件还在随时可以重新生成。3. 实操过程与核心环节实现3.1 全局安装Hexo并初始化博客项目环境准备好之后开始正式搭建。先用npm全局安装Hexo命令行工具npm install -g hexo-cli全局安装的hexo命令会放到$PREFIX/bin下所以装完之后直接就能用hexo命令。然后初始化博客项目mkdir -p ~/blog cd ~/blog hexo init hexo cd hexo npm installhexo init会拉取官方的基础模板包含默认的主题和配置结构npm install则是安装Hexo项目所需的依赖包。这两个命令在手机上执行会有点久耐心等着就好。初始化完成后项目目录会生成这些关键文件_config.ymlHexo的站点配置文件比如站点标题、作者、主题、文章URL格式等都在这里改。scaffolds/文章模板目录执行hexo new时按这里的模板创建文章。source/_posts/存放你写的Markdown文章。themes/主题目录默认自带一个landscape主题。3.2 生成一篇测试文章并构建静态页面新建一篇文章试试手hexo new post hello-world这条命令会在source/_posts/下生成一个hello-world.md文件。你可以用Termux里自带的nano编辑器打开它也可以直接硬编码一行内容echo # 你好Termux博客 source/_posts/hello-world.md然后执行构建命令hexo generate看到输出信息里生成了一堆HTML文件并且保存在public/目录下就说明构建成功了。注意hexo generate可以简写为hexo g后面我们经常用到。每次修改文章或配置后都需要重新执行一次hexo g静态文件才会更新。3.3 配置Nginx把博客“发出去”静态文件已经生成但还差最后一步让Nginx把目录里的文件作为网站内容发送给浏览器。Termux的Nginx配置文件在$PREFIX/etc/nginx/nginx.conf默认配置里已经有一个完整的server块但监听的是8080端口而且server_name默认是localhost。我们要把它修改成指向博客的public目录。用nano编辑配置文件nano $PREFIX/etc/nginx/nginx.conf把server块里的内容改成大致这样server { listen 8080; server_name localhost; root /data/data/com.termux/files/home/blog/hexo/public; index index.html; location / { try_files $uri $uri/ 404; } access_log /data/data/com.termux/files/home/blog/nginx-access.log; error_log /data/data/com.termux/files/home/blog/nginx-error.log; }这里有几个细节需要注意。第一root路径很重要/data/data/com.termux/files/home/是Termux home目录对应的真实绝对路径如果你用~/blog/hexo/public来写Nginx可能解析不了。第二access_log和error_log建议单独指出来因为Termux的默认日志路径在某些版本里不可写不修改会导致Nginx启动失败。第三try_files的作用是当请求路径不存在时尝试寻找匹配的静态文件找不到就返回404这是静态博客场景下的标准配置。配置好之后先测试语法是否正确nginx -t看到configuration file test is successful的提示后启动Nginxnginx没有报错就说明启动成功。这时打开手机浏览器访问http://127.0.0.1:8080如果能看见Hexo默认页面那整个博客系统就已经彻底跑通了。3.4 排除一个容易迷惑的点修改配置后必须重载Nginx在运行中修改了配置文件默认是不会立刻生效的。每次改动nginx.conf或root目录、端口之后需要让Nginx重新加载配置。常用方式是nginx -s reload或者先停掉再启动nginx -s stop nginx如果你发现改了root配置之后页面内容还是旧的先别怀疑配置文件检查一下是不是忘了重载。另外修改了hexo generate生成的静态文件之后也不需要重载Nginx因为Nginx每收到一次请求都是直接去root目录下读文件的只要文件更新了刷新浏览器就能看到新内容。3.5 用Termux:Boot让博客开机自启手机上开博客最大的痛点是什么是Termux进程可能被Android的后台管理系统杀掉一觉醒来博客就访问不了了。虽然这里没有完美的“开机自启”方案能对抗系统强杀但至少能保证你重启手机之后Nginx自动跑起来。需要安装一个额外应用Termux:Boot同样在F-Droid上可以找到。安装完成后在Termux里执行mkdir -p ~/.termux/boot然后在里面创建一个启动脚本比如start-blog.sh#!/data/data/com.termux/files/usr/bin/bash termux-wake-lock nginx给脚本加上可执行权限chmod x ~/.termux/boot/start-blog.sh以后每次手机开机只要Termux:Boot服务允许运行这个脚本就会执行自动拿到唤醒锁并启动Nginx。为了避免App被一键清理掉记得在系统设置里把Termux和Termux:Boot设为不限制后台运行。4. 公网访问让博客不只停留在手机上4.1 局域网访问同一Wi-Fi下快速预览博客部署完成以后你肯定不满足于只在手机浏览器里看到它。如果电脑和手机连接的是同一个无线路由器最简单的办法是直接把手机上的Nginx端口暴露给局域网访问。先查一下手机的局域网IP地址ifconfig这里注意Termux里可能没有ifconfig命令需要先执行pkg install net-tools安装网络工具。也可以直接用ip addr这个命令通常在Termux里默认就有。找到类似192.168.x.x的地址然后在电脑浏览器上输入http://192.168.x.x:8080就能访问到手机上的博客了。这里有一个让人疑惑的点手机上的Nginx明明监听的是8080端口为什么电脑能通过192.168.x.x:8080访问到原因在于listen 8080默认监听的是所有网络接口0.0.0.0:8080不仅仅是指向127.0.0.1所以局域网内的设备可以顺利连过来。如果你只想让本机访问可以在listen处写成listen 127.0.0.1:8080;这样别人连不上只有手机自己访问得到。4.2 用内网穿透工具实现公网访问同一局域网访问虽然方便但脱离Wi-Fi之后电脑就没法访问了。如果你有自己的域名又想在外面也能看到博客可以用内网穿透工具。这里我推荐Cloudflare Tunnel它是一款相对安全、免费额度够个人使用的工具Termux软件源里直接提供用起来很方便。先安装pkg install cloudflared然后创建一个隧道并绑定到你的域名上。由于中文社区里关于Cloudflare Tunnel的教程非常多这里只强调几个核心步骤和避坑点。首先是登录认证执行cloudflared tunnel login会输出一个授权链接在电脑浏览器里打开并使用你的Cloudflare账号授权。然后是创建隧道cloudflared tunnel create blog-tunnel接着把域名DNS解析到这条隧道cloudflared tunnel route dns blog-tunnel blog.example.com最后配置并运行隧道。为了让Nginx的8080端口直接暴露到公网可以写一个配置文件指定服务地址指向http://localhost:8080然后运行cloudflared tunnel run blog-tunnel跑通之后访问blog.example.com就能看到博客了。需要注意的是这种模式要求你有一个已经在Cloudflare托管解析的域名免费版就能满足个人用途流量限制对纯静态博客来说完全够用。还有一种更直接的内网穿透方式是用ngrokpkg install ngrok也能直接用但ngrok免费版的访问地址每次都变不太好记相比之下Cloudflare Tunnel配好域名之后地址固定更适合长期使用。4.3 关于公网发布我建议你慎重考虑的几件事虽然把手机上的服务暴露到公网是一件很酷的事情但从工程角度讲我并不建议你把手机当作正式的服务器长期对外提供服务。原因如下。第一手机网络通常不稳定尤其是运营商采用的动态IP即使配好了内网穿透手机每次切换Wi-Fi或蜂窝网络穿透隧道往往需要重连这会带来不小的访问延迟和不连贯的体验。第二手机的处理能力和持续供电都有限长时间高速运行会造成发热和耗电对手机电池也有损害。第三把服务暴露到公网等于你的手机直接面向互联网开放了一个端口如果Termux或Nginx存在安全漏洞存在被扫描和利用的风险。对个人学习、临时演示来说这种方案非常棒但如果真的打算长期运行博客我还是建议花几十块钱买一台云服务器。5. 常见问题与排查技巧实录5.1 pkg update失败或慢到怀疑人生这是Termux新手最常遇到的问题。如果你更新源时一直卡住不动或者报错显示连接超时大概率是源服务器的问题解决方法就是换源。前面介绍了清华和中科大源这里再补充一点换完源后执行pkg clean清一下缓存然后pkg update如果还是失败可以试试看curl能不能打开镜像站点curl -I https://mirrors.tuna.tsinghua.edu.cn/termux/apt/termux-main/如果curl能通但apt还是失败检查一下系统时间是否准确。Android的自动时间同步偶尔会出问题时间偏差太大会导致HTTPS证书校验失败这种问题很隐蔽排查时容易忽略。5.2 npm install卡住不动在Termux上执行npm install慢几乎所有人都会遇到。手机上跑Node.js本身就不如电脑快再加上默认的npm源是官方源在国内网络环境下下载依赖包简直是折磨。解决思路和换apt源一样把npm源切换到国内镜像npm config set registry https://registry.npmmirror.com切换之后再执行npm install速度会提升不少。另外一个技巧是如果卡在某个依赖上不要干等先CtrlC停掉再跑一次npm installnpm的缓存机制会让已下载的部分不重复下载。5.3 Nginx启动失败问题总出在log路径Nginx在Termux里启动失败最常见的原因不是端口被占用而是日志目录不可写。Termux的$PREFIX/var/log/nginx/目录在某些版本里不存在或者没有写入权限。所以在配置Nginx时最好直接把access_log和error_log指向home目录下你创建的文件就像我前面给出的配置那样。遇到Nginx启动失败先用nginx -t排查配置文件语法再用pkill nginx确认没有残留进程占用端口最后看error日志定位真正的错误。5.4 Termux进程被系统杀掉的几种应对方式Android的后台管理是Termux最不友好的地方好不容易把Nginx跑起来了切到别的应用刷会儿短视频回来一访问页面打不开了。这时候可以试试这些方法组合使用。第一使用termux-wake-lock让Termux保持运行状态。这是一个功耗管理工具执行后让Termux争取更长的后台驻留时间。第二把写在~/.termux/boot/目录下的启动脚本里加上这个命令保证重启后自动获取唤醒锁。第三在系统的“应用设置”里关掉Termux的电池优化允许它在后台活动。如果以上都做了还是会被杀那就只能老老实实把长期运行的任务放到真正的服务器上。5.5 常见问题速查表问题现象最可能的原因解决办法pkg update一直卡住源服务器连接慢换清华或中科大源执行pkg clean提示unable to locate package没有先执行pkg update先更新包列表再安装npm install超时npm默认源访问慢切换npmmirror.com镜像nginx -t报路径错误access_log目录不可写手动指定日志到home目录手机浏览器访问8080端口打不开Nginx未启动或监听地址不对确认nginx进程存在检查listen电脑访问手机IP失败手机和电脑不在同一网段确认两台设备连的是同一个Wi-Fi过一会儿博客就访问不了Termux进程被系统杀掉使用termux-wake-lock并关闭电池优化内网穿透无法访问隧道未运行或域名解析不正确检查cloudflared tunnel run状态及DNS记录5.6 我踩过的一个“低级但致命”的坑最后分享一下我这次部署过程中印象最深的一次排查。博客搭好之后我兴高采烈地在电脑上访问手机IP:8080发现一直转圈打不开。排查思路很清晰先试手机上的localhost:8080能开说明Nginx没问题再查手机IP和电脑的连通性ping也通接着怀疑是防火墙但Android上没有传统意义的防火墙最后才发现问题出在手机开了“Wi-Fi隔离”功能这个功能是路由器上的一个安全选项开启了以后局域网内的设备之间不能互相访问。关掉这个选项之后电脑立刻就能访问博客了。这种问题排查起来很恼人因为现象和网络、服务器都相关但其实原因很简单。写出来提醒大家遇到局域网无法访问的情况不要只盯着Nginx配置路由器设置也要排查一下。最后再分享一点个人体会把博客部署在Termux之后我最直观的感受是写文章这件事变得更“随时”了。以前在电脑上写博客总有一种“必须坐在桌前打开编辑器”的仪式感现在手机掏出来直接在Termux里用nano编辑Markdown文件保存后执行一条hexo g再刷新页面内容就更新了。虽然这一套流程在性能上比不上真正的服务器但解决了我“在地铁上想通了一个技术点只花一分钟就能把草稿记下来并立刻发布”的需求。后续我还尝试过基于这套环境再扩展一些玩法比如在Termux里用同一个Nginx反向代理一个Python写的简单API服务以及配合crontab做每日自动备份文章。这些扩展都建立在博客已经稳定运行的基础之上。如果你也打算在Termux上部署自己的博客网站我觉得最关键的一点是不要试图一次做完所有功能先把“写文章-生成-访问”这条主链路跑通再根据需求逐步加东西。这样踩坑的时候你也知道问题出在哪一层。