利用旧手机搭建IPv6博客服务器:Termux与Halo 2实践

利用旧手机搭建IPv6博客服务器:Termux与Halo 2实践

1. 项目背景与核心价值

在移动互联网时代,闲置的旧手机往往被束之高阁。作为一名技术爱好者,我发现这些设备其实蕴藏着巨大的潜力。通过Termux这个强大的Android终端模拟器,配合Ubuntu chroot环境,我们可以在手机上搭建完整的Linux系统,进而部署Halo 2这样的现代化博客系统。

这个方案最吸引人的地方在于它能够充分利用IPv6公网地址。随着IPv4地址的枯竭,IPv6正在快速普及。大多数手机网络和家庭宽带都已经支持IPv6,但很多人并没有意识到这一点。通过这个项目,你不仅能让旧手机重获新生,还能获得一个真正意义上的公网可访问博客服务器。

提示:本项目需要Android 7.0及以上系统,建议使用性能较好的旧手机(如骁龙835及以上芯片),2GB内存是底线要求。

2. 环境准备与基础配置

2.1 Termux的安装与初始化

首先在F-Droid(推荐)或Google Play商店下载Termux。F-Droid版本通常更新更快,而且不包含Google Play服务依赖。安装完成后,立即执行以下命令更新软件包:

pkg update && pkg upgrade pkg install -y proot-distro

Termux默认使用自己的软件包仓库,但我们需要更完整的Linux环境。这就是proot-distro的用武之地——它允许我们在Termux中运行完整的Linux发行版。

2.2 Ubuntu chroot环境部署

在Termux中安装Ubuntu非常简单:

proot-distro install ubuntu proot-distro login ubuntu

第一次登录Ubuntu环境时,建议立即进行基础配置:

apt update && apt upgrade -y apt install -y sudo curl wget vim

注意:chroot环境下的Ubuntu与原生安装有些差异。最明显的是它使用proot模拟文件系统,因此某些低级别操作(如直接硬件访问)会受到限制。不过对于运行博客系统来说完全够用。

3. IPv6网络配置详解

3.1 检测IPv6支持情况

在Termux中运行:

curl -6 ifconfig.co

如果返回IPv6地址,说明你的网络环境支持IPv6。如果只返回IPv4地址或报错,可能需要检查:

  1. 手机数据网络:确保运营商支持IPv6(中国移动/联通/电信4G+网络通常都支持)
  2. WiFi网络:检查路由器是否开启IPv6(现代路由器默认通常已开启)

3.2 配置IPv6防火墙规则

在Ubuntu chroot环境中,我们需要确保IPv6流量能够到达Halo 2服务:

sudo apt install -y iptables ip6tables sudo ip6tables -A INPUT -p tcp --dport 8090 -j ACCEPT # Halo 2默认端口

为了持久化这些规则,可以安装iptables-persistent:

sudo apt install -y iptables-persistent sudo netfilter-persistent save

3.3 动态DNS配置(可选)

由于手机网络的IPv6地址可能会变化,建议配置动态DNS。这里以Cloudflare为例:

sudo apt install -y ddclient

编辑配置文件/etc/ddclient.conf

protocol=cloudflare zone=yourdomain.com server=www.cloudflare.com login=your@email.com password=api_key_here yourhostname.yourdomain.com

4. Halo 2博客系统部署

4.1 Java环境准备

Halo 2需要Java 17或更高版本:

sudo apt install -y openjdk-17-jdk

验证安装:

java -version

4.2 安装Halo 2

创建专用用户和目录:

sudo useradd -m -d /opt/halo -s /bin/bash halo sudo su - halo

下载最新版Halo 2:

wget https://dl.halo.run/release/halo-2.0.0.jar -O halo.jar

创建启动脚本start.sh

#!/bin/bash java -jar halo.jar --halo.external-url=https://[your-ipv6]:8090

赋予执行权限:

chmod +x start.sh

4.3 配置系统服务

为了让Halo 2在后台稳定运行,我们配置systemd服务:

sudo vim /etc/systemd/system/halo.service

添加以下内容:

[Unit] Description=Halo 2 Blog After=network.target [Service] User=halo WorkingDirectory=/opt/halo ExecStart=/opt/halo/start.sh Restart=always [Install] WantedBy=multi-user.target

启用并启动服务:

sudo systemctl enable halo sudo systemctl start halo

5. 高级配置与优化

5.1 开机自启动方案

由于Termux本身不会自动启动,我们需要借助Android的自动化工具。推荐使用Termux:Boot:

  1. 安装Termux:Boot应用
  2. 在Termux中创建~/.termux/boot/目录
  3. 创建启动脚本start_ubuntu.sh
#!/data/data/com.termux/files/usr/bin/bash termux-wake-lock proot-distro login ubuntu -- /opt/halo/start.sh

5.2 性能优化建议

手机作为服务器有其局限性,以下优化措施可以显著提升性能:

  1. 启用交换空间(在Ubuntu环境中):
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
  1. 调整Halo 2 JVM参数:
# 修改start.sh中的Java启动参数 java -Xms512m -Xmx1024m -jar halo.jar
  1. 使用SQLite代替MySQL(默认配置即可,Halo 2内置SQLite)

5.3 安全加固措施

  1. 配置SSH密钥登录(如果启用SSH):
sudo apt install -y openssh-server sudo vim /etc/ssh/sshd_config

修改以下参数:

PasswordAuthentication no PermitRootLogin no
  1. 定期备份Halo 2数据:
# 创建备份脚本/opt/halo/backup.sh tar -czvf /opt/halo/backup/$(date +%Y%m%d).tar.gz /opt/halo/.halo

6. 常见问题排查

6.1 IPv6无法访问

如果外部设备无法通过IPv6访问你的博客,按以下步骤排查:

  1. 检查手机防火墙:
sudo ip6tables -L -n -v
  1. 测试本地访问:
curl -g -6 "http://[::1]:8090"
  1. 检查运营商限制:有些移动网络会对入站IPv6连接进行限制

6.2 Termux会话中断

如果Termux会话经常中断,可以:

  1. 禁用电池优化:在Android设置中,将Termux设为"不受优化"
  2. 使用Termux:Widget在桌面创建快捷启动图标
  3. 考虑使用Termux:API增强稳定性

6.3 Halo 2性能问题

遇到性能瓶颈时:

  1. 检查资源使用:
top -o %MEM
  1. 减少插件数量:每个插件都会增加内存占用
  2. 启用缓存:在Halo 2管理后台配置Redis缓存

7. 扩展应用场景

这个基础架构其实可以扩展出更多可能性:

  1. 个人云存储:安装Nextcloud代替Halo 2
  2. 家庭自动化中心:部署Home Assistant
  3. 开发测试环境:搭建Git服务器或CI/CD环境
  4. 物联网网关:通过MQTT桥接各种智能设备

我在实际使用中发现,骁龙845级别的旧手机可以轻松应对日均1000PV以下的个人博客需求。相比购买云服务器,这个方案不仅零成本,还能随身携带,随时维护。