NextcloudというOSSを使ってセルフクラウドストレージを構築してみました。
Nextcloudってなに?という方はWikipediaを参照するとわかるかもしれません。
Nextcloudは、オンラインストレージの作成と使用のためのクライアント・サーバ型のソフトウェアである。機能的にはDropboxに似ているが、オフプレミスのオンラインストレージサービスは提供しない。Nextcloudはフリーかつオープンソースなので、誰でも自分のプライベートサーバにインストールして利用することができる。
クラウドストレージと言いつつ自宅のストレージにデータを保存するので、「それってクラウドストレージじゃなくね?」というツッコミはあると思います。
AWSとかAzure上に構築すれば正真正銘クラウドストレージですが、クラウドストレージっぽく使えるという意味でクラウドストレージとしてここでは呼びます(強引)
Googleフォトの無料無制限アップロードサービスが今年中に終了してしまうこともあり、「代替となるモノがあればやってみよう」というモチベーションでやってみました。
構築環境
- Ubuntu 20.04.1 LTS
- 使用PC:自作(Acer Aspire XC-603をベースにしたもの)
UbuntuのIP固定
パソコンをNextcloudサーバーとして使うので、プライベートIPを固定しておきます。
設定方法は以前の記事の通り↓
DDNSの取得
私の自宅の回線はグローバルIPが固定されていません。
そのため、インターネットから自宅のNextcloudサーバーにアクセスするためにはDDNSが必要になります。
No-IPでDDNSを取得し、UbuntuにDDNSクライアント設定を済ませておきます。
これについても以前に記事で紹介しておりますので、リンクを貼っておきます↓
hostnameの設定
取得したDDNSとNextcloudサーバーを紐づけするために、ホストの設定を行います。
1 |
$ sudo vi /etc/hosts |
[端末IPアドレス] [DDNS] [ホスト名]を追記します。
1 2 3 4 5 |
127.0.0.1 localhost 127.0.1.1 [ホスト名] [端末IPアドレス] [DDNS] [ホスト名] 〜省略〜 |
設定したらホストネームに対して疎通確認をしてみます。
1 2 3 4 5 6 7 8 9 10 11 |
$ 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コマンドでインストールします。
1 2 |
$ sudo snap install nextcloud nextcloud 20.0.7snap1 from Nextcloud? installed |
これだけでインストールは完了です。とってもお手軽。
http://localhostにアクセスしてみると、Nextcloudにアクセスできます。
snap changesで変更履歴が見れます。
1 2 3 |
$ 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の管理者アカウントを作成します。
1 2 |
$ sudo nextcloud.manual-install [管理者アカウント] [パスワード] Nextcloud was successfully installed |
信頼できるドメインの設定
Nextcloudは”信頼できるドメイン”以外からのアクセスは受け付けないようになっています。
(htmlは反応するが、ログインページが表示されないようになる) 信頼できるドメインを設定して、アクセスを受け付ける範囲を設定します。
現在の設定を確認
1 2 |
$ sudo nextcloud.occ config:system:get trusted_domains localhost |
現在はローカルホストのみが信頼できるドメインとなっています。
以下のコマンドで信頼できるドメインを追加します。
1 2 3 4 |
$ 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として追加しています。
設定を再確認
1 2 3 4 |
$ sudo nextcloud.occ config:system:get trusted_domains localhost [DDNS名] IPアドレス |
DDNS名とIPアドレスが追加されていることが確認できました。
ファイアウォール設定
ウルトラファイアウォールを使ってサーバーへのアクセス制御を行います。
1 2 3 |
$ sudo ufw allow 22,80,443,3389/tcp ルールをアップデートしました ルールをアップデートしました(v6) |
Let’s EncryptでSSL/TLS証明書を取得する予定なので、80,443のTCPポートを追加します。
22はssh接続のため、3389はrdpのために追加します。
ポート22の追加を忘れると、遠隔からsshで操作することができなくなるので注意します。
1 2 |
$ sudo ufw status 状態: 非アクティブ |
ウルトラファイアウォールが非アクティブだったので有効にします。
1 2 3 |
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y ファイアウォールはアクティブかつシステムの起動時に有効化されます。 |
↑ssh接続中だったので、上記の確認が表示されました。yを選択します。
1 2 3 4 5 6 7 |
$ 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をインストールしたサーバーを追加します。
https対応
httpsでアクセスできるようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
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
リムーバブルメディアを接続する
1 |
$ sudo snap connect nextcloud:removable-media |
Nextcloudが接続したメディアにアクセスできるようにする
1 2 |
$sudo mkdir -p /media/nextcloud/data $sudo chmod -R 770 |
datadirectoryを変更します。
念の為、設定ファイルのバックアップを取っておきます。
1 |
$ sudo cp -p /var/snap/nextcloud/current/nextcloud/config/config.php /var/snap/nextcloud/current/nextcloud/config/config.php.old |
データロケーションを変更します。
1 |
$ sudo vi /var/snap/nextcloud/current/nextcloud/config/config.php |
1 2 3 |
変更前:'datadirectory' => '/var/snap/nextcloud/common/nextcloud/data', 変更後:'datadirectory' => '/media/nextcloud/data', |
検証していませんが、snapで管理されたNextcloudは、ディレクトリ名がmediaでないといけないっぽい?
データのコピー
1 |
$ sudo cp -Rp /var/snap/nextcloud/common/nextcloud/data /media/nextcloud/ |
元のデータディレクトリにあるファイルは一応残しておきました。
設定を有効にする
1 2 |
$ 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で接続できないようにしてます。
コメント