PinePhoneはRaspberry Piに近い設計なので、サーバーとして使うのも現実的な遊び方になります。
PinePhoneにDockerを入れてNextcloudを動かし、プライベートなクラウドストレージを構築します。さらにスマホAPP経由で写真をNextCloudへアップロードしてバックアップします。

PinePhone本体には改造を加えません。たとえば半田付けのようなことはしないし、ネジも外しません。それにPinePhoneはバッテリーなしでも動作を継続できます。
1. システムをSDカードへインストール#
SDカードへインストールする理由は、あとでスマホ用途へ戻したくなったら抜くだけで済むからです。最悪でもSDカード全体の内容をDDでPCへコピーして保存すればよく、ソフトウェアも再設定不要です。
PinePhoneでSDカードまたはeMMCからの起動を選べるように、まずTow-Bootをインストールします。
次にDebianベースのMobianシステムをインストールします。公式サイトからイメージファイルをダウンロードして、システムを書き込みます。
書き込みが完了したら、起動時に最初の赤いLEDが点灯したあと音量下キーを押し続け、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.23. 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 -d4. Nextcloudを初期化#
- PinePhoneでブラウザを開き、URLに
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秒ほど待つ必要があります。

その後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
