前幾天由於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:800
或192.168.101.10:800
可以預覽
在同一區域網的電腦輸入192.168.101.10:800
即可預覽
釋出
配置_config.yml
檔案
編輯deploy屬性
repo是推送到的目的地地址
推送到伺服器
使用hexo d -g
或hexo 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)