舊手機改造成web伺服器並實現內網穿透

JaydenChang發表於2021-08-27

前幾天由於gitee的稽核引擎一通亂殺,使得gitee pages停止提供服務,心生更換伺服器或者其他pages託管的想法,看了看價格感人的雲伺服器以及空空的錢包,這時,腦子有個奇怪的想法飄過,自己搞一個伺服器,忽然想起來,我有一臺root的舊手機,剛好拿來做測試

前期準備

需要的工具:一臺舊安卓手機(能獲取root許可權),能聯網的電腦,並裝有Git

需要安裝的軟體:Linux Deploy,BusyBox,JuiceSSH (可選),KSWEB (可選)

JuiceSSH執行命令速度比電腦快,不過是手機操作,可能需要外接鍵盤

以下操作全在電腦端操作,不演示JuiceSSH與Linux Deploy的連線 (教程見文末第三個連結)

需要的經驗:部署過hexo部落格,有一定git (或linux)基礎,靈活運用關鍵字搜尋,vim編輯器的使用語法

舊手機的基本資訊

  • 手機型號:Redmi 3
  • Android版本:5.1.1
  • Linux發行版:CentOS 7 (AltArch) [running via Linux Deploy]
  • RAM:2.0GiB
  • CPU:8核1.5GHz
  • 儲存空間:10GiB,可用4GiB

配置Linux環境

首先開啟BusyBox,點選安裝 (需要root許可權)

然後開啟Linux Deploy,點選右下方的配置,設定系統相關資訊,容器型別選chroot,發行版選CentOS,如果選其他發行版,架構一定要選對,不然會安裝出錯,或者無法使用,安裝之前一定要知道手機CPU的架構;源地址建議切換為國內源,這裡放上中科大的映象源 http://mirrors.ustc.edu.cn/centos-altarch/ ,國內還有其他源可選擇,例如清華源,阿里源等

這裡的設定很重要,一定要啟用ssh,後面的步驟會用到 (SSH預設埠是22,此埠用於JuiceSSH連線)

然後返回主介面,點選左上,開啟設定,建議前三個選項都勾上,往下滑,看到PATH變數,輸入/system/xbin,再往下拉,把 除錯模式 也勾上

再回到主介面,點選右上角,開始安裝,大約要半小時

a few thousand years later......

看到手機輸出<<<deploy時說明安裝完成,啟動前先點選一次停止按鈕,看見<<<stop時再點選啟動,看見輸出如圖內容時即成功啟動。

然後開啟KSWEB,檢視當前手機的區域網ip,例如我手機的ip是192.168.101.10

然後開啟電腦終端(cmd,git,wsl都可),輸入ssh admin@192.168.101.10,按照要求輸入密碼(前面的Linux Deploy配置裡有密碼的選項),如下圖所示即成功連線手機

在伺服器上部署

配置git

在伺服器端安裝git和node.js

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
yum install -y git
curl -sL https://rpm.nodesource.com/setup_12.x | bash -
yum -y install nodejs

如果出現沒做任何操作,下載自行終止並出現Exiting on user cancel,可嘗試輸入

yum clean metadata
yum clean all
yum upgrade

如果出現Failed to set locale, defaulting to C.UTF-8,是沒有正確設定語言環境或者沒安裝相關語言包導致的,可嘗試用兩種解決方法

echo "export LC_ALL=en_US.UTF-8" >> /etc/profile
source /etc/profile

執行完後重新登陸再試安裝,若還出現這個情況,安裝相應語言包

yum install glibc-langpack-zh //中文包

//英文包
dnf install glibc-langpack-en 或
dnf install langpacks-en glibc-all-langpacks -y

建立使用者並配置其倉庫

useradd git
passwd git // 設定密碼
su git // 這步很重要,不切換使用者後面會很麻煩
cd /home/git/
mkdir -p projects/blog // 專案存在的真實目錄
mkdir repos && cd repos
git init --bare blog.git // 建立一個裸露的倉庫
cd blog.git/hooks
vi post-receive // 建立 hook 鉤子函式,輸入了內容如下
#!/bin/sh
git --work-tree=/home/git/projects/blog --git-dir=/home/git/repos/blog.git checkout -f

新增完畢修改許可權

chmod +x post-receive
exit // 退出到 root 登入
chown -R git:git /home/git/repos/blog.git // 新增許可權

測試git倉庫是否可用,另找空白資料夾,在電腦端右鍵git bash here,輸入

git clone git@server_ip:/home/git/repos/blog.git

如果能clone空倉庫,說明git倉庫搭建成功

建立ssh信任關係,在電腦輸入以下命令

ssh-copy-id -i C:/Users/yourname/.ssh/id_rsa.pub git@server_ip
//如果使用者名稱有空格,路徑用引號括起來
ssh git@server_ip // 測試能否登入

注:此時的 ssh 登入 git 使用者不需要密碼!否則就有錯,請仔細重複步驟 3-5

如圖即成功新增信任

為了安全起見禁用 git 使用者的 shell 登入許可權,從而只能用 git clone,git push

cat /etc/shells // 檢視 git-shell 是否在登入方式裡面
which git-shell // 檢視是否安裝
vi /etc/shells
新增上2步顯示出來的路勁,通常在 /usr/bin/git-shell

修改/etc/passwd中的許可權

// 將原來的
git:x:1000:1000::/home/git:/bin/bash

// 修改為
git:x:1000:1000:,,,:/home/git:/usr/bin/git-shell

需修改的內容一般在最後一行,數字不用改,只需新增半形逗號和改路徑即可

搭建nginx伺服器

下載並安裝nginx

cd /usr/local/src
wget http://nginx.org/download/nginx-1.15.2.tar.gz
tar xzvf nginx-1.15.2.tar.gz
cd nginx-1.15.2

// 執行之前先檢查是否有安裝gcc gdb gcc-c++ make wget這五個軟體,沒有的話不能進行下一步,可直接用yum命令安裝

./configure // 如果後面還想要配置 SSL 協議,就執行後面一句!
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
make && make install
alias nginx='/usr/local/nginx/sbin/nginx' // 為 nginx 取別名,後面可直接用,重新登陸後失效

配置nginx檔案

先啟動是否安裝成功

nginx // 直接來!瀏覽器檢視 server_ip,預設是 80 埠

修改配置檔案

nginx -s stop // 先停止nginx
cd /usr/local/nginx/conf
vi nginx.conf
修改 root 解析路徑,如下圖
同時將 user 改為 root 如下圖,不然nginx無法訪問 /home/git/projects/blog
nginx -s reload

需要修改第一個箭頭所指的nobody,第二個箭頭所指的是會產生bug的檔案

需要修改root的路徑為部落格位置,例如我之前設定的位置是/home/git/projects/blog,就把這個路徑替換進去,注意不要漏了句尾的分號

在修改配置檔案這裡目測有坑,會出現/usr/local/nginx/logs/nginx.pid failed這樣的字眼,開啟/usr/local/nginx/logs,輸入ls -al,沒看見有nginx.pid,我的解決方法是輸入這個
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf,再輸入ls -al,發現nginx.pid出現了,再次執行nginx -s reload,沒有報錯。

在這裡,可以測試下部署在伺服器的網頁,不過只能實現區域網查。注意上圖中有一個listen 80,這是一個設定在localhost的埠,可嘗試在瀏覽器開啟預覽,不過建議換成其他埠,避免埠被佔用無法預覽,這裡我換成800,可成功預覽

⚠️

別忘了啟動nginx,不然不能預覽頁面

在手機瀏覽器輸入127.0.0.1:800192.168.101.10:800可以預覽


在同一區域網的電腦輸入192.168.101.10:800即可預覽

釋出

配置_config.yml檔案

編輯deploy屬性

repo是推送到的目的地地址

推送到伺服器

使用hexo d -ghexo g- d均可,如圖即成功推送

內網穿透

內網穿透有很多工具,常見的有花生殼,FRP,ngork。由於花生殼的價格過於感人,FRP需要另一臺有公網ip的伺服器,這裡使用基於ngork的natapp

官網:https://natapp.cn (快來打錢doge)

這裡需要在Linux安裝,安裝方法用wget + Linux安裝包,由於我不知道wget會儲存到哪裡,所以我在wget後加了一個指定路徑

wget -P /home/git/ https://cdn.natapp.cn/assets/downloads/clients/2_3_9/natapp_linux_arm64/natapp?version=20190730

下載之後對安裝包重新命名

mv natapp?version=20190730 natapp

在root下先給予執行許可權再執行

chmod a+x natapp
./natapp

直接執行./natapp還不能執行程式,這裡需要加上建立的隧道的authtoken引數才能開啟

./natapp -authtoken=<your token>

執行程式後,圖中的網址已穿透內網,可對外訪問 (這是個臨時連結)

到這裡,一個web私人伺服器就搭好了。

另外,關於穿透的網址,natapp有一個付費隧道可以繫結自定義域名,每個月9¥,而花生殼那邊的價格比較感人 (還花了6¥開啟https穿透的認證,發現沒什麼luan用,我*&%@),最終還是選擇了natapp

不過,我還是選擇GitHub Pages + Netlify 來配置我的網站,私人伺服器跑網頁,需要讓伺服器24h保持運作狀態 (感覺也廢不了什麼電費),畢竟通過隧道來訪問網站的速度和直接託管在GitHub Pages差不多,乾脆直接用GitHub Pages比較省事

除了網頁伺服器,舊手機理論上也可以建一個私人網盤 (感覺也沒時間整了)

參考連結

原文出處舊手機改造成web伺服器並實現內網穿透 | Jayden's Blog

舊手機搭建網站以及內網穿透 - Dark's blog (ii.do)

帶你跳過各種坑,一次性把 Hexo 部落格部署到自己的伺服器_jeffery5461的部落格-CSDN部落格_

使用Linux Deploy將閒置的安卓手機改造簡易伺服器 - sw-code - 部落格園 (cnblogs.com)

超詳細Hexo+Github Page搭建技術部落格教程【持續更新】 - SegmentFault 思否

[解決nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed錯誤_三也先生的部落格-CSDN部落格]

centos 7 升級後yum install出現Exiting on user cancel-阿里雲開發者社群 (aliyun.com)

Failed to set locale, defaulting to C.UTF-8 - 天軍 - 部落格園 (cnblogs.com)

把hexo部落格部署到伺服器 | MX (mx142.cn)

相關文章