Featured image of post 利用 Termux 在 Android 手機上架設 Nextcloud 伺服器|自架雲端硬碟儲存資料

利用 Termux 在 Android 手機上架設 Nextcloud 伺服器|自架雲端硬碟儲存資料

自從 Google 相簿取消壓縮畫質無限空間後,我已經很久沒有雲端備份照片了,最近想說反正舊手機放著也沒用,不如拿來備份照片。今天就來跟大家分享如何設定。

自從 Google 相簿取消壓縮畫質無限空間後,我已經很久沒有雲端備份照片了,最近想說反正舊手機放著也沒用,不如拿來備份照片。

除了手機空間隨便都能比 Google 等雲端硬碟的免費空間還大之外,也不用擔心檔案被AI審查、誤判,最終帳號被封鎖的事情發生(殺錯良民|父親發送兒子私處照片給醫生遙距診症 遭Google誤判為性罪犯兼封鎖帳號 from Yahoo)。

安裝前建議 & 提醒

在正式開始操作前,建議可以在電腦上載個 Scrcpy 來用,在打指令時比較方便,下載與使用方法如下

此外,建議不要真的用太舊的手機,最好可以選近3~5年的手機,畢竟在更早的手機,大多數儲存空間都不算多。

安裝 Termux

目前雖然我們可以在 Play 商店上找到 Termux,但 Play 商店上的 Termux 已經不再更新,所以這邊建議可以到 F-Droid 上,或是到 GitHub 的 Releases 頁面,下載最新版 Termux 的 apk 檔。

目前 Play 商店的 Termux 已不再更新

這邊我就選擇從 F-Droid 下載並安裝 Termux

設定環境

安裝完打開 Termux 後,我們需要安裝一些套件來架設伺服器,讓 Nextcloud 可以在 Termux 中執行。

安裝套件

1
pkg install php apache2 php-apache sqlite wget unzip

這邊我解釋一下為何不使用 MySQL(MariaDB)

主要是因為本篇的教學已經算是複雜的了,還要再教大家一些 SQL,根本友善等級直接歸零。

而且對於個人使用來說,SQLite 的效能就足夠了,實在沒必要再為難自己。

所以這裡才會選用 SQLite,而非正常的配置 LAMP 環境。

在安裝完套件後,我們接下來就要設定 apache,讓其可以執行 php

設定 Apache

首先我們先改一下目錄

1
cd $PREFIX

$PREFIX 是 Termux 的一個特殊的環境變數,位置位於【/data/data/com.termux/files/usr】,其作用不是本篇的重點,想了解的可以看這裡 https://wiki.termux.com/wiki/Getting_started

接下來我們使用內建的 nano 開啟設定文件

1
nano etc/apache2/httpd.conf

nano 的使用方法這邊我們簡單介紹 4 個:

  1. Ctrl+S 存檔
  2. Ctrl+X 退出
  3. Ctrl+W 設定搜尋字
  4. Alt+W 搜尋下一個

知道這些就可以基本使用了

那麼接下來我們就開始設定

首先我們需要找到以下這段

1
2
3
<IfModule dir_module>
  DirectoryIndex index.html
</IfModule>

將 index.php 加入,改完後變成以下的樣子

1
2
3
<IfModule dir_module>
  DirectoryIndex index.php index.html
</IfModule>

接下來我們要找到一下這兩行

1
2
#LoadModule mpm_prefork_module libexec/apache2/mod_mpm_prefork.so
LoadModule mpm_worker_module libexec/apache2/mod_mpm_worker.so

將 mpm_worker_module 那行註解掉,mpm_prefork_module 那行取消註解

1
2
LoadModule mpm_prefork_module libexec/apache2/mod_mpm_prefork.so
#LoadModule mpm_worker_module libexec/apache2/mod_mpm_worker.so

這部分的設定牽涉到 worker 與 prefork 模式的工作原理,詳細可以看這篇文章: https://zhuanlan.zhihu.com/p/464805524,簡單來說就是自己用的情況下,改成 prefork 比較好

調整好後,我們在往下幾行,加上載入 php 套件的設定

1
2
3
4
LoadModule php_module /data/data/com.termux/files/usr/libexec/apache2/libphp.so 
<FilesMatch \.php$>
  SetHandler application/x-httpd-php
</FilesMatch> 

最後再補上 ServerName 的設定

1
ServerName localhost

這樣就可以 Ctrl+S,然後 Ctrl+X 退出 nano 編輯器了

之後就可以將網頁的檔案放到【$PREFIX/share/apache2/default-site/htdocs】資料夾內,在開啟 Apache 伺服器了

測試 Apache 是否可執行 PHP

接下來我們先簡單測試一下 Apache 是否可正常執行 PHP

我們輸入以下指令創建一個 PHP 的檔案

1
echo '<?php phpinfo(); ?>' > $PREFIX/share/apache2/default-site/htdocs/index.php

然後在輸入以下指令開啟 Apache 的伺服器

1
apachectl start

如果沒報錯,我們就可以到 http://localhost:8080 看看伺服器是否有啟動成功,以及 PHP 是否有成功執行。

正常情況下應該可以看到以下畫面


如果在執行指令時看到 libexpat.so.1 not found 之類的報錯,並且 Apache 無法開啟,可以試試執行以下指令

1
pkg up

之後再重新執行伺服器的開啟指令,理論上應該能夠解決

執行pkg up前開啟apache的報錯

安裝 Nextcloud

在設定好 Apache 後,接下來我們就可以開始安裝 Nextcloud。

首先我們先在任意的地方,透過以下這條指令下載 Nextcloud 伺服器程式的壓縮檔

1
wget https://download.nextcloud.com/server/releases/nextcloud-27.1.2.zip

我寫這篇文章時 Nextcloud 的最新版本是 27.1.2,未來有新的版本大家可以自行修改指令就好

我們將此檔案解壓縮

1
unzip nextcloud*.zip

接下來將解壓出來的檔案,移到 Apache 的 htdocs 資料夾內

1
mv -f nextcloud/* nextcloud/.* $PREFIX/share/apache2/default-site/htdocs/

最後再將壓縮檔以及殘留的 nextcloud 最外層資料夾刪除

1
2
rm nextcloud*.zip
rm -rf nextcloud

接著就可以回到 http://localhost:8080,開始設定帳號

帳號設定這邊,因為此次我們是使用 SQLite,所以我就不多做介紹,只要設定好管理完帳號,就可以直接按底下的安裝了。

設定區域網訪問

在設定完後,如果我們在電腦上輸入此台手機的區域網 IP,就會發現 Nextcloud 顯示禁止未經授權的域名訪問。

此時我們需要到 $PREFIX/share/apache2/default-site/htdocs/config 資料夾內,修改 config.php,將區域網的 IP 加入。

我們輸入以下指令開啟編輯器

1
nano $PREFIX/share/apache2/default-site/htdocs/config/config.php

將 ’trusted_domains’ 變數從原本的

1
2
3
4
'trusted_domains' => 
array(
  0 => 'localhost:8080',
)

添加一個區域網的 IP,這邊 IP 的部分是可以支援用【*】作為萬用字元的,所以可以輸入成以下這樣:

1
2
3
4
5
'trusted_domains' => 
array(
  0 => 'localhost:8080',
  1 => '192.168.*.*:8080',
)

影片介紹

End

以上就是今天的分享

有任何問題歡迎留言與指教