作者:admin 日期:2023-09-12 瀏覽: 次
真香~用舊手機(jī)自制了一臺(tái) Web 服務(wù)器....
作者:Leonardo Brito
https://lbrito1.github.io/blog/2020/02/repurposing-android.html
我有一臺(tái)在角落兜灰的舊摩托羅拉G5 Cedric,所以我決定用它來做點(diǎn)什么。現(xiàn)在,我利用它運(yùn)行一個(gè)Puma Web服務(wù)器,上面跑著一個(gè)簡單的Sinatra應(yīng)用。
在進(jìn)一步介紹之前,你也許會(huì)想:這有什么實(shí)際的用途嗎?一臺(tái)舊的安卓手機(jī)可能并不會(huì)有太高的性能,但t2.nano的AWS服務(wù)器也沒有。我還沒有在安卓上部署任何“真正”的代碼,但即使是最廉價(jià)的手機(jī),一般也都有四核甚至八核CPU,至少2GB內(nèi)存,所以理論上手機(jī)性能幾乎接近最先進(jìn)的云服務(wù)器(例如t2.nano就只有512MB內(nèi)存)。
當(dāng)然,手機(jī)的處理器是ARM,而云服務(wù)器通常是x86;內(nèi)存管理也完全不同。不過我們這里只是粗略估計(jì)一下。
不論如何,這篇文章的目的是介紹如何將安卓設(shè)備改造成Web服務(wù)器或任何其他東西。
首先我們需要在手機(jī)上設(shè)置一個(gè)Linux環(huán)境。Termux是一個(gè)運(yùn)行在安卓上的終端模擬器和Linux環(huán)境,可以直接從谷歌應(yīng)用商店下載。安裝完成后不需要任何配置。
你肯定不想在手機(jī)的小屏幕上輸入大量命令,所以我們來設(shè)置一下ssh,這樣就可以遠(yuǎn)程登錄Termux了。
方法實(shí)現(xiàn)有幾種,但我認(rèn)為最方便的是通過一個(gè)名為Dropbear的軟件。
首先在安卓上運(yùn)行:
pkg upgrade
pkg install dropbear你可以選擇密碼認(rèn)證,也可以選擇公鑰認(rèn)證。雖然推薦使用公鑰認(rèn)證,但作為嘗試的話,密碼認(rèn)證是最簡單的。運(yùn)行以下命令:
passwd
New password:
Retype new password:
New password was successfully set.小貼士:可以安裝一個(gè)終端復(fù)用程序,如tmux或screen。這樣通過ssh運(yùn)行程序時(shí)非常方便:
pkg install tmux接下來,在臺(tái)式機(jī)或筆記本上測(cè)試連接:
ssh android-ip-address -p 8022進(jìn)入WiFi設(shè)置,禁用DHCP,然后給手機(jī)指定一個(gè)IP地址。
這一步是有必要的,這樣路由器就不會(huì)每過幾天就給手機(jī)分配一個(gè)新地址。否則,配置會(huì)相當(dāng)麻煩。
安裝Ruby、Bundler、Sinatra和Puma
Sinatra是一個(gè)輕量級(jí)的Web應(yīng)用程序框架,而Puma是Web服務(wù)器。
Ruby就是Ruby!
當(dāng)然,Sinatra和Puma只是建議,你甚至可以在手機(jī)上運(yùn)行完整的Rails應(yīng)用程序。只要?jiǎng)e使用默認(rèn)的Rails開發(fā)服務(wù)器WEBRick就行,它只有單進(jìn)程、單線程,因此不適合生產(chǎn)環(huán)境。(小型測(cè)試環(huán)境還是不錯(cuò)的)。
在安卓上運(yùn)行:
pkg install ruby
gem install sinatra pumanginx是Web服務(wù)器、反向代理和負(fù)載均衡器。雖然配置成多服務(wù)器是最有效的,它可以給多臺(tái)服務(wù)器分發(fā)請(qǐng)求,但在我們的手機(jī)服務(wù)器上nginx也非常好,它內(nèi)置了DDoS防范功能,還能為靜態(tài)文件提供服務(wù)。
在安卓上運(yùn)行:
pkg install nginx接下來需要一點(diǎn)小技巧,才能讓nginx與Puma相互配合。這個(gè)配置(https://gist.github.com/ctalkington/4448153)非常好,復(fù)制nginx.conf,將appdir改成你的Web應(yīng)用的根目錄。在我的配置中,我將其改成了 /data/data/com/termux/files/home/android-sinatra。
如果想讓W(xué)eb服務(wù)器可以通過互聯(lián)網(wǎng)訪問,就需要給路由器設(shè)置端口轉(zhuǎn)發(fā),將進(jìn)入的請(qǐng)求到新配置好的安卓Web服務(wù)器上。
具體做法取決于你的路由器。可以參考這篇文章(https://www.noip.com/support/knowledgebase/general-port-forwarding-guide/)。
大多數(shù)人的公網(wǎng)IP地址都是動(dòng)態(tài)的。因此,設(shè)置一個(gè)動(dòng)態(tài)dns(DDNS)服務(wù)非常有必要,它會(huì)給你提供一個(gè)靜態(tài)域名,自動(dòng)將請(qǐng)求轉(zhuǎn)發(fā)到你的動(dòng)態(tài)公網(wǎng)IP地址上。
有幾個(gè)免費(fèi)的DDNS服務(wù)。我使用的是no-ip,到目前一切都好。只不過你需要每個(gè)月去“更新”一下域名。
設(shè)置好DDNS之后,你需要配置路由器,讓它定期將自己的IP地址通知給DDNS服務(wù)。具體做法取決于路由器型號(hào)。
你可以用siege這個(gè)HTTP負(fù)載測(cè)試軟件來模擬真實(shí)世界中的使用情況。蕪湖數(shù)據(jù)恢復(fù)下面是在我的服務(wù)器上運(yùn)行siege的情況,服務(wù)器支持3個(gè)并發(fā)用戶(真實(shí)世界中應(yīng)該設(shè)置得更大):
截圖中數(shù)字的意義不大,因?yàn)槲覀兊腤eb應(yīng)用的響應(yīng)只不過是時(shí)間戳,不超過100個(gè)字符,但足夠證明,我們的服務(wù)器可以處理少量的并發(fā)用戶了。
番外篇:安全性
互聯(lián)網(wǎng)非常危險(xiǎn)。如果你真的要運(yùn)行一臺(tái)服務(wù)器,就必須考慮這些問題。
運(yùn)行這臺(tái)服務(wù)器幾個(gè)小時(shí)后,就已經(jīng)有各種爬蟲進(jìn)來了。大多數(shù)都是無害的搜索引擎爬蟲,但有的卻是來者不善,比如這兩個(gè)請(qǐng)求:
所以,務(wù)必要保證所有軟件都是最新的,隨時(shí)觀察訪問日志,并遵循nginx的安全指南。
推薦閱讀
發(fā)小被綠,我竭盡所學(xué)黑科技,動(dòng)用云控捉奸尋找證據(jù)….
去他媽的某日葵!不就遠(yuǎn)程控制嘛,老子自己搭建!
我也折騰了一款百度網(wǎng)盤....不會(huì)被抓進(jìn)去吧~
連夜給學(xué)妹肝了一篇搭建個(gè)人網(wǎng)站的教程,這就送過去了,兄弟們把把關(guān)!