メインコンテンツへスキップ

PinePhoneスマホをサーバーにする (Docker + Nextcloud)

·
カテゴリー スマートフォン 真のLinuxスマホ
タグ Nextcloud PinePhone
目次

PinePhoneはRaspberry Piに近い設計なので、サーバーとして使うのも現実的な遊び方になります。

PinePhoneにDockerを入れてNextcloudを動かし、プライベートなクラウドストレージを構築します。さらにスマホAPP経由で写真をNextCloudへアップロードしてバックアップします。

PinePhone本体には改造を加えません。たとえば半田付けのようなことはしないし、ネジも外しません。それにPinePhoneはバッテリーなしでも動作を継続できます。

1. システムをSDカードへインストール
#

SDカードへインストールする理由は、あとでスマホ用途へ戻したくなったら抜くだけで済むからです。最悪でもSDカード全体の内容をDDでPCへコピーして保存すればよく、ソフトウェアも再設定不要です。

  1. PinePhoneでSDカードまたはeMMCからの起動を選べるように、まずTow-Bootをインストールします。

  2. 次にDebianベースのMobianシステムをインストールします。公式サイトからイメージファイルをダウンロードして、システムを書き込みます

  3. 書き込みが完了したら、起動時に最初の赤いLEDが点灯したあと音量下キーを押し続け、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でブラウザを開き、URLに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秒ほど待つ必要があります。

  4. その後Nextcloudでは、外部ストレージや外部ネットワークからの接続などの設定を引き続き追加できます。

5. まとめ
#

Nextcloudコンテナが起動時に自動起動するのはかなり便利ですが、PinePhoneの完全起動には2分かかります。特にシステムをSDカードへ入れている場合、シャットダウン時間も長くなります。

そうは言っても、PinePhoneは確かに簡単なサーバーとして使えますし、緊急時にはPinePhoneのタッチスクリーンも使えます。

6. 参考資料
#

関連記事


最後までお読みいただきありがとうございます。本サイトでは公開コメント欄を設けていません。私はソーシャルな反応やアクセス数を追い求めるためではなく、自分の考えを誠実に探求するために文章を書いています。記事を丁寧にお読みいただいたうえで、ご感想やご意見をお寄せいただければ幸いです。誤字・誤り・技術的な問題などを見つけた場合、またはフィードバックを共有したい場合は、Aboutページに記載しているメールアドレスまでお気軽にご連絡ください。