- 2024/10/31(木)
RaspberryPiでNextCloudを導入してNAS(ファイル共有サーバー)にする
表示が乱れた場合は再ロードをお試しください。
クラウドに頼らず、自分だけのクラウドストレージ(NAS)を作ってみたいと思ったことはありませんか?
本記事では、手のひらサイズのシングルボードコンピュータ「Raspberry Pi 4」を使って、
オープンソースのファイル共有ソフト「Nextcloud」を導入し、さらに「Cloudflare Tunnel」を使って
安全に外部からアクセス可能な“マイ・クラウド”を構築する方法を、初心者でもわかりやすく解説します。
Google Drive や Dropbox の代わりに、自分のルールで、自分のデータを管理できる環境を、わずか数千円で始めてみませんか?
今回使用するサービスについて
Nextcloud
Nextcloudは、自分自身でクラウドストレージを構築できるソフトウェアです。
Google DriveやDropboxのように、ファイルのアップロード・共有・同期ができますが、大きく違うのはその「自分でコントロールできる自由さ」にあります。
- 無料で使える(オープンソース)
- サーバーは自分のPCやRaspberry PiでもOK
- 広告なし、トラッキングなし
- ファイル以外にもカレンダーや連絡帳、メモ、ビデオ通話など多機能
現代のクラウドサービスは便利ですが、同時に以下のような不安もあります
- 個人情報が企業に収集されていないか?
- 突然サービスが終了したらどうなる?
- 無料プランの容量が足りない…
Nextcloudならこれらの問題を解決できます。データはすべて自分の手元にあり、容量の制限も自由。さらに、プラグイン(アプリ)で機能を自由に追加できる柔軟性も魅力です。
Cloudflare tunnel
Cloudflareは、Webサイトやサーバーの“防御”と“加速”をしてくれるインターネットサービスです。世界中の企業や開発者が使っており、以下のような機能があります:
- 高速化(CDN):Webページの表示速度アップ
- セキュリティ(DDoS防御・WAF):攻撃からサイトを守る
- DNS管理:ドメイン名とサーバーの結びつけ
- Cloudflare Tunnel:自宅サーバーを安全に外部公開(ポート開放不要)
Cloudflare Tunnel は、ポート開放なしで自宅のサーバーをインターネットに公開できるサービスです。
通常、外部から自宅のNASにアクセスするにはルーターの設定が必要ですが、Cloudflare Tunnelを使えば:
- 自宅からクラウドに安全なトンネルを作る
- 無料で独自ドメイン(またはサブドメイン)を使える
- HTTPS対応でセキュリティも確保
→ 初心者でも比較的簡単に「自分だけのクラウド」を外部公開できます。
ローカルサーバまで
ステップ①:パッケージの更新とDockerのインストール
まずはターミナルを開いて、以下のコマンドを順番に実行します:
これで、Raspberry PiにDockerとDocker Composeがインストールされ、ユーザー「pi」にDockerの操作権限が付与されます。
sudo apt update
sudo apt install docker.io docker-compose -y
sudo usermod -aG docker pi ステップ②:Nextcloud用の作業ディレクトリを作成
以下のコマンドで、Nextcloud用のフォルダを作り、そこに移動します。
mkdir ~/nextcloud && cd ~/nextcloudステップ③:Docker Compose ファイルを作成
次に docker-compose.yml という設定ファイルを作ります。
nano docker-compose.yml表示された画面に、以下の内容をコピペしてください。
version: '3'
services:
db:
image: linuxserver/mariadb:arm64v8-10.11.5-r0-ls120
container_name: nextcloud-db
restart: always
environment:
- MYSQL_ROOT_PASSWORD=rootpass
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=ncuser
- MYSQL_PASSWORD=ncpass
volumes:
- db:/config
nextcloud:
image: nextcloud
container_name: nextcloud-app
restart: always
ports:
- 8080:80
volumes:
- nextcloud:/var/www/html
depends_on:
- db
volumes:
db:
nextcloud:
sudo usermod -aG docker $USERステップ④:Nextcloudの起動
以下のコマンドでNextcloudとデータベースのコンテナをダウンロードして起動します。
docker-compose pull
docker-compose up -dステップ⑤:Webブラウザからアクセス!
起動後、ブラウザで以下のURLにアクセスします
http://<ラズパイのIPアドレス>:8080IPアドレスの確認コマンドは以下です。
hostname -Iここまでで、家の中などローカルな環境のファイル共有サーバが完成しました。
外でも使えるようにする設定
ステップ①:パッケージの更新と curl のインストール
まずは、必要なツール(curl)をインストールします。
curl は、ファイルをインターネットからダウンロードするためのツールです。
sudo apt update
sudo apt install curl -yステップ②:Cloudflare公式の実行ファイルをダウンロード
Cloudflare Tunnel を動かすための「cloudflared」というコマンドツールをダウンロードします。
このURLは、Cloudflareが提供しているRaspberry Pi(ARM64)向けの最新バージョンです。
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64 -o cloudflaredステップ③:実行権限を与えてシステムパスに移動
ダウンロードした cloudflared に実行権限を与え、システム内のコマンドパスに配置します。
chmod +x cloudflared
sudo mv cloudflared /usr/local/binステップ④:Cloudflareアカウントと接続する
次に、Cloudflare Tunnel を使うために、自分の Cloudflare アカウントと認証を行います。
cloudflared tunnel loginステップ⑤ドメイン取得
以下のサイトで無料に取得できるそうです。
私はこの契約しているブログサーバのロリポップの無料ドメイン枠があることを思い出して、もう一つ取得しました。
それを以下の部分に貼り付け、登録します。

次に、overviewの場所から、ネームサーバーを二つ確認します。

それを自分のドメインを管理している場所に行き、設定しなおします。
ムームードメインの場合は「取得したドメインで使用する」を選択します。

次に以下を実行して、これでトンネル用のJSONファイル(例:mynextcloud.json)を生成します。
cloudflared tunnel create mynextcloudそしたら、cloudflareに戻ります。以下を設定します。
| 項目 | 内容 |
|---|---|
| タイプ | CNAME |
| 名前(Name) | nextcloud(例:nextcloud.example.com にするなら) |
| ターゲット(Target) | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.cfargotunnel.com ←次の手順で取得 |
| Proxy | オレンジの雲「Proxied」をON |
ターゲットの確認方法は、cloudflared内にあるUUIDファイル
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.jsonみたいに出てきます。
ls ~/.cloudflared
# 例: cert.pem 3158dceb-25ef-4fce-840c-83e6f3451e88.json
cat ~/.cloudflared/3158dceb-25ef-4fce-840c-83e6f3451e88.json
# 中に "tunnel_id": "3158dceb-25ef-..." のような情報が入っている

config.ymlファイルを作ります。
nano ~/.cloudflared/config.ymltunnel: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
credentials-file: /home/ユーザー名/.cloudflared/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.json
ingress:
- hostname: nextcloud.あなたのドメイン
service: http://localhost:8080
- service: http_status:404ついに、トンネルの起動です。
cloudflared tunnel run mynextcloudトンネルをずっと起動しておきたい場合は、以下の方法がおすすめです:
systemd に登録(推奨)
sudo cloudflared service installこれで自動的に ~/.cloudflared/config.yml を元に常駐するようになります。
と思ったらまだ設定がありました。

ラズパイのNextcloudの config.php を開きます:
docker exec -it nextcloud-app bash
nano /var/www/html/config/config.phpそして、以下の部分を修正します。
'trusted_domains' =>
array (
0 => 'localhost',
1 => 'nextcloud.s42.tech',
),そして、再起動して終了です。
exit
docker restart nextcloud-appこれでようやくログインして使えるようになりました。
作ってみた感想
今回サーバーを立ててみて一番思ったことは、結構面倒くさいということです。
あとは外部公開する方法は何個かあるのだけど、結構メリット・デメリットがあって今回のcloudflareの方法が一番現実的かなと思って選択しました。
ちなみに固定ipはネット契約のオプションのような形で契約する形が多く、値段も月1000円で住まないと思うのでコスパは悪いです。
| 方法 | 概要 | メリット | デメリット |
|---|---|---|---|
| ① ポート開放(+DDNS) | ルーターでポートを開け、DDNSで名前解決 | ・シンプルな仕組み・古典的で広く使われている | ・セキュリティリスク高い・IPやルーターが変わると再設定必要 |
| ② 固定IP契約(+ドメイン) | ISPと契約して固定IPを取得 → ドメインに割当 | ・安定性抜群・商用運用も可能 | ・月額コスト高(固定IP料)・専門知識が必要 |
| ③ Cloudflare Tunnel | ローカルからCloudflareへトンネル接続(ポート不要) | ・ポート開放不要・HTTPS無料・安全で手軽 | ・クラウド依存・CLI設定がやや面倒・ネット接続前提 |
| ④ VPN(自宅にVPN接続) | 外からVPNで自宅に入ってローカルアクセス | ・安全(暗号化)・外部公開せずにNASにアクセス可能 | ・使い勝手がやや悪い・スマホなどでVPN設定が必要 |
| ⑤ リバースプロキシ+独自クラウド | Nginxなどを使ってサーバー経由でNASへ中継 | ・複数サービスを1ドメインで公開可・細かな制御が可能 | ・設定が複雑・セキュリティ対策も自前で必要 |
あと、途中でドメイン取得の話があったと思います。
私は値段が安いからという理由でロリポップと契約していて、ドメイン2つ目が無料でもらえるプランに契約しています。
これはロリポップがすごいのではなく、ライバルのxサーバーでももらえるので普通だと思います。
そういうことが言いたいのではなくて、有料ドメインで管理しようとしている方に気を付けてほしいのですが、ドメインの取得料はめっちゃ安くても2年目以降の契約更新時には更新料と手数料がかかります。
これは調べた感じどこも同じくらいなので、取得時50円でも、更新料が2000円、手数料1000円とかだとコスパ悪くなるので注意してください。

元も子もないことを言うと、ラズパイだと性能としてもあまり高くないのでNASが欲しい人は市販のものを買うことをお勧めします。
セキュリティや通信速度の問題もあるので、私みたいにobsidianのデータの共有や簡単なスクリーンショットの共有くらいで使うくらいが一番現実的かなと思います。
因みに、最近youtubeでみたugreenのnasと電力の比較をしてみると以下のようになります。
UGREEN NAS クラウドファンディング開始! 最大160TB大容量、今こそ!
全然変わりませんね。
| 機種 | 想定消費電力 | 月間電力(kWh) | 月額電気代(円) |
|---|---|---|---|
| Raspberry Pi 4 | 5W | 5×24×30÷1000 = 3.6kWh | 約 97円 |
| Raspberry Pi 5 | 8W | 8×24×30÷1000 = 5.76kWh | 約 156円 |
| UGREEN NASync | 15W | 15×24×30÷1000 = 10.8kWh | 約 292円 |
話のタネくらいにはなると思います。いかがでしょうか。
