快轉到主要內容

將PinePhone手機變成伺服器 (Docker + Nextcloud)

智慧型手機 真Linux手機 Nextcloud PinePhone
🗓️ 民國111年 壬寅年
✍ 切換正體/簡體字
目錄

PinePhone因其跟樹莓派相似的設計,使得當伺服器成為一種可行的玩法。

在PinePhone上安裝Docker,執行Nextcloud,架設私有雲端硬碟。並透過手機APP,上傳照片到NextCloud備份。

不對PinePhone本身作改造,比方說焊接什麼的,也不要拆螺絲,且PinePhone可以不靠電池繼續運作。

1. 安裝系統至SD卡
#

之所以選擇安裝至SD卡,是因為之後要回復成手機用途,只要拔掉就好,大不了就是把SD卡整張卡內容DD拷貝到電腦上儲存,軟體也不用重新設定。

  1. 要讓PinePhone能選擇從SD卡或eMMC開機,先安裝 Tow-Boot

  2. 接著安裝基於Debian的Mobian系統。從 官網下載映像檔案後 刷入系統

  3. 刷入完成後,在開機第一個紅燈亮起來之後按著音量下鍵,從SD卡開機。開機後更新套件、設定好時區。

  4. PinePhone要是拔掉電池,通訊模組會停擺,所以只能透過Type-C擴充埠外接網路卡或有線網路。我的這張WIFI網卡需要自行下載 88x2bu的社群驅動編譯安裝。

2. 安裝Docker
#

選擇Docker的理由是手工架設過程遇到PHP相依性地獄,不玩啦。

  1. 安裝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
  1. 加入gpg key後,因為Mobain是bookworm,無release file,要將其修改為bullseye才能安裝docker
#修改裡面的"bookworm"為"bullseye"
sudo vi /etc/apt/sources.list.d/docker.list
  1. 安裝Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. 確認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.
  1. 安裝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
  1. 確認docker-compose版本
$ docker-compose --version
Docker Compose version v2.2.2

3. 建立Nextcloud容器
#

  1. 建立docker compose檔案
vim docker-compose.yml
  1. 填入以下內容。(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:
  1. 部署,等容器下載完。此容器也會在手機開機自動啟動。
sudo docker-compose up -d

4. 初始化Nextcloud
#

  1. 在PinePhone上開啟瀏覽器,網址輸入localhost,進入Nextcloud。建立管理員帳戶,點選"Install",等10分鐘安裝完成。
  1. 接著安裝其他服務,再等個5分鐘安裝完成。
  1. 執行以下指令,透過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=*
  1. 因為PinePhone和Android手機都連線到同一個WIFI,於是在Android手機開啟 Nextcloud官方APP,輸入PinePhone的IP,登入Nextcloud。

  2. 手機APP登入後,介面就像一般雲端硬碟一樣,可以上傳並檢視檔案。

  3. 上傳相片的速度還算不錯,但要等個10秒刷新。

7.之後Nextcloud可以再繼續設定外部儲存空間、讓外部網路也可以連線進來等等的設定。

5. 總結
#

雖然說Nextcloud容器開機會自動啟動蠻方便的,但是PinePhone完整啟動要2分鐘,尤其是系統裝在SD卡的情況下,關機時間也會變長。

雖是如此,但PinePhone確實能當簡單的伺服器使用,而且緊急時PinePhone還有觸控螢幕能用。

6. 參考資料
#

相關文章

使用LUKS硬碟加密,保護PinePhone的資料
智慧型手機 真Linux手機 PinePhone
PinePhone安裝Linux系統教學
智慧型手機 真Linux手機 PinePhone
PinePhone Linux上跑Windows exe
智慧型手機 真Linux手機 Box86 Box64 PinePhone Wine

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。