余ったHDDを活用!どこからでもアクセス可能な「自作クラウドストレージ」

2025/01/31に公開

・余ったHDDを有効活用したい
・Ubuntuの入った余ったPCを有効活用したい
・ポート開放ができなくてもクラウドストレージを作りたい

概要

・余ったミニPCにUbuntuを入れる
・Tailscaleの導入により、httpながらもVPNを介して安全に接続できる
・外付けHDDを用いた大容量ストレージ(設定が圧倒的に楽だったので今回はDockerを使用)
・Nextcloud&Tailscale on Docker

1.Ubuntu(LTS)のインストール

ミニPCにUbuntuを入れます。LTSの方が楽です。

2.Dockerのインストール

https://qiita.com/yoshiyasu1111/items/17d9d928ceebb1f1d26d

3.HDDのマウント

フォーマットしたHDDを接続します。(今回は試験的に2MBのパーティションを用いた)
空の領域をLinuxパーティションに変換し、マウントします。
(今回は/media/kiu21/hddとしてマウントします)

4.Docker-composeの編集

以下のような、ファイル構成でdocker-compose.ymlを作成していきます。
以降docker-composeを起動させると、nextcloudディレクトリに作成するサーバーのデータが入ります。(htmlとdbディレクトリ)

/home
|-/user
  |-/nextcloud
    |-docker-compose.yml
    |-html #サーバー設定
    |-db #データベース設定

次に、以下のような内容でdocker-compose.ymlを作成します。(LTSなのでメモ帳で作成できます!)
外付けHDDのパスである「/media/kiu21/hdd」は適宜、HDDがマウントされているパスに変換してください。


services:
  db:
    image: mariadb
    restart: always
    volumes:
      - ./db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=admin
      - MYSQL_PASSWORD=admin
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud:apache
    ports:
      - "8080:80"
    links:
      - db
    volumes:
      - ./nextcloud:/var/www/html
      - /media/kiu21/hdd:/hdd1
    restart: always

5.Docker-composeの起動

docker-composeが入ってないようならこちらを参照
https://docs.docker.com/engine/install/ubuntu/
docker daemonが動いていないようなら、以下のコマンドで開始できる。

sudo service docker start

実際にdocker-composeを起動します。

$sudo docker-compose up -d
しばらく待ちます

$sudo docker ps


apach上にnextcloudが乗っているコンテナと、mariadbのコンテナが作成されました。

6.nextcloudへのログイン

ブラウザでurlに
http://localhost:8080
をと入力すると、

のような画面となるので、ユーザー名とパスワードを設定してください。
画面を進んで、しばらくすると必要なアプリの準備が完了します。
その後、
「アプリ>無効なアプリ」から「external strage support」を有効にする
「管理者設定>外部ストレージ」
から以下のように設定します。(緑のチェックマークが出たら成功)

これで、外付けHDDにデータを保存する設定が完了しました。

7.tailscaleの設定(Docker内)

以下のコマンドでDockerのApacheサーバーのプロンプトへ入ります。

$sudo docker container exec -it nextcloud-app-1 bash

ここから、tailscaleをインストールし、設定を行います。

#apt-get update
#apt-get install curl -y
#curl -fsSL ttps://tailscale.com/install.sh | sh
#tailscaled --tun=userspace-networking --socks5-server=localhost:1055 &
Enter
#tailscale up

この後、URLが表示されるのでそこにログインして登録する。
途中でほかのデバイスからログインするよう促される。
「machines>nextcloudを入れたコンピュータ」をクリックすると以下のようなURLを調べることができる。このURLを使うとTailscaleを入れて自分のアカウントでログインしたPC・スマホからNextcloudへアクセスすることができる。

ドメインがこれなので、この場合「http://4f8afda7c9d1.tail9e316b.ts.net」アクセスしてみると、

となってしまう。
以前のバージョンであればアクセスできたが、セキュリティが向上している。。

対処として、URLをNextcloud設定ファイルに登録します。
DockerでNextcloudの設定ファイルは/nextcloud/htmlにバインドしているので、「/nextcloud/html/config/config.php」を以下のように編集すると、アクセスできるようになります。

以上で、Tailscaleにログインした端末なら、どこからでもこの場合「http://4f8afda7c9d1.tail9e316b.ts.net」からNextcloudを利用できます!

参考文献

https://tailscale.com/learn/ssh-into-docker-container
https://qiita.com/hiro2do/items/f8eed40acab713f20693
https://docs.nextcloud.com/server/30/admin_manual/installation/installation_wizard.html#trusted-domains

Discussion