Nextcloudでクラウドストレージを作ってみる

Linux
この記事は約12分で読めます。

NextcloudというOSSを使ってセルフクラウドストレージを構築してみました。

Nextcloudってなに?という方はWikipediaを参照するとわかるかもしれません。

Nextcloudは、オンラインストレージの作成と使用のためのクライアント・サーバ型のソフトウェアである。機能的にはDropboxに似ているが、オフプレミスのオンラインストレージサービスは提供しない。Nextcloudはフリーかつオープンソースなので、誰でも自分のプライベートサーバにインストールして利用することができる。

引用元:https://ja.wikipedia.org/wiki/Nextcloud

クラウドストレージと言いつつ自宅のストレージにデータを保存するので、「それってクラウドストレージじゃなくね?」というツッコミはあると思います。

AWSとかAzure上に構築すれば正真正銘クラウドストレージですが、クラウドストレージっぽく使えるという意味でクラウドストレージとしてここでは呼びます(強引)

Googleフォトの無料無制限アップロードサービスが今年中に終了してしまうこともあり、「代替となるモノがあればやってみよう」というモチベーションでやってみました。

                 

構築環境

UbuntuのIP固定

パソコンをNextcloudサーバーとして使うので、プライベートIPを固定しておきます。

設定方法は以前の記事の通り↓

                 

DDNSの取得

私の自宅の回線はグローバルIPが固定されていません。

そのため、インターネットから自宅のNextcloudサーバーにアクセスするためにはDDNSが必要になります。

No-IPでDDNSを取得し、UbuntuにDDNSクライアント設定を済ませておきます。

これについても以前に記事で紹介しておりますので、リンクを貼っておきます↓

hostnameの設定

取得したDDNSとNextcloudサーバーを紐づけするために、ホストの設定を行います。

$ sudo vi /etc/hosts

[端末IPアドレス] [DDNS] [ホスト名]を追記します。

127.0.0.1       localhost
127.0.1.1      [ホスト名]
[端末IPアドレス] [DDNS] [ホスト名]

〜省略〜

設定したらホストネームに対して疎通確認をしてみます。

$ ping $(hostname) -c 5
PING [DDNS名] (IPアドレス) 56(84) バイトのデータ
64 バイト応答 送信元 [DDNS名] (IPアドレス): icmp_seq=1 ttl=64 時間=0.076ミリ秒
64 バイト応答 送信元 [DDNS名] (IPアドレス): icmp_seq=2 ttl=64 時間=0.074ミリ秒
64 バイト応答 送信元 [DDNS名] (IPアドレス): icmp_seq=3 ttl=64 時間=0.086ミリ秒
64 バイト応答 送信元 [DDNS名] (IPアドレス): icmp_seq=4 ttl=64 時間=0.089ミリ秒
64 バイト応答 送信元 [DDNS名] (IPアドレス): icmp_seq=5 ttl=64 時間=0.075ミリ秒

--- [DDNS名] ping 統計 ---
送信パケット数 5, 受信パケット数 5, パケット損失 0%, 時間 4089ミリ秒
rtt 最小/平均/最大/mdev = 0.074/0.080/0.089/0.006ミリ秒

問題なく設定できてるみたいです。

                 

Nextcloudのインストール

続いてNextcloudをインストールしていきます。

通常のコマンドインストールとsnapコマンドでのインストールができるみたいですが、今回は手順が簡単なsnapコマンドでのインストールをしました。

こちらの記事を見るとsnapコマンドでインストールしたNextcloudは細かい制約があるみたいですが、個人で運用していく分には問題なさそうです。

もしも、使っていって気になる部分があれば通常コマンドでインストールして構築し直そうと思います。

インストール

snapコマンドでインストールします。

$ sudo snap install nextcloud
nextcloud 20.0.7snap1 from Nextcloud? installed

これだけでインストールは完了です。とってもお手軽。

http://localhostにアクセスしてみると、Nextcloudにアクセスできます。

snap changesで変更履歴が見れます。

$ sudo snap changes nextcloud
ID   Status  Spawn               Ready               Summary
4    Done    today at 11:48 JST  today at 11:49 JST  Install "nextcloud" snap

インストール直後はインストールしたという履歴のみが表示されます。 Status:Done、Summary:Install “nextcloud” snapは問題なくインストールが完了したという意味です。

                 

管理者アカウントの設定

Nextcloudの管理者アカウントを作成します。

$ sudo nextcloud.manual-install [管理者アカウント] [パスワード]
Nextcloud was successfully installed

信頼できるドメインの設定

Nextcloudは”信頼できるドメイン”以外からのアクセスは受け付けないようになっています。
(htmlは反応するが、ログインページが表示されないようになる) 信頼できるドメインを設定して、アクセスを受け付ける範囲を設定します。

現在の設定を確認

$ sudo nextcloud.occ config:system:get trusted_domains
localhost

現在はローカルホストのみが信頼できるドメインとなっています。

以下のコマンドで信頼できるドメインを追加します。

$ sudo nextcloud.occ config:system:set trusted_domains 1 --value=[DDNS名]
System config value trusted_domains => 1 set to string [DDNS名]
$ sudo nextcloud.occ config:system:set trusted_domains 2 --value=IPアドレス
System config value trusted_domains => 2 set to string IPアドレス

trusted_domainsのあとの数字は信頼できるドメインの設定リストの順番を表しています。

今回は、DDNS名とIPアドレスの2つを信頼できるドメインに追加したので、trusted_domains 1、trusted_domains 2として追加しています。

設定を再確認

$ sudo nextcloud.occ config:system:get trusted_domains
localhost
[DDNS名]
IPアドレス

DDNS名とIPアドレスが追加されていることが確認できました。

                 

ファイアウォール設定

ウルトラファイアウォールを使ってサーバーへのアクセス制御を行います。

$ sudo ufw allow 22,80,443,3389/tcp
ルールをアップデートしました
ルールをアップデートしました(v6)

Let’s EncryptでSSL/TLS証明書を取得する予定なので、80,443のTCPポートを追加します。

22はssh接続のため、3389はrdpのために追加します。

ポート22の追加を忘れると、遠隔からsshで操作することができなくなるので注意します。

$ sudo ufw status 
状態: 非アクティブ

ウルトラファイアウォールが非アクティブだったので有効にします。

$ sudo ufw enable 
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
ファイアウォールはアクティブかつシステムの起動時に有効化されます。

↑ssh接続中だったので、上記の確認が表示されました。yを選択します。

$ sudo ufw status 
状態: アクティブ

To                         Action      From
--                         ------      ----
22,80,443,3389/tcp         ALLOW       Anywhere                  
22,80,443,3389/tcp (v6)    ALLOW       Anywhere (v6)             

必要なポートのみ許可されていることを確認します。

ポート開放

ルーター側での作業です。

私の環境で使用しているASUS RT-AX56Uの場合、ログイン⇒WAN⇒ポートフォワーディングと進み、ポートフォワーディングを有効にします。

ポートフォワーディングリストにNextcloudをインストールしたサーバーを追加します。

TCPポート80,443を開放します。

 

                 

https対応

httpsでアクセスできるようにします。

sudo nextcloud.enable-https lets-encrypt
In order for Let's Encrypt to verify that you actually own the
domain(s) for which you're requesting a certificate, there are a
number of requirements of which you need to be aware:

1. In order to register with the Let's Encrypt ACME server, you must
   agree to the currently-in-effect Subscriber Agreement located
   here:

       https://letsencrypt.org/repository/

   By continuing to use this tool you agree to these terms. Please
   cancel now if otherwise.

2. You must have the domain name(s) for which you want certificates
   pointing at the external IP address of this machine.

3. Both ports 80 and 443 on the external IP address of this machine
   must point to this machine (e.g. port forwarding might need to be
   setup on your router).

Have you met these requirements? (y/n) y
Please enter an email address (for urgent notices or key recovery): [メールアドレス]
Please enter your domain name(s) (space-separated): [DDNS名]
Attempting to obtain certificates... done
Restarting apache... done

完了したら、DDNS名でアクセスしてみます。

httpsでアクセスできるようになりました。

                 

データロケーションの設定

データの保存場所の変更です。

Nextcloudサーバーとして使っているパソコンのストレージ構成は、OSのためのSSD32GB+データ保存用のHDD250GBという構成です。

デフォルトの保存場所では32GBのSSDが保存場所になっているので、これをHDD250GBの方に変更します。

こちらのフォーラムを参考に作業しました。
https://askubuntu.com/questions/882625/nextcloud-snap-with-data-directory-on-external-harddrive

リムーバブルメディアを接続する

$ sudo snap connect nextcloud:removable-media

Nextcloudが接続したメディアにアクセスできるようにする

$sudo mkdir -p /media/nextcloud/data
$sudo chmod -R 770

datadirectoryを変更します。

念の為、設定ファイルのバックアップを取っておきます。

$ sudo cp -p /var/snap/nextcloud/current/nextcloud/config/config.php /var/snap/nextcloud/current/nextcloud/config/config.php.old

データロケーションを変更します。

$ sudo vi /var/snap/nextcloud/current/nextcloud/config/config.php
変更前:'datadirectory' => '/var/snap/nextcloud/common/nextcloud/data',

変更後:'datadirectory' => '/media/nextcloud/data',

検証していませんが、snapで管理されたNextcloudは、ディレクトリ名がmediaでないといけないっぽい?

データのコピー

$ sudo cp -Rp /var/snap/nextcloud/common/nextcloud/data /media/nextcloud/

元のデータディレクトリにあるファイルは一応残しておきました。

設定を有効にする

$ sudo snap enable nextcloud
nextcloud enabled

WEB画面からアクセスし、ストレージを確認してみたところ、ちゃんとHDD250GBのほうに変更できていることが確認できました。

                 

スマホからアプリからアクセスしてみる

手持ちのAndroidスマホにアプリをインストールして、構築したサーバーに接続してみます。

アプリダウンロード

GooglePLAYからアプリをダウンロードし、インストールします。

https://play.google.com/store/apps/details?id=com.nextcloud.client

初期設定

アプリをインストールしたらアプリを起動します。

ログインをタップします。

サーバーアドレスにDDNS名を入力し、矢印(→)をタップします。

ログインをタップします。

ユーザー名とパスワードを入力しログインをタップします。
この時点では管理者しかユーザーを作成していないので、管理者アカウントでログインしました。

Nextcloudがスマホのストレージにアクセスできる許可をします。

クラウドストレージにアクセスできました。

サーバー構築~接続までが完了しました。

実際にファイルのアップロード/ダウンロードをしてみましたが、問題なく使用できて結構満足です。

とりあえず構築はできたので、サーバーのセキュリティ対策を実施して本格的に使っていこうと思います。

なので、いまはサーバーのポートフォワーディングはOFFにして、DDNSで接続できないようにしてます。

 

コメント

タイトルとURLをコピーしました