6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初めての自宅サーバー】 ポート開放せずにファイルサーバーを作る!

Last updated at Posted at 2024-07-18

初めての自宅サーバー構築:NextCloudでファイルサーバーを作ろう!

みなさん、自宅サーバーって気になりませんか?「できる同僚」が「NextCloudを自宅サーバーに構築すれば、無料で画像やドキュメントを保存できて便利だよ」と言っていたのを聞いて、私も挑戦してみることにしました。この記事では、初心者の視点から「初めての自宅サーバーの構築」としてNextCloudでファイルサーバーを構築した過程を紹介します。

躓いたポイントたち

まず、私が苦労したポイントを共有します。同じような問題にぶつかったときの参考になれば幸いです。

ポイント 解決策
WSL? Docker? 環境構築をどうする? WSL2 + Dockerの組み合わせを選択
ドメインをどうしよう お名前.comで無料ドメインを入手
ポート開放がうまくできない!JCOMが悪いのか? CloudFlareを使用してポート開放不要に
DNSの設定方法がわからない CloudFlareのダッシュボードで設定
NextCloudにスマホからログインできない trusted_domainsの設定を追加
NextCloudの速度が遅くて不快 キャッシュ設定の最適化を実施

構築の流れ

  1. PCの選定
  2. 環境構築(WSL+Docker)
  3. ドメインの入手
  4. CloudFlareの設定
  5. NextCloudをより使いやすく

用いたPC

形から入るタイプの私は、MINIS FORUMのUN100Lを選びました。コンパクトで省電力、そして24時間稼働させても気にならないサイレント設計が決め手でした。

環境構築

Windows 11にWSL2でUbuntuの環境を構築

まずはPowerShellでWSL2をインストールします。

powershell
wsl --install

このコマンドを実行すると、WSL2とUbuntuがインストールされます。

Ubuntu上にDockerを立ち上げる

次に、Ubuntu環境にDockerをインストールします。以下のコマンドを順番に実行してください。

wsl2
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を使用します。以下の手順で進めてください。

wsl2
mkdir ~/nextcloud
cd ~/nextcloud
nano docker-compose.yml

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:

ファイルを保存後、以下のコマンドでコンテナを起動します。

wsl2
docker-compose up -d

これでNextCloudの基本的なセットアップが完了しました。ブラウザでhttp://localhost:8080にアクセスし、初期設定を行ってください。

独自ドメインの取得

CloudFlareの設定で詰まる可能性があるため、先にドメインを取得しておくことをおすすめします。今回はお名前.comでドメインを取得しました。

重要: ドメイン取得時に表示されるネームサーバーを後ほどの設定で書き換えます

CloudFlareでポート開放不要のWEB公開を実現

JCOMのWiFiでポート開放が面倒だったため、CloudFlareを使用してポート開放なしでサービスをWeb公開する方法を採用しました。

CloudFlareとは?

CloudFlareは、ウェブサイトのパフォーマンスと安全性を向上させるためのCDN(コンテンツ配信ネットワーク)およびDDoS保護サービスです。以下の主な特徴があります:

  1. セキュリティ強化: DDoS攻撃やその他のサイバー攻撃からウェブサイトを保護します。
  2. 高速化: CDNを通じてコンテンツを配信することで、ウェブサイトの読み込み速度を向上させます。
  3. SSL/TLS暗号化: 無料のSSL/TLS証明書を提供し、通信を暗号化します。
  4. Argo Tunnel: これにより、ポート開放なしで自宅サーバーをインターネットに公開できます。

今回の自宅サーバー構築では、特にArgo Tunnel(現在はCloudflare Tunnelと呼ばれています)の機能を利用します。これにより、ルーターの設定を変更したりポートを開放したりすることなく、安全にNextCloudサーバーをインターネットに公開できるのです。

CloudFlareの設定

それでは、実際にCloudFlareの設定を行っていきましょう。

  1. CloudFlareでアカウントを作成し、取得したドメインを追加します。
  2. 表示されるNameserverをドメイン取得サイトで登録します。

次に、WSL2環境でCloudflaredをインストールし設定します。

wsl2
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ファイルに以下の内容を記述します。

config.yml
tunnel: <トンネルID>
credentials-file: /home/<ユーザー名>/.cloudflared/<トンネルID>.json

ingress:
  - hostname: nextcloud.your-domain.com
    service: http://localhost:8080
  - service: http_status:404

トンネルを実行します。

wsl2
cloudflared tunnel run nextcloud-tunnel

最後に、CloudflareのダッシュボードでDNSレコードを追加します。

タイプ: CNAME
名前: nextcloud
ターゲット: <トンネルID>.cfargotunnel.com

NextCloudにアクセスしてみよう

ドメインにアクセスすると、信頼できないドメインを介したアクセスと表示される場合があります。これを解決するには、NextCloudの設定を変更する必要があります。

docker/bin/bash
docker exec -it <コンテナ名> /bin/bash
nano config/config.php

config.phpファイルに以下の設定を追加します。

config.php
'trusted_domains' => 
  array (
    0 => 'localhost',
    1 => '<あなたのIPアドレス>',
    2 => '<あなたのドメイン名>',
  ),

'overwriteprotocol' => 'https',

設定後、NextCloudコンテナを再起動します。

wsl2
docker-compose restart app

これで、自分のドメインでNextCloudにアクセスできるようになりました!

Dockerを再起動するたびに、この設定をするのは正直面倒です。
docker-compose.ymlに環境変数を追加することで毎回自動で設定することもできます。

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の活用方法や、さらなるカスタマイズについて紹介したいと思います。お楽しみに!

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?