## 引子
2015年8月25日, 上海. 坚果手机发布. 一句 **"美得不像实力派"** 的 slogan 让这个中端机俘获了多少年少无知又恰好囊中羞涩的小盆友的心.

只可惜, 时代变了. 当初心水的不行的手机已经放在柜子里吃了近两年的灰.
当然有一说一, 好看还是好看的.
2020年4月1日, 罗老师开启了他的直播首秀, 48岁的罗老师有一次转行. 有人说, 罗老师每次转行都会颠覆所在的行业, 物理意义上颠覆.
**我在想, 这个手机是不是也还能做点什么事情, 继续发光发热呢?**
换了手机之后, 曾经考虑过其去留问题: 用吧, 实在不知能用来作甚, 毕竟它有的新手机都有 —— 除了大爆炸。 不用吧, 功能又挺齐全, 扔了也可惜。
* 旧手机回收, 各大商场上都有。 好奇去查了一下 —— 价值 10 元
* 装个APP当全屏幕时钟用。 试过一阵对于每天超过12小时看电脑的人,这似乎没啥吸引力。
* 换脸盆 —— 可行, 但是一直没找到机会
再后来, 想到安卓本身是基于linux的嘛? 那我能不能把系统直接刷掉改成linux呢?这样能当个小服务器? 网上一查, 果然有, 而且完全没有我想的那么复杂: 手机依旧照常用, 装几个app即可。
那, 开整。
## 第一步: root
虽然不需要对手机本身动刀, 但是获取root权限这种操作还是很有必要的, 事实上这是最让人头疼的办法之一. 市面上手机型号是在太多, 而不同手机的rootf方法, root成功率各不一样, 导致这个事情能不能成功就成了一件和玄学的事情, 总体来说有两类办法:
> 需要注意的是, 现在很多手机都有[BL锁](https://www.bilibili.com/read/cv307758/), 需要到官网申请解锁([教程](https://zhuanlan.zhihu.com/p/87496750)), 或者买一根[9008](https://s.taobao.com/search?ie=utf8&q=9008线)线, 去网上找教程进行解锁后才能继续获取root权限的操作.
1. 在手机端安装root app获取权限, 这一类早期成功率很高现在好像难些了. 例如: [KingRoot](https://www.coolapk.com/apk/com.kingroot.kinguser)
2. 在电脑端安装刷机软件, 数据线连接手机进行Root, 如 [奇兔刷机](http://www.7to.cn/)
某用的第二个方法, 试了许多个软件, 最终使用[KingRoot PC版](https://king-root.net/kingroot-for-pc-root-android-pc/) 一次通过.

## 安装应用
这里主要用到三个应用:
* [linuxdeploy](https://github.com/meefik/linuxdeploy/releases/tag/2.6.0) : 核心应用, 运行linux的容器, 类似虚拟机
* [busybox](https://apkpure.com/busybox/stericson.busybox) : 辅助 linuxdeploy 设置系统环境变量地址的, 不过我觉得这个好像不是很必须.
* [juiceSSH](https://apkpure.com/juicessh-ssh-client/com.sonelli.juicessh) : 安卓上的ssh客户端, 特别好用. 理论上不是必须.
## 安装系统
### 设置系统路径
打开 busybox -> 左上角设置确认安装路径上面写的 `/system/xbin` 这一步一般不需要修改, 返回点击`安装` 完成退出

### 安装linux
1. 打开 linuxdeploy , 点击 **左上角菜单 -> ⚙设置** 设置一下全局配置 , 主要是以下几个选项, 设置完返回
| 锁定 Wi-Fi | ✅ |
| ---------------------- | ------------ |
| CPU 唤醒 | ✅ |
| PATH 变量 | /system/xbin |
| HTTP(启用httd守护模式) | ✅ |
2. 点击主屏幕 **右下角  图标** 配置当前的服务器, 这一步是重点. 以 CentOS 为例, 需要注意以下配置项:
| 选项 | 值或注意事项 |
| ---------------- | ------------------------------------------------------------ |
| 发行版 GNU/Linux | CentOS |
| 架构 | armhfp (这个最好跟手机架构一致, 在 busybox 或者返回上一步点击**左上菜单->状态**可以看到) |
| 源地址 | http://chinanet.mirrors.ustc.edu.cn/centos/ (最后一节路径根据架构而变), 这里建议使用国内的景象, 当然直接用默认的也可以, 但是估计会比较慢 |
| 用户名/用户密码 | 这两项建议修改, 登录系统时用到 |
| 本地化 | en_US.UTF-8 (语言建议改成英文) |
| 挂载 | 启用: ✅ , 挂载点(/sdcard - /mnt/sdcard) 这个看需求, 主要是用于手机和服务器内文件同步, 左边是手机路径右边是服务器路径, 按需更改 |
| SSH | 启用: ✅ |

3. 到这里设置完成, 返回主屏幕, 点击 **右上角 -> 安装** 等待系统安装完成. 这一步需要下载系统镜像, 会比较耗时. 等到出现下面第一个图中
```sh
Configuring extra /ssh ...
<<< depoly
```
这一段之后就表示安装完成了, 如果此时没有完成的话, 可以删掉镜像文件(在上一步中有)并重新配置. (找找其他教程)

4. 点击启动. 此时系统已经启动起来了, 如第下图. 主屏幕上面是表示系统所在局域网的IP. 由于在第二步中我们配置了SSH, 所以就可以在电脑上用ssh远程连接到电脑上了.


到这一步系统就安装完成了, 原则上说应该就是该干啥干啥了. 接下来后续操作是验证其作为服务器的可行性.
### 部署示例网站
* 首先是安装一个web服务器, 装一下 nginx
```sh
# 依次执行以下命令
# 参考: https://segmentfault.com/a/1190000018109309
sudo yum install epel-release
sudo yum install nginx
sudo systemctl enable nginx
sudo systemctl start nginx
```
照理说, 执行以上几个安装命令就可以完成安装, 可不知道为何我的系统在第一步就报错了, 试了很多方法没成功, 最后不得已编译源码安装了. 安装方法参考: https://www.cnblogs.com/stulzq/p/9291223.html
安装完成并启动后, 继续访问 `192.168.0.101` 可以看到 nginx 的首页, 如下:

* 安装实示例网页. 我们写一个简单的网页, 放到 `/usr/local/nginx/html/` 目录下, 并修改 `/usr/local/nginx/conf/ngixn.conf` 如图所示

再次访问网站:

手机跑网站 get✔ !!!
### 公共访问
因为手机的网络是局域网, 可以在同一个网络下可以使用诸如 `192.168.0.101` 这样的局域网段IP来访问, 但是如果想要公网访问的话, 还是需要做点事情的. 这里使用的是 [内网穿透](https://baike.baidu.com/item/内网穿透) 的方案, 使用的是 [Sunny-Ngrok](http://www.ngrok.cc/) . 当然内网穿透的产品还要很多, 这里只是用于演示.
1. 注册账号, 进入首页, 点击开通隧道
2. 选一个免费的隧道, 开通一个 http 隧道. 配置如下

最终要的是配置本地端口, 相当届时所有请求都会转发哦到这个路径来, 默认是 `127.0.0.1:80` 等下后面下载客户端如果是直接安装到服务器的话, 这里不用改. 为了方便, 我后面会安装一个windows客户端, 在windows上进行访问, 所以地址还是改成了服务器所在局域网的IP.
配置完成后在管理页面可以看到分配到的一个域名. 通过这个域名就可以访问了

3. 配置完成后, 安装windows客户端, 运行. 运行的方法看[教程](http://www.ngrok.cc/_book/start/ngrok_windows.html)
> 这里其实不建议将内网穿透安装在自己电脑上, 最好还是安装服务器上. 一个原因是电脑还是会经常关机的, 关机之后就访问不到了. 另一个原因是, 内网穿透这个东西看起来似乎还是稍微有些不安全.放电脑上总感觉不是太放心.
> 更新: 尝试着安装在服务器上并设置开机启动, 发现也很简单. 官方教程: http://www.ngrok.cc/_book/start/ngrok_linux.html
4. 然后通过上面的域名访问可以看到结果. 这里我们换成在手机上访问. 访问成功:

6. 后续步骤: 如果自己申请有域名, 可以配置自己的域名通过CNAME解析到上面的域名中, 这样就可以通过自己的域名访问了.
> 最后, 手机插电, 24小时不关机, 就可以愉快地当服务器来用啦~~
### 效果预览: [ZENG](http://oldzeng.free.idcfengye.com/)
### 使用体验&坑
* 在电脑上用SSH链接到手机上的服务器时, 频繁掉线. 这是目前最影响使用体验的地方.
* 为了解决此问题, 才有了一开始要装`juiceSSH`, 这样可以在手机端链接. 而在手机端链接不会有这个问题, 不论用的是`127.0.0.1` 还是局域IP
* 同时配合[ScrCpy](https://github.com/Genymobile/scrcpy)通过电脑控制手机可以达到类似电脑远程的效果.
* 配置服务器的时候选择系统版本不正确会导致安装失败. 另外即便现在安装了CentOS, 发现还是有许多功能无法使用, 比如上面提到的安装Nginx, 得用源码安装.
* 服务器访问网络可以, 但是通过公共网络访问服务器其实挺慢的.
* 所以其实在手机做成的服务器上跑网站其实并不是一个特别好的选择.
* 建议是用来跑一些后台程序, 比如一些爬虫啊, 定时的任务啊什么的.
* 也可以部署一些文件系统, 剪贴板程序等用来作为个人的小网盘, 在线剪贴板使用
## 其他方案
* 不想折腾linux, 只想跑一个简单的前端/PHP网站:
* [KSWEB](https://apkpure.com/ksweb-server-php-mysql/ru.kslabs.ksweb) APP集成了php+apache+mysql环境, 开箱即用简单方便 (没搞过, 不确定是否简单方便)
* 参考教程: https://zhuanlan.zhihu.com/p/34730760
* 也可以搭个简单的文件服务器做网盘用:[Bilibili](https://www.bilibili.com/video/av89315219/?spm_id_from=333.788.b_636f6d6d656e74.7)
* 不想搞代码, 就是想废物利用一下:
* https://www.zhihu.com/question/369320564
* 做个[全屏时钟](https://www.coolapk.com/apk/io.github.oyjt.clock)还是很好看的 --- 如果不像我的坚果这样屏幕已经废了的话
* 俺也想玩, 但是只有旧IPhone: [敬请期待](https://www.oschina.net/news/114922/linux-on-iphone-ios-dual-boot-support)
> 参考链接
* https://www.jianshu.com/p/687ba1e11ab5
* https://segmentfault.com/a/1190000018109309
* https://www.cnblogs.com/stulzq/p/9291223.html
* https://zhuanlan.zhihu.com/p/34730760

旧手机再利用: 搭服务器, 又或者...