初めての自宅サーバー構築:NextCloudでファイルサーバーを作ろう!
みなさん、自宅サーバーって気になりませんか?「できる同僚」が「NextCloudを自宅サーバーに構築すれば、無料で画像やドキュメントを保存できて便利だよ」と言っていたのを聞いて、私も挑戦してみることにしました。この記事では、初心者の視点から「初めての自宅サーバーの構築」としてNextCloudでファイルサーバーを構築した過程を紹介します。
躓いたポイントたち
まず、私が苦労したポイントを共有します。同じような問題にぶつかったときの参考になれば幸いです。
ポイント | 解決策 |
---|---|
WSL? Docker? 環境構築をどうする? | WSL2 + Dockerの組み合わせを選択 |
ドメインをどうしよう | お名前.comで無料ドメインを入手 |
ポート開放がうまくできない!JCOMが悪いのか? | CloudFlareを使用してポート開放不要に |
DNSの設定方法がわからない | CloudFlareのダッシュボードで設定 |
NextCloudにスマホからログインできない | trusted_domainsの設定を追加 |
NextCloudの速度が遅くて不快 | キャッシュ設定の最適化を実施 |
構築の流れ
- PCの選定
- 環境構築(WSL+Docker)
- ドメインの入手
- CloudFlareの設定
- NextCloudをより使いやすく
用いたPC
形から入るタイプの私は、MINIS FORUMのUN100Lを選びました。コンパクトで省電力、そして24時間稼働させても気にならないサイレント設計が決め手でした。
環境構築
Windows 11にWSL2でUbuntuの環境を構築
まずはPowerShellでWSL2をインストールします。
wsl --install
このコマンドを実行すると、WSL2とUbuntuがインストールされます。
Ubuntu上にDockerを立ち上げる
次に、Ubuntu環境にDockerをインストールします。以下のコマンドを順番に実行してください。
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
wsl --shutdown
これらのコマンドでDockerのインストールと初期設定が完了します。
NextCloudをインストールしファイルサーバーを構築
NextCloudの構築にはDocker Composeを使用します。以下の手順で進めてください。
mkdir ~/nextcloud
cd ~/nextcloud
nano docker-compose.yml
docker-compose.yml
ファイルに以下の内容を記述します。
version: '3'
services:
db:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_PASSWORD: dbpassword
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
volumes:
- db:/var/lib/mysql
app:
image: nextcloud
restart: always
ports:
- 8080:80
links:
- db
volumes:
- nextcloud:/var/www/html
volumes:
nextcloud:
db:
ファイルを保存後、以下のコマンドでコンテナを起動します。
docker-compose up -d
これでNextCloudの基本的なセットアップが完了しました。ブラウザでhttp://localhost:8080
にアクセスし、初期設定を行ってください。
独自ドメインの取得
CloudFlareの設定で詰まる可能性があるため、先にドメインを取得しておくことをおすすめします。今回はお名前.comでドメインを取得しました。
重要: ドメイン取得時に表示されるネームサーバーを後ほどの設定で書き換えます
CloudFlareでポート開放不要のWEB公開を実現
JCOMのWiFiでポート開放が面倒だったため、CloudFlareを使用してポート開放なしでサービスをWeb公開する方法を採用しました。
CloudFlareとは?
CloudFlareは、ウェブサイトのパフォーマンスと安全性を向上させるためのCDN(コンテンツ配信ネットワーク)およびDDoS保護サービスです。以下の主な特徴があります:
- セキュリティ強化: DDoS攻撃やその他のサイバー攻撃からウェブサイトを保護します。
- 高速化: CDNを通じてコンテンツを配信することで、ウェブサイトの読み込み速度を向上させます。
- SSL/TLS暗号化: 無料のSSL/TLS証明書を提供し、通信を暗号化します。
- Argo Tunnel: これにより、ポート開放なしで自宅サーバーをインターネットに公開できます。
今回の自宅サーバー構築では、特にArgo Tunnel(現在はCloudflare Tunnelと呼ばれています)の機能を利用します。これにより、ルーターの設定を変更したりポートを開放したりすることなく、安全にNextCloudサーバーをインターネットに公開できるのです。
CloudFlareの設定
それでは、実際にCloudFlareの設定を行っていきましょう。
- CloudFlareでアカウントを作成し、取得したドメインを追加します。
- 表示されるNameserverをドメイン取得サイトで登録します。
次に、WSL2環境でCloudflaredをインストールし設定します。
wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
cloudflared tunnel login
cloudflared tunnel create nextcloud-tunnel
nano ~/.cloudflared/config.yml
config.yml
ファイルに以下の内容を記述します。
tunnel: <トンネルID>
credentials-file: /home/<ユーザー名>/.cloudflared/<トンネルID>.json
ingress:
- hostname: nextcloud.your-domain.com
service: http://localhost:8080
- service: http_status:404
トンネルを実行します。
cloudflared tunnel run nextcloud-tunnel
最後に、CloudflareのダッシュボードでDNSレコードを追加します。
タイプ: CNAME
名前: nextcloud
ターゲット: <トンネルID>.cfargotunnel.com
NextCloudにアクセスしてみよう
ドメインにアクセスすると、信頼できないドメインを介したアクセス
と表示される場合があります。これを解決するには、NextCloudの設定を変更する必要があります。
docker exec -it <コンテナ名> /bin/bash
nano config/config.php
config.php
ファイルに以下の設定を追加します。
'trusted_domains' =>
array (
0 => 'localhost',
1 => '<あなたのIPアドレス>',
2 => '<あなたのドメイン名>',
),
'overwriteprotocol' => 'https',
設定後、NextCloudコンテナを再起動します。
docker-compose restart app
これで、自分のドメインでNextCloudにアクセスできるようになりました!
Dockerを再起動するたびに、この設定をするのは正直面倒です。
docker-compose.yml
に環境変数を追加することで毎回自動で設定することもできます。
version: '3'
services:
app:
image: nextcloud
restart: always
ports:
- 8080:80
links:
- db
volumes:
- nextcloud:/var/www/html
environment:
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
- NEXTCLOUD_TRUSTED_DOMAINS=localhost:8080 <ドメイン名>
- OVERWRITEPROTOCOL=https
- PHP_MEMORY_LIMIT=1024M
- PHP_UPLOAD_LIMIT=1024M
省略…
まとめ
初めての自宅サーバー構築、いかがでしたか?確かに躓くポイントはありましたが、一つ一つ解決していくことで、自分だけのクラウドストレージを手に入れることができました。
NextCloudを使いこなすことで、プライバシーを保ちつつ、便利なファイル管理が可能になります。みなさんも挑戦してみてはいかがでしょうか?
次回は、NextCloudの活用方法や、さらなるカスタマイズについて紹介したいと思います。お楽しみに!