さくらのVPSでオンラインストレージを作ってみた

こんにちは。さくらインターネットの大喜多です。
この記事では、さくらのVPSをDropboxやGoogleドライブのようなオンラインストレージとして活用する方法をご紹介します。

※2020/07/15追記:本記事の公開後、2020/06/29のアップデートにより、手順が一部変更になりました。本記事も新しい手順に対応し加筆修正いたしました。

はじめに

Nextcloudをご存知でしょうか。Nextcloudは、Dropboxのようなオンラインストレージを自分で作ることができるOSS(オープンソースソフトウェア)です。Web経由でファイルの共有をおこなったり、PCにクライアントをインストールして、サーバーとファイルを同期させることができるものです。中小企業においてはファイルサーバーを構築する代わりにNextcloudを使っているケースが増えているそうです。

クラウドストレージの利用イメージ(1)Web経由でのファイル共有のイメージ

クラウドストレージの利用イメージ(2)クラウドとPCのファイル同期

一方、さくらのVPSは、専用サーバの自由度とクラウドの拡張性を合わせもつ、月額585円(税抜かつ記事執筆時点の価格)から使える仮想専用サーバサービスです。さくらのVPSではスタートアップスクリプトという機能を使って簡単にアプリケーションをセットアップして利用することができるようになっています。本記事ではスタートアップスクリプトを使ってさくらのVPSにNextcloudをインストールし、各種設定をしたうえで利用するところまで解説していきたいと思います。

Nextcloudのインストールはスタートアップスクリプトで

Nextcloudのインストールには、さくらのVPSの機能であるスタートアップスクリプトを利用します。

さくらのVPS コントロールパネルのVPS一覧で、使用するVPSの行をダブルクリックします。(ここで指定したVPSはOSのインストールが行われ、ストレージ内のデータがすべて消去されますのでご注意ください。既存のVPSを使用する場合は、必要なデータのバックアップを必ず取っておいてください)

各種設定→OSインストールをクリックします(この操作の前にVPSがシャットダウンされている必要があります)。

「OSインストール形式の選択」で[標準OS]を選択します。

[CentOS7 x86_64]を選択し、VPSにログインする際に必要になるパスワードを入力します。
※2020/07/15追記:2020/06/29のアップデートによりCentOS8にも対応しました。

スタートアップスクリプトの検索窓にnextcloudと入力すると(赤枠部分)、対象のスタートアップスクリプトが表示されます(青枠部分)。青枠部分をクリックします。

rootDBパスワード(DBにroot権限でアクセスするためのパスワード)、Nextcloud User名・Nextcloud パスワード(Nextcloudにログインするために使用するUser名とパスワード)を入力します。

スタートアップスクリプトを選択すると、パケットフィルタは自動で「使用しない」状態になります。代わりにサーバー上でFirewalldというファイアウォールが動作してセキュリティを確保しています。[設定内容を確認する]をクリックします。

内容に問題がなければ[インストールを実行する]をクリックします。

OSのインストールとスタートアップスクリプトの実行が開始されます。

通常は赤枠部分が[稼働中]になれば利用可能な状態になりますが、スタートアップスクリプトの実行に時間がかかるため、しばらく時間をおいてから次のステップに進みます。

Nextcloud環境に手を加える

スタートアップスクリプトでインストールしたNextcloudはすぐにでも利用可能な状態ですが、ここではよりセキュリティと信頼性を向上させるために手を加えます。

  • DBにMariaDBを使用する(データの信頼性向上)※2020/07/15追記:スタートアップスクリプトにて標準でMariaDBを使用するようになりましたのでこの手順は不要になりました
  • Let's EncryptによるHTTPS化(通信の暗号化)
  • trusted_domainsの編集(DNS設定したホスト名でアクセスするために必要)

標準ではインターネット上の経路を通る通信が暗号化されませんので、Let's Encryptという無料のSSL証明書を使用してHTTPSを使った通信の暗号化をおこないます。

Let's Encryptの設定、HTTPSの有効化

VPSにSSHでログインします。

以下のコマンドを入力し、Let's Encrypt SSL証明書の取得をおこないます。

なお、証明書の発行には有効なホスト名が必要で、ここではVPSのIPアドレスに対して「nextcloud.s.sacloud.jp」というホスト名で名前解決できるようDNSの設定をしているものとします(DNSの設定については本記事では説明を省略します)。

以下、本記事で「nextcloud.s.sacloud.jp」と表記されている箇所については、みなさんがDNSで設定したVPSのホスト名に読み替えてコマンドの実行やコンフィグの書き換えをおこなってください。

# curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
# chmod 700 /usr/bin/certbot-auto
# certbot-auto certonly --webroot -w /var/www/html/nextcloud -d nextcloud.s.sacloud.jp --email mail@example.com

/etc/httpd/conf.d/nextcloud.confを編集し、HTTPSの有効化と常時SSL化対応をおこないます。

# vi /etc/httpd/conf.d/nextcloud.conf
<VirtualHost *:80>
DocumentRoot /var/www/html/nextcloud/

    <Directory /var/www/html/nextcloud/>
        Require all granted
        AllowOverride All
        Options FollowSymLinks MultiViews
        <IfModule mod_dav.c>
            Dav off
        </IfModule>
    </Directory>
    ServerName nextcloud.s.sacloud.jp
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    </IfModule>
</VirtualHost>
<VirtualHost *:443>
DocumentRoot /var/www/html/nextcloud/
ServerName nextcloud.s.sacloud.jp:443
SSLCertificateFile /etc/letsencrypt/live/nextcloud.s.sacloud.jp/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/nextcloud.s.sacloud.jp/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/nextcloud.s.sacloud.jp/chain.pem

    <Directory /var/www/html/nextcloud/>
        Require all granted
        AllowOverride All
        Options FollowSymLinks MultiViews
        <IfModule mod_dav.c>
            Dav off
        </IfModule>
    </Directory>
</VirtualHost>

Firewalldの設定を変更し、HTTPS(TCP443番ポート)の通信を許可するようにします。

# firewall-cmd --add-service=https --zone=public --permanent
# firewall-cmd --reload

書き換えたコンフィグを反映させるために、Webサーバー(Apache)を再起動します。

# systemctl reload httpd

Let's Encryptの設定、HTTPSの有効化については以上です。

trusted_domainsの編集

DNS設定したホスト名でアクセスするために、/var/www/html/nextcloud/config/config.phpのtrusted_domainsセクションにFQDNを追加する必要があります。

以下のコマンドを入力し、config.phpを編集します。

#CentOS7の場合
# sudo -u apache php74 /var/www/html/nextcloud/occ config:system:set trusted_domains 3 --value=nextcloud.s.sacloud.jp
#CentOS8の場合
# sudo -u apache php /var/www/html/nextcloud/occ config:system:set trusted_domains 3 --value=nextcloud.s.sacloud.jp

このコマンドを実行すると以下のように表示されます。以下のように表示されれば追加は成功しています。

System config value trusted_domains => 3 set to string nextcloud.s.sacloud.jp

この作業においてhttpdのリスタートなどは必要ありません(設定はコマンド実行後に即時で反映されます)。

Nextcloudサーバーのセットアップ

https://nextcloud.s.sacloud.jp/にアクセスします。スタートアップスクリプト実行時に入力したNextcloud User名・Nextcloud パスワード(Nextcloudにログインするために使用するUser名とパスワード)を入力してログインします。

セットアップが完了すると、以下のようなWeb画面が表示されます。一人で利用するのであればこのまま利用することが可能です。

管理者アカウントをtestuserという名前で作成しましたが、もうひとりユーザーを追加してみたいと思います。右上の歯車アイコンをクリックし、表示される左メニューの「新しいユーザー」をクリックします。以下のようなフォームが表示されますので、任意の情報を入力してユーザーを作成します。ここでは例としてm-kawashimaという名前のユーザーを作成しています。

新しいユーザーを作成すると以下のように表示されます。

Nextcloudクライアントのインストールとセットアップ

ここまででWebブラウザを使ったファイルの共有はできるようになりました。ここからは、自分のPCにNextcloudクライアントソフトをインストールして、クラウドとPC間でファイルの同期をおこなえるようにしていきます。

NextcloudのWebサイトにアクセスし、[Get Nextcloud]をクリックします。

[Download for desktop]をクリックします。

OSごとにパッケージが異なりますので選択します。本記事ではWindows版をインストールしていきます。

インストーラー上で特に変更が必要な箇所はありません。[次へ]をクリックして先に進みます。

以下のように表示されたらインストールは完了です。[完了]をクリックします。

Nextcloudクライアントとサーバーを接続する設定をおこないます。[ログイン]をクリックします。

サーバーアドレスにhttps://nextcloud.s.sacloud.jp/nextcloud/と入力します。ここでもnextcloud.s.sacloud.jpの部分は自分で設定したホスト名に置き換えて入力してください。

Webブラウザが起動しログインを求められます。Nextcloudのユーザーでログインします。

以下のように表示されたらWebブラウザでの操作は完了です。クライアントの設定画面に戻ります。

[接続]をクリックします。

クライアントで以下のように表示されれば、クラウドとPCの間でファイルが同期されるようになります。クライアントは複数のPCにインストールして同期することができるので、複数のPCを使って作業をされている方にはとても便利です。

まとめ

いかがでしたでしょうか。途中少し難しいところもあったかと思いますが、特にVPSは価格あたりのディスク容量が多いのでNextcloudに適していると思います。複数のPCで作業をしているとファイルを共有できることがすごく便利に感じます。みなさんも是非試してみてください。