旧安卓机别扔了!自制 Web 服务器了解一下
你家是否还有堆在角落积灰的安卓旧手机?给它一个机会,让他变废为宝可好?来看看将其改造成Ruby Web服务器的攻略吧!
你一定有安卓旧手机吧?每年都有大量的电子垃圾被扔掉,在发达国家,平均每个人每隔几年都要扔掉一台手机,而废弃的手机是最大的电子垃圾来源。
我有一台在角落兜灰的旧摩托罗拉G5 Cedric,所以我决定用它来做点什么。现在,我利用它运行一个Puma Web服务器,上面跑着一个简单的Sinatra应用。
在进一步介绍之前,你也许会想:这有什么实际的用途吗?一台旧的安卓手机可能并不会有太高的性能,但t2.nano的AWS服务器也没有。我还没有在安卓上部署任何“真正”的代码,但即使是最廉价的手机,一般也都有四核甚至八核CPU,至少2GB内存,所以理论上手机性能几乎接近最先进的云服务器(例如t2.nano就只有512MB内存)。
当然,手机的处理器是ARM,而云服务器通常是x86;内存管理也完全不同。不过我们这里只是粗略估计一下。
不论如何,这篇文章的目的是介绍如何将安卓设备改造成Web服务器或任何其他东西。
安装Termux
首先我们需要在手机上设置一个Linux环境。Termux是一个运行在安卓上的终端模拟器和Linux环境,可以直接从谷歌应用商店下载。安装完成后不需要任何配置。
设置SSH
你肯定不想在手机的小屏幕上输入大量命令,所以我们来设置一下ssh,这样就可以远程登录Termux了。
方法实现有几种,但我认为最方便的是通过一个名为Dropbear的软件。
首先在安卓上运行:
pkg upgrade
pkg install dropbear
你可以选择密码认证,也可以选择公钥认证。虽然推荐使用公钥认证,但作为尝试的话,密码认证是最简单的。运行以下命令:
passwd
New password:
Retype new password:
New password was successfully set.
小贴士:可以安装一个终端复用程序,如tmux或screen。这样通过ssh运行程序时非常方便:
pkg install tmux
接下来,在台式机或笔记本上测试连接:
ssh android-ip-address -p 8022
设置安卓的静态IP地址
进入WiFi设置,禁用DHCP,然后给手机指定一个IP地址。
这一步是有必要的,这样路由器就不会每过几天就给手机分配一个新地址。否则,配置会相当麻烦。
安装Ruby、Bundler、Sinatra和Puma
Sinatra是一个轻量级的Web应用程序框架,而Puma是Web服务器。
Ruby就是Ruby!
当然,Sinatra和Puma只是建议,你甚至可以在手机上运行完整的Rails应用程序。只要别使用默认的Rails开发服务器WEBRick就行,它只有单进程、单线程,因此不适合生产环境。(小型测试环境还是不错的)。
在安卓上运行:
pkg install ruby
gem install sinatra puma
安装nginx
nginx是Web服务器、反向代理和负载均衡器。虽然配置成多服务器是最有效的,它可以给多台服务器分发请求,但在我们的手机服务器上nginx也非常好,它内置了DDoS防范功能,还能为静态文件提供服务。
在安卓上运行:
pkg install nginx
接下来需要一点小技巧,才能让nginx与Puma相互配合。这个配置(https://gist.github.com/ctalkington/4448153)非常好,复制nginx.conf,将appdir改成你的Web应用的根目录。在我的配置中,我将其改成了 /data/data/com/termux/files/home/android-sinatra。
设置端口转发
如果想让Web服务器可以通过互联网访问,就需要给路由器设置端口转发,将进入的请求到新配置好的安卓Web服务器上。
具体做法取决于你的路由器。可以参考这篇文章(https://www.noip.com/support/knowledgebase/general-port-forwarding-guide/)。
配置动态dns
大多数人的公网IP地址都是动态的。因此,设置一个动态dns(DDNS)服务非常有必要,它会给你提供一个静态域名,自动将请求转发到你的动态公网IP地址上。
有几个免费的DDNS服务。我使用的是no-ip,到目前一切都好。只不过你需要每个月去“更新”一下域名。
设置好DDNS之后,你需要配置路由器,让它定期将自己的IP地址通知给DDNS服务。具体做法取决于路由器型号。
运行Hello world!
负载测试
你可以用siege这个HTTP负载测试软件来模拟真实世界中的使用情况。下面是在我的服务器上运行siege的情况,服务器支持3个并发用户(真实世界中应该设置得更大):
截图中数字的意义不大,因为我们的Web应用的响应只不过是时间戳,不超过100个字符,但足够证明,我们的服务器可以处理少量的并发用户了。
番外篇:安全性
互联网非常危险。如果你真的要运行一台服务器,就必须考虑这些问题。
运行这台服务器几个小时后,就已经有各种爬虫进来了。大多数都是无害的搜索引擎爬虫,但有的却是来者不善,比如这两个请求:
所以,务必要保证所有软件都是最新的,随时观察访问日志,并遵循nginx的安全指南。
作者:Leonardo Brito 原文:https://lbrito1.github.io/blog/2020/02/repurposing-android.html 译者:CSDN - 弯月 出品 | CSDN(ID:CSDNnews)
相关文章
- c++实现简单的web服务器搭建
- 使用DNS查询Web服务器IP地址
- 开源 web ide_强大的开源Web编辑器(IDE)[通俗易懂]
- nodejs web应用服务器搭建(一):跑起你的服务器详解编程语言
- 极速搭建:使用Linux快速搭建Web服务器(linux搭建web服务器)
- 服务器用Web管理Linux服务器:轻松把握系统运维(web管理linux)
- 服务Linux下的Web服务发布:畅享新体验(linux发布web)
- 服务器快速安装Linux下的Web服务器(linux安装web)
- web server使用Linux搭建Web服务器(usagelinux)
- 器Linux下检查Web服务器状态的方法(linux查看web服务)
- 轻松搭建Linux网络服务器(linux安装web服务器)
- 设置让Linux系统时钟服务器地址自动设置(linux时钟服务器地址)
- web服务器高可用性架构:两台Linux搭建Web服务器(两台linux挂载)
- 服务器架设小巧的微型 Linux 服务器(微型linux)
- 器Linux快速启动Web服务器的指南(linux启动web服务)
- Nginx高性能Web服务器:Nginx HTTP负载均衡和反向代理的配置与优化(第六章)
- 高性能web缓存服务器nuster
- 深入了解Linux Nginx,构建更高效的Web服务器(linuxnigix)
- 器部署Linux Web服务器,让工作效率提升一倍(linuxweb服务)
- 服务快速部署Linux服务器,轻松架设Web服务(linux部署web)
- Linux下建立Web服务器的步骤(linux下的web配置)
- 提升服务器效率解决Redis连接超时问题(服务器redis连接超时)
- 优化Web项目强力支持Redis缓存(web项目redis缓存)
- 使用Redis提高Web性能的技巧(web中redis用法)
- Oracle Web授权让您的应用无处不在(oracle web授权)
- Oracle AP服务器企业信息化的基石(oracle ap服务器)
- Win2003架设WEB服务器与IIS的备份和移植
- Python实现的检测web服务器健康状况的小程序