PinePhone因其跟樹莓派相似的設計,使得當伺服器成為一種可行的玩法。
在PinePhone上安裝Docker,執行Nextcloud,架設私有雲端硬碟。並透過手機APP,上傳照片到NextCloud備份。
不對PinePhone本身作改造,比方說焊接什麼的,也不要拆螺絲,且PinePhone可以不靠電池繼續運作。
1. 安裝系統至SD卡#
之所以選擇安裝至SD卡,是因為之後要回復成手機用途,只要拔掉就好,大不了就是把SD卡整張卡內容DD拷貝到電腦上儲存,軟體也不用重新設定。
要讓PinePhone能選擇從SD卡或eMMC開機,先安裝 Tow-Boot。
刷入完成後,在開機第一個紅燈亮起來之後按著音量下鍵,從SD卡開機。開機後更新套件、設定好時區。
PinePhone要是拔掉電池,通訊模組會停擺,所以只能透過Type-C擴充埠外接網路卡或有線網路。我的這張WIFI網卡需要自行下載 88x2bu的社群驅動編譯安裝。
2. 安裝Docker#
選擇Docker的理由是手工架設過程遇到PHP相依性地獄,不玩啦。
- 安裝Debian的Docker前置套件
sudo apt update
sudo apt-get install a-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 加入gpg key後,因為Mobain是bookworm,無release file,要將其修改為bullseye才能安裝docker
#修改裡面的"bookworm"為"bullseye"
sudo vi /etc/apt/sources.list.d/docker.list
- 安裝Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io
- 確認Docker執行狀況
$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
7050e35b49f5: Pull complete
Digest: sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
- 安裝docker-compose (官網指示的有bug,Github上說裝這版才對)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- 確認docker-compose版本
$ docker-compose --version
Docker Compose version v2.2.2
3. 建立Nextcloud容器#
- 建立docker compose檔案
vim docker-compose.yml
- 填入以下內容。(MySQL似乎沒有ARM版,所以我使用MariaDB代替。)
version: "3"
services:
nextcloud:
image: nextcloud:latest
restart: unless-stopped
ports:
- 80:80
environment:
- MYSQL_HOST=mysql
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=nextcloud
volumes:
- nextcloud:/var/www/html
mysql:
image: MariaDB:10.5.8
restart: unless-stopped
environment:
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=nextcloud
- MYSQL_ROOT_PASSWORD=nextcloud
volumes:
- mysql:/var/lib/mysql
volumes:
mysql:
nextcloud:
- 部署,等容器下載完。此容器也會在手機開機自動啟動。
sudo docker-compose up -d
4. 初始化Nextcloud#
- 在PinePhone上開啟瀏覽器,網址輸入
localhost
,進入Nextcloud。建立管理員帳戶,點選"Install",等10分鐘安裝完成。
- 接著安裝其他服務,再等個5分鐘安裝完成。
- 執行以下指令,透過docker exec對Nextcloud容器傳送指令,將Android手機的IP加入白名單,“value"後面寫domain。但我加了仍無效果,所以改成任意domain都可以登入(危險,不要在家嘗試)。
sudo docker exec --user www-data mobian-nextcloud-1 php occ config:system:set trusted_domains 1 --value=*
因為PinePhone和Android手機都連線到同一個WIFI,於是在Android手機開啟 Nextcloud官方APP,輸入PinePhone的IP,登入Nextcloud。
手機APP登入後,介面就像一般雲端硬碟一樣,可以上傳並檢視檔案。
上傳相片的速度還算不錯,但要等個10秒刷新。
7.之後Nextcloud可以再繼續設定外部儲存空間、讓外部網路也可以連線進來等等的設定。
5. 總結#
雖然說Nextcloud容器開機會自動啟動蠻方便的,但是PinePhone完整啟動要2分鐘,尤其是系統裝在SD卡的情況下,關機時間也會變長。
雖是如此,但PinePhone確實能當簡單的伺服器使用,而且緊急時PinePhone還有觸控螢幕能用。
6. 參考資料#
- Install Docker Engine on Debian - docker docs
- How to Self-Host a Collaborative Cloud with Nextcloud and Docker - cloud savvy IT
- /usr/local/bin/docker-compose: line 1: Not: command not found #6268 - Github
- Docker (Apple Silicon/M1 Preview) MySQL “no matching manifest for linux/arm64/v8 in the manifest list entries” - stackoverflow
- Add a Trusted Domain to Nextcloud - Laur IVAN | PRO