文章 Android YouTube影片

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

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

The Walking Fish 步行魚 頭像

· 1710 字 / 閱讀時間: 4 分鐘 · 859

文章 利用 Termux 在 Android 手機上架設 Nextcloud 伺服器|自架雲端硬碟儲存資料 的特色圖片

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

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

安裝前建議 & 提醒

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

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

安裝 Termux

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

這邊我就選擇從 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

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

安裝 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

以上就是今天的分享

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

暱稱
郵箱
網址
0/500
  • OωO
  • |´・ω・)ノ
  • ヾ(≧∇≦*)ゝ
  • (☆ω☆)
  • (╯‵□′)╯︵┴─┴
  •  ̄﹃ ̄
  • (/ω\)
  • ∠( ᐛ 」∠)_
  • (๑•̀ㅁ•́ฅ)
  • →_→
  • ୧(๑•̀⌄•́๑)૭
  • ٩(ˊᗜˋ*)و
  • (ノ°ο°)ノ
  • (´இ皿இ`)
  • ⌇●﹏●⌇
  • (ฅ´ω`ฅ)
  • (╯°A°)╯︵○○○
  • φ( ̄∇ ̄o)
  • ヾ(´・ ・`。)ノ"
  • ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
  • (ó﹏ò。)
  • Σ(っ °Д °;)っ
  • ( ,,´・ω・)ノ"(´っω・`。)
  • ╮(╯▽╰)╭
  • o(*////▽////*)q
  • >﹏<
  • ( ๑´•ω•) "(ㆆᴗㆆ)
  • 😂
  • 😀
  • 😅
  • 😊
  • 🙂
  • 🙃
  • 😌
  • 😍
  • 😘
  • 😜
  • 😝
  • 😏
  • 😒
  • 🙄
  • 😳
  • 😡
  • 😔
  • 😫
  • 😱
  • 😭
  • 💩
  • 👻
  • 🙌
  • 🖕
  • 👍
  • 👫
  • 👬
  • 👭
  • 🌚
  • 🌝
  • 🙈
  • 💊
  • 😶
  • 🙏
  • 🍦
  • 🍉
  • 😣
  • 颜文字
  • Emoji
  • Bilibili
1 則留言
tongy_chen

感谢博主的教程:
在最新版本中,如果出现php GD报错
请执行 (来源 :https://github.com/termux/termux-packages/issues/21262
patchelf –add-needed libphp.so $PREFIX/lib/php/gd.so

回覆 @tongy_chen :

感謝告知