抽屉里的手机还能开博客?用 Typecho 和 cpolar 搭一台可远程访问的小服务器

前言

抽屉里的旧手机不一定只能当备用机。我手里的小米 MIX 2S 虽然不再承担日常通讯,却还有 Wi-Fi、存储空间和完整的安卓系统;拿它搭一个个人博客,正好能把闲置设备变成随时可以打开的小网站。比起一上来研究复杂的服务器环境,我更愿意先把事情拆开:让手机跑起 Web 服务,让 Typecho 真正读写数据库,再解决人不在家时怎么访问。这样即使某一步出了问题,也知道该回到手机、网站还是网络入口排查。尤其在手机和电脑之间来回操作时,本机地址、局域网 IP 与公网域名各有用途,提前分清楚就少走很多弯路。

我用 KSWEB 在手机上准备 PHP、MySQL 和 Apache,把 Typecho 源码放进 htdocs,先验证本机 8000、数据库管理页 8001 和局域网访问。博客能打开之后,再通过 Termux 安装 cpolar,给手机上的 8000 提供公网入口。这里还有一个特别容易忽略的细节:第一次打开公网地址时,正文出现了,页面样式却不见了,原因并不在隧道,而是 Typecho 的"站点地址"还指向旧入口。最后,我会换成固定二级子域名 blog01,再安装 Joe 等主题,并处理演示环境中的 PHP 版本兼容问题。整条流程以这台 MIX 2S 的操作为例,不把一次访问成功夸大成手机永不掉线。

1. 先让旧手机具备长期运行的基本条件

这套演示使用的是 小米 MIX 2S、Android 9、8GB RAM / 256GB 存储,不要求 Root。准备条件给出的下限是 Android 7.0,推荐 2GB 以上内存、2GB 以上可用空间,ARM64 设备更合适。手机要保持 Wi-Fi 连接,长期使用还得留意供电、机身温度和电池状态;关闭电池优化可以减少后台被清理的机会,却不能替代真正的设备稳定性检查。

需要的文件包括 termux.apk、KSWEB.apk、typecho-master.zip,以及准备用到的主题 butterfly、Cuckoo、GreenGrapes、Joe。示例素材提供在 123 云盘,提取码是 1314:

https://www.123865.com/s/3jOKVv-9JNzH?pwd=1314

先安装 KSWEB 和 Termux。以这台小米手机为例,进入"设置 → 电量和性能 → 应用配置",将两个应用的后台策略改成无限制;不同品牌的具体入口可能不同,目的是别让 Web 服务和隧道进程在锁屏后轻易被系统清理。

随后打开 KSWEB,在设置中启用"自动启动"和"锁定 WIFI"。这一步解决的是应用层的常驻设置,之后还要分别确认 Apache 和 cpolar 是否实际在运行。

2. 用 KSWEB 先跑通手机上的 Web 环境

KSWEB 里需要用到四项:PHP 运行 Typecho,MySQL 保存文章、用户和评论,Apache 处理网页请求,PhpAdmin 则用于图形化管理数据库。示例环境中 PHP、Apache、MySQL 已经随 KSWEB 安装,先启动 Apache,再用手机浏览器打开:

shell 复制代码
http://localhost:8000

出现默认测试页,就说明本机的 8000 Web 入口可用。接下来在 KSWEB 中安装 PhpAdmin,按界面提示确认后,Apache 会重新启动;状态页出现 8001,再打开数据库管理页:

shell 复制代码
http://localhost:8001

这里两个端口的用途不要弄混:8000 放博客,8001 是数据库管理页面。后面通过 cpolar 对外提供的是博客端口,并不需要顺手把数据库管理页也开放出去。

3. 把 Typecho 文件放对位置,并让电脑能打开手机博客

解压 typecho-master.zip,把源码目录里的文件复制到 KSWEB 的站点根目录 htdocs,而不是把外层压缩包直接放进去。完成以后重新访问本机 8000,正常情况下会出现 Typecho 的安装向导。

shell 复制代码
http://localhost:8000

我更习惯在电脑大屏幕上填写数据库和管理员信息,因此还要让同一局域网中的电脑能够访问手机。把 KSWEB 中 Apache 的监听 IP 从 localhost 改为 0.0.0.0;这台 MIX 2S 的示例局域网 IP 是 192.168.50.114,在电脑浏览器里打开:

shell 复制代码
http://192.168.50.114:8000

这样做只改变了局域网访问方式。localhost 永远是当前正在操作的那台设备 :在手机上它指向手机,在电脑上则指向电脑。后面如果从电脑打开手机服务,要使用手机实际的局域网 IP,不要机械地把所有 localhost 原样粘过去。

4. 建数据库、完成初始化,先确认博客真的能用

Typecho 的安装向导需要一个 MySQL 数据库。返回 PhpAdmin 管理页:

shell 复制代码
http://localhost:8001

示例使用 root 用户,密码留空进入页面。这个空密码只是在复现演示环境,不能把它当作长期运行的安全设置;尤其不要把 8001 当成普通博客页面向公网发布。

点击"新建",数据库名称填写 xy,字符集和排序规则使用示例中的 utf8mb4_bin,然后创建数据库。数据库名称可以自定义,但 Typecho 安装向导中的名称必须与实际创建的一致。

回到 Typecho,点击"我准备好了,开始下一步",按页面填写数据库连接信息。初始化页面和管理员账户设置依次如下:

进入到初始化配置页面,配置MySQL数据库,参考如下图:

安装完成后,浏览器再次打开博客首页:

shell 复制代码
http://localhost:8000

能看到默认的"欢迎使用 Typecho"文章,才说明 Apache、PHP、Typecho 和数据库连接已经形成基本闭环。下一步不用急着换主题,先解决外部网络能否访问,以及访问之后图片、CSS 是否会正确加载。

5. Termux 安装 cpolar,把手机的 8000 端口送到公网

Typecho 此时已经在 MIX 2S 上运行,cpolar 只承担网络入口的职责:外面的浏览器经由隧道访问手机上的 8000,网站和数据库仍然运行在这台手机里。先打开 Termux,等待首次环境初始化完成。

创建软件源目录:

shell 复制代码
mkdir -p $PREFIX/etc/apt/sources.list.d

加入示例使用的 cpolar 软件源并更新仓库:

shell 复制代码
#添加cpolar下载源
echo "deb [trusted=yes] http://termux.cpolar.com termux extras" >> $PREFIX/etc/apt/sources.list.d/cpolar.list

#更新仓库
pkg update

安装 cpolar:

shell 复制代码
pkg install cpolar

安装 Termux 服务管理组件,完成安装后关闭 Termux,再重新进入,让服务环境生效:

shell 复制代码
pkg install termux-services

启动 cpolar,并为该服务设置启用状态:

shell 复制代码
sv up cpolar
shell 复制代码
# 设置开机自启
sv-enable cpolar

需要分清:sv-enable cpolar 管理的是 Termux 服务,不等于已经解决 Android 设备重启后所有应用、Wi-Fi 和后台进程自动恢复的问题。长期运行时还需要结合手机的后台限制和实际重启测试确认。现在先在手机浏览器打开 cpolar 管理页,使用已注册的账号登录:

shell 复制代码
http://localhost:9200

6. 第一次公网访问:正文有了,样式为什么没了?

进入 cpolar 后创建指向 Typecho 8000 的 HTTP 隧道。在线列表里显示隧道名 typecho-8000,并出现 HTTP、HTTPS 两条公网地址;先用 HTTPS 地址从外部测试。

注册好账号后,输入账号信息,登录到后台管理页面:

这次遇到的情况很有代表性:页面内容能显示,样式却没有跟上。这说明隧道已经把请求送到 Typecho,但不能据此判断整站资源地址都正确。Typecho 的"站点地址"仍指向旧地址时,CSS、图片等资源可能继续从原地址加载。

打开 Typecho 管理后台:

shell 复制代码
http://localhost:8000/admin

在"系统设置"里把"站点地址"改为这次生成的完整 HTTPS 公网地址,保存后再刷新公网页面。不要把此处当成 cpolar 的域名配置:它是 Typecho 自己用来生成网页链接和资源路径的站点配置。

如果使用随机域名,后续地址发生变化还要同步修改 Typecho 的"站点地址";否则很容易再次出现网页能开、样式缺失或跳回旧地址的情况。真正长期使用时,固定域名的价值就在于少改这一项设置。

7. 换成固定二级子域名 blog01,再同步网站地址

在 cpolar 的"预留 → 保留二级子域名"里选择地区 China Top,示例名称为 blog01。名称具有唯一性,实际以账号中保留成功的结果为准。

回到"隧道管理 → 隧道列表",找到 typecho-8000 并编辑,域名类型改成"二级子域名",填写刚保留的名称后更新。在线隧道列表中可以看到公网地址切换成固定二级子域名形式。

再回 Typecho 的"系统设置",把"站点地址"从此前的随机地址更新为固定地址,并重新打开页面确认内容与样式一致。

在这套示例里,公网入口是 blog01 对应的 cpolar 域名;它并没有把博客搬到云服务器,更不能单凭地址固定就断言旧手机永远在线。手机的供电、网络、KSWEB、Termux 和隧道仍然都要正常工作。

8. 博客能用了,再挑适合的 Typecho 主题

站点已经有稳定入口之后,再处理外观会更省心。这里展示了默认主题,以及 Joe、GreenGrapes、Typecho-Butterfly、Cuckoo 四款主题。不同主题会改变布局和功能呈现,先看实际展示效果,再决定哪个更适合自己的内容。

默认主题:

Joe:

GreenGrapes:

Typecho-Butterfly:

Cuckoo:

以 Joe 为例,将准备好的主题复制到 Typecho 的 htdocs/usr/themes 目录。注意解压后的层级:示例中出现了两层 Joe 文件夹,需要将真正的主题目录调整到正确位置,否则后台可能识别不到。

进入管理后台,可以使用手机本地地址,也可以通过已配置的公网域名访问:

shell 复制代码
# 内网本地网址
http://localhost:8000/admin

# 或者访问穿透出来的公网域名也可以的
https://blog01.cpolar.top/admin/

点击"更换外观",进入"网站外观"后找到 Joe,点击"启用"。

9. 主题显示报错,再查 PHP 版本兼容

启用 Joe 后,首页虽然切换了外观,却出现了错误提示。这不是公网隧道的问题,应该回到主题和 PHP 的兼容性上排查。

示例中的 KSWEB 默认 PHP 版本为 8.2.6,而这套 Joe 主题在演示环境中改用 PHP 7.4 后才正常显示。按 KSWEB 页面切换到 7.4.23,再重新访问博客验证:

这只能说明该主题在这套演示环境下的兼容性问题得到解决,不代表所有主题都必须使用 PHP 7.4,也不代表老版本 PHP 适合无限期公开运行。要长期运营网站,还应关注主题更新、PHP 的安全维护状态,以及站点和数据库备份。

总结

从抽屉里的旧手机到可以通过浏览器访问的 Typecho 博客,最关键的不是某个"一键安装"按钮,而是每一层都要实际验证:KSWEB 的 8000 能显示网站,8001 能管理数据库,Typecho 能完成初始化,Termux 中的 cpolar 能把请求送到手机。公网第一次只出现正文、不显示样式,也恰好提醒我:网络连通和网站配置正确是两回事;固定域名启用后,还必须同步更新 Typecho 的"站点地址"。

这台 MIX 2S 还可以继续做轻量站点和练习环境,但长期使用不能只看访问截图。供电与后台保活、数据库凭据、PHP 和主题兼容、站点备份,都和能否持续运行有关。让旧设备重新发挥价值的前提,是知道它负责什么,也知道它可能在哪一层停下来。

相关推荐
开开心心就好3 分钟前
多份文档怎么批量打印?支持多种格式
java·服务器·开发语言·pdf·ocr·散列表·启发式算法
海宇数据15 分钟前
零信任架构实战:基于海宇入职背调报告构建自动化即时配送与网约车众包运力准入鉴权网关
运维·人工智能·架构·自动化
姜鱼问生33 分钟前
每次开机手动检查 6 样东西?我写了个 2 秒自检脚本
运维·网络·nginx·docker·容器
wangqiaowq42 分钟前
PostgresSQL server Docker 安装部署
运维·docker·容器
南棋网络安全1 小时前
ssrf跨站请求伪造(保姆级教程)
运维·服务器·网络·网络安全
帷幕落秋2 小时前
进程服务与文件描述符
linux·运维·面试
帷幕落秋2 小时前
信号、Ctrl 组合键与进程状态
linux·运维·面试
开开心心就好2 小时前
文件被占用删不掉?解锁工具强制删除
java·运维·服务器·开发语言·前端·pdf·ocr
小超人诞生日记2 小时前
Linux 进程优先级
linux·运维·服务器
西安同步电子2 小时前
嵌入式二次集成怎么选频率计模块?看懂这几个参数不踩坑
服务器·硬件工程