手头上有一部闲置的手机,昨天刷知乎看到有人用安卓机搭了一个私人博客,于是也心痒痒想要玩一下。
网上找了一下教程,发现都需要把手机刷成 linux 系统的,我觉得有点麻烦,然后想起了以前玩过一段时间 Termux。
昨天折腾了一下,发现果然可以用,就把过程记录下来,以后需要时可以查找,也希望能帮到其他人。
首先你需要一部安卓机,需要什么配置我不太清楚,我用的是 小米4,处理器是 骁龙 801,运行内存只有 2G,已经是 4 年前的手机了,所以手机这方面应该不会有多大问题。
手机最好能 Root,不然可能会出一些问题。
然后还要有一台 Linux 的电脑,可以 SSH 连接到手机。
一般在各大应用商店都能找到,我是在 Apkpure 上面下载的,版本号是 0.65 。
下载完打开后会自动 安装,我在这里遇到的一个问题是用 Wifi 怎么都连接不上,最后用了数据才正常安装好。这个情况因人而异,只是提个醒。
我安装后是这样子:
按 音量上键 + Q 可以唤出辅助键盘,不然根本没办法使用 Vi,如下图:
使用 Termux 安装一些接下来会用到的软件包。
首先需要 获得存储权限:
# 在 Termux 中输入以下命令,应该会弹框确认是否授权
termux-setup-storage
成功拿到存储权限后会在 home目录生成 storage 目录,并且生成若干目录,软连接都指向外置存储卡的相应目录应目录。
改软件源,不然安装软件包可能巨慢甚至连接不上,推荐使用清华的镜像:http://mirrors.tuna.tsinghua.edu.cn/termux
首先将 vi 设为默认编辑器(一开始你也没有其他的编辑器可以用),然后打开源列表:
export EDITOR=vi # 将 vi 设为默认编辑器
apt edit-sources # 打开源列表
我的改完以后是这样的:
#The main termux repository:
#deb https://termux.net stable main
deb http://mirrors.tuna.tsinghua.edu.cn/termux stable main
然后就可以正常安装软件了。先执行:
pkg update
安装 Python
pkg install python # 默认安装 python3
pkg install python2 # 安装 python2
安装 openssh
pkg install openssh
Termux 终端中 sshd 服务不支持密码认证,也就是说用户想要通过 ssh 连接上 Android 设备,只能通过密钥认证方式先将设备公钥放置在 Android 设备的 sshd 服务的授权登录列表中,然后通过私钥校验的方式登录。
ssh 具体原理我也不太懂,感兴趣的可以去找一下相关资料。这里就仅提供配置的步骤。
首先在电脑端执行:
ssh-keygen -t rsa
会生成一个 key,保存在 ~/.ssh/
下,id_rsa
是私钥,id_rsa.pub
是公钥。
然后将生成的 id_rsa.pub
随便用什么方式发送到你的手机,然后保存到 /data/data/com.termux/files/home/.ssh/
目录下。要进入到这个目录,需要一些文件管理器,比如 RE,MT,应该还需要 Root 权限。
在 Termux 上执行:
cd /data/data/com.termux/files/home/.ssh/
cat ./id_rsa.pub >> authorized_keys # 将公钥内容添加到ssh的授权文件里
设置权限。
在 Termux 运行 whoami
得到用户名,比如我的是 u0_a188
。
然后在 home
文件夹执行:
ls -al
得到类似如下的结果:
drwx------ 8 u0_a188 u0_a188 4096 Aug 14 09:57 .
drwx------ 4 u0_a188 u0_a188 4096 Aug 13 20:49 ..
-rw------- 1 u0_a188 u0_a188 1000 Aug 13 23:21 .bash_history
drwx------ 3 u0_a188 u0_a188 4096 Aug 13 21:25 .cache
-rw------- 1 u0_a188 u0_a188 21 Aug 13 23:04 .python_history
drwx------ 3 u0_a188 u0_a188 4096 Aug 13 22:21 .ssh
-rw------- 1 u0_a188 u0_a188 8791 Aug 14 09:57 .viminfo
drwx------ 3 u0_a188 u0_a188 4096 Aug 13 23:40 blog
drwx------ 5 u0_a188 u0_a188 4096 Aug 13 23:36 blog_env
drwx------ 3 u0_a188 u0_a188 4096 Aug 13 23:24 hello
drwx------ 2 u0_a188 u0_a188 4096 Aug 13 23:10 storage
如果你的 .ssh
文件夹的权限不是如上图所示,则执行:
chmod 700 .ssh # 更改权限
chown u0_a188:u0_a188 .ssh # 更改用户和组
然后再以同样的方法检查 authorized_keys
文件的权限。
此时,我们已经配置好了 ssh
,在 termux 中输入 sshd
开启 ssh
服务。
然后,就可以在电脑上进行连接:
# user_name 是 whoami 得到用户名,ip_address 是你手机的 ip 地址
ssh user_name@ip_address -p 8022
# 比如我的连接命令:
ssh u0_a188@192.168.1.103 -p 8022
不出意外就能连接上了。
由于本人对 Web 知之甚少,只学过一点 Django 的皮毛,所以博客就采取 Django 搭建。
在这里,使用一个开源项目,是当初我用来学习 Django 的,在这里用来做一个搭建过程的示范。(其实跟在电脑上基本是一模一样的)。
项目地址是:https://github.com/zmrenwu/django-blog-tutorial
配套的教程:追梦人物的 Django 博客教程
以下是运行步骤(直接搬运了项目的 readme):
克隆项目到本地
打开命令行,进入到保存项目的文件夹,输入如下命令:
git clone https://github.com/zmrenwu/django-blog-tutorial.git
创建并激活虚拟环境
在命令行进入到保存虚拟环境的文件夹,输入如下命令创建并激活虚拟环境:
virtualenv blogproject_env
# linux
source blogproject_env/bin/activate
关于如何使用虚拟环境,参阅:搭建开发环境 的 Virtualenv 部分。如果不想使用虚拟环境,可以跳过这一步。
安装项目依赖
如果使用了虚拟环境,确保激活并进入了虚拟环境,在命令行进入项目所在的 django-blog-tutorial
文件夹,运行如下命令:
pip install -r requirements.txt
迁移数据库
在上一步所在的位置运行如下命令迁移数据库:
python manage.py migrate
创建后台管理员账户
在上一步所在的位置运行如下命令创建后台管理员账户
python manage.py createsuperuser
具体请参阅 在 Django Admin 后台发布文章
运行开发服务器
在上一步所在的位置运行如下命令开启开发服务器:
python manage.py runserver
在浏览器输入:127.0.0.1:8000
进入后台发布文章
在浏览器输入:127.0.0.1:8000/admin
使用第 5 步创建的后台管理员账户登录
具体请参阅 在 Django Admin 后台发布文章
由于这一步骤与在电脑上是一模一样的,涉及的知识我也不太了解,就不赘述,感兴趣的可以自己去找其他博客模板,或者自己写一个,这里只是做一个示范。我在自己手机上亲测是可以正常运行上述的项目的。
如果你成功的在手机上运行了博客,那你一定想在任何情况下都能访问到博客。因为手机没有公网 IP,所以以上步骤搭建的博客只能在局域网访问,这时候我们就需要内网穿透了。
我选用的是 Ngork 来进行内网穿透,首先在 Ngork 注册一个账号。
我选择的是免费的隧道。
然后填写一些信息。
然后确认添加,选择隧道管理。
点击客户端下载。
下载 Python版本。
将下载的压缩包解压到手机,里面有一个文件叫做 sunny.py
,用 Termux 进入到所在目录,运行如下命令:
至此,你的博客已经可以用以上域名直接访问了。如果你有自己的域名,也可以采用自定义域名,具体参考:SunnyNgrok自定义域名使用方法,我就不再罗嗦了。
虽然搭建的博客确实可用,但是性能堪忧,因为我是直接使用 Django 的自带服务器,这玩意儿毕竟只能用来调试,没办法用在生产环境中,所以之后找个其他的办法将博客部署到手机上(其实上面的博客教程里就有,但是我懒)。
用了一晚上把上面的东西搞好,然后就美滋滋的跑去和女朋友炫耀,得了几句夸奖。今天花了一早上写了这个博客,真是暑假里充实的一天啊!
参考资料:
神器Termux的使用日常
关于安卓手机的牛逼软件termux使用
在安卓上部署服务器 - 解决内网穿透
电脑通过ssh连接android手机上的termux