FJcloud実践
開発者向けFJcloud-Vスタートアップガイド~Nextcloud構築編~
こんにちは。日本仮想化技術株式会社の水野です。
今回は、Nextcloudサーバーの構築と使い方を解説します。
目次
Nextcloudとは
Nextcloudとは、オープンソースの生産性プラットフォームの名前です。もう少し簡単に説明すると「セルフホストできるDropboxのようなファイル共有サービス」です。
DropboxやOneDriveを使った経験があれば、それを自宅や組織内で独自運用できるのが、どれほど便利かは想像できるのではないでしょうか。家庭内ではもちろん、セキュリティポリシーなどの理由によってクラウドサービスを利用できない企業においても、あると非常に便利なサービスのひとつです。
技術的なトレーニングというのは、しっかりと手を動かすことが大切です。そして教科書的な内容よりも、現実に即した実用的なものをテーマにした方が、モチベーションも沸くというものです。そういう意味で、インフラの基礎が詰まっており、日常生活においても便利に使えるNextcloudサーバーは、丁度いいお題だと筆者は考えています。
どうしてセルフホストするのか
「いつも運用コストの話してるじゃん。なんでわざわざIaaSでセルフホストするの? (Google Drive/Dropbox/OneDriveなど)の方が楽でいいじゃん」
そう考える人も多いでしょう。たしかに、SaaSで間に合うのであれば、それに越したことはありません。日本政府も「クラウド・バイ・デフォルト原則」において「まず最初にSaaSの利用を検討しろ」と言っています。ではなぜコストをかけてまでセルフホストするのか。それは「データの生殺与奪の権を他人に握らせるな」という一点に他なりません。
SaaSは手軽な反面、重要なデータを第三者に預けなければなりません。またある日突然「プラン内容が変更される」「身に覚えのない理由でアカウントがロックされる」といった可能性もあります。SNSを見ていると、たまにこうした阿鼻叫喚が聞こえてきますよね。これは第三者のサービスを利用する上で、避けられないリスクのひとつです。リスクとコストを天秤にかけた上で、「敢えて手軽なSaaSを避ける」というのもひとつの選択なのではないでしょうか。
もちろんIaaSもクラウドサービスである以上、こうしたリスクは存在します。ですが自分で自由にインフラを構成できるため、設計次第でリスクを回避することも可能です。実際に筆者は、とりあえずネット上で共有できればいいデータはGoogle DriveやOneDriveを使っていますが、プライベートで重要なデータは、自前のNextcloudサーバーですべて管理するという使い分けをしています。
前提条件
本記事ではFJcloud-V上にNextcloudサーバーを構築して、インターネット越しにファイル共有ができることを目指します。そしてSSL証明書を取得する都合上、以下の前提で話を進めます。
- ドメインを所持していること
- サーバーのIPアドレスに対してAレコードを登録できること
FJcloud-VでUbuntuサーバーを構築する
Nextcloudは、Webサーバー、PHP、データベースサーバー、キャッシュサーバーなど、数多くのコンポーネントで構成されています。そのためインストール作業は非常に複雑で面倒なのですが、Snapパッケージを使えば、これを非常に簡単に行えます。Snapパッケージを使いたいため、サーバーOSはUbuntuを選ぶのがオススメです。
サーバー作成ときには、専用のファイアウォールグループを新規作成します。そこで、作業用にSSHポートのみを解放しましょう。この際、IPアドレスは接続しているアドレスのみに絞ると安全です。なおこの時点では、まだHTTP/HTTPSをパブリックに対して解放しないでください。
ネットワークは、グローバルIPアドレスを「自動割り当て」にしてください。こうすると、範囲内からランダムなIPアドレスが自動的に割り当てられるのですが、このアドレスはサーバーを削除するまで変化しません。そのため固定のIPアドレスとして運用することが可能です。
サーバーが起動したら、割り当てられたグローバルIPアドレスを確認しましょう。Nextcloudで使いたいサブドメインを決め、名前解決できるよう、お使いのDNSサーバーにレコードを登録してください。
Nextcloudのインストールと初期設定
DNSの設定が完了したら、以下のコマンドでサーバーにSSH接続しましょう。FJcloud-Vではデフォルトで、Ubuntuであってもrootユーザーでログインする点に注意してください。
$ ssh -l root NextcloudサーバーのFQDN
NextcloudのSnapパッケージをインストールします。以下のコマンドを実行してください。これだけでNextcloudがインストールされ動き始めます。
# snap install nextcloud
続いてコマンドラインから管理者ユーザーを作成します。
# nextcloud.manual-install ユーザー名 パスワード
Nextcloudへのアクセスに使用するドメインを設定します。こうすることで、IPアドレス直打ちでの(不正な)アクセスをブロックできます。
# nextcloud.occ config:system:set trusted_domains 1 --value=NextcloudサーバーのFQDN
IP直打ちでアクセスするとこうなる。インターネット上に公開しているサーバーには不正アクセスが山ほどやってくるため、「正しいドメイン名を知らなければログイン画面に到達できない」というのは地味ながら非常に有効。
ここまでの設定が完了したら、FJcloud-Vのコントロールパネルから、ファイアウォールにルールを追加しましょう。HTTP/HTTPSをANYに対して解放してください。
INルールを追加した状態。
なぜファイアウォール作成の段階でルールを追加しないかと言うと、Nextcloudサーバーのハイジャックを防ぐためです。Snapパッケージをインストールした段階でNextcloudは動き始め、管理者ユーザー作成用のWeb画面が表示されてしまいます。この画面はパスワードなどで保護されていないため、最初からファイアウォールを解放した状態だと、第三者にインストール中のNextcloudを乗っ取られてしまう可能性があるのです。そのため管理者ユーザーの作成が完了するまでは、インターネットに対してWebサーバーを見せてはいけません(もちろんIPアドレスを制限してポートを開く分には構いませんが、ファイアウォールの設定が二度手間になるため、本記事ではコマンドラインを使用しました)。
ファイアウォールの設定が完了したら、再びSSHに戻ります。以下のコマンドでSSL証明書を取得してください。証明書取得のための注意を読んだ上で、メールアドレスとNextcloudのFQDNを入力してください。
# nextcloud.enable-https lets-encrypt
(証明書取得に関わる注意書きが表示される。省略)
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): ←NextcloudのFQDNを入力
以上でセットアップは完了です。HTTPSでNextcloudにアクセスし、先ほど作成した管理者ユーザーでログインしてみましょう。
SSL/TLSの鍵マークもしっかりついてる。
Nextcloudクライアントを準備する
サーバーがインストールできたら、同期するクライアントを準備しましょう。ここからお使いのプラットフォームに合わせたクライアントをダウンロードして、インストールしてください。PCはWindows/Mac/Linuxに対応しており、スマートフォンはiOS/Androidに対応しています。一般的なユーザーが必要とするOSは、一通りカバーできていると言えるのではないでしょうか。
クライアントのインストール手順は、本記事の本題から外れてしまうため割愛します。詳しくはドキュメントを参照してみてください。
クライアントをインストールしてサーバーと接続すると、ホームフォルダ内のNextcloudフォルダが、自動的に同期される。
アプリを追加してNextcloudの機能を拡張する
Nextcloudは「ファイル共有サービス」ではなく「コラボレーションプラットフォーム」を名乗っています。つまりファイル共有以外の機能も、色々と用意されているわけです。その一部を紹介しましょう。
WebブラウザでNextcloudサーバーにログインしたら、右上のアイコンをクリックして「アプリ」を選択してください。ここからNextcloudに様々な機能をアドオンできます。
ミュージックプレイヤーアプリをアドオンすれば、ブラウザ上から共有フォルダ内の楽曲ファイルの管理や再生が可能。
他にもファイルのコンバーターやPDFビューアー、カレンダー、地図アプリ、ビデオ通話といったアプリが用意されています。Nextcloudをカスタマイズして、趣味から業務まで、様々なシーンで活用してみましょう。
Nextcloud Talkをサーバーにアドオンすれば、簡単にビデオ通話もできる。ゲストは招待リンクをブラウザで開くだけでよく、特別な準備は一切必要ない。