Nextcloudを使う

2018年10月18日

去年さくらのレンタルサーバーを再契約した際に、サーバーの有効活用ということでNextcloudをインストールして10ヶ月ほど運用してみました。ほぼDropboxの代替になり得るということで、この度あらたにVPSを用意してクラウドストレージサーバーを建てました。

お名前VPS上のFreeBSD上にインストールする

くどいようですがLinuxサーバーはよくわからない。ので、一旦Time4VPSでの運用は諦めて、お名前VPSを借りてみました。

今回FreeBSDはisoファイルをアップロードして、カスタムOSとしてインストールしたので多少内容は違いますが、OSの設定まわりはVultrでFreeBSDサーバーを立ち上げるの内容と同じ。

ただしphpまわりだけはNextcloudの手順書のPrerequisites for manual installationに従ってインストールしました。

# pkg install php72 php72-mysqli php72-pdo_mysql php72-xml php72-gd php72-curl php72-zlib php72-zip php72-hash php72-tokenizer php72-extensions php72-mbstring php72-openssl php72-fileinfo php72-bz2 php72-intl php72-pecl-mcrypt

インストールしたモジュールはRequiredとRecomendedのものです。php7.1とは少し名前などが違っています。

Webサーバの設定 – Nginxの場合

同じサーバー上でWordPressも動かすので、Nginxの設定はNextcloudの手順書のNginx configurationをベースに次のようにしました。

upstream php-handler {
  server unix:/var/run/php-fpm.sock;
}
server {
  listen 80;
  server_name  .my-web-site.com;
  include access_deny.conf;
  return 301 https://www.my-web-site.com$request_uri;
}
server {
  listen       443 ssl http2;
  server_name  my-web-site.com;
  ssl_certificate         /usr/local/etc/letsencrypt/live/www.my-web-site.com/fullchain.pem;
  ssl_certificate_key     /usr/local/etc/letsencrypt/live/www.my-web-site.com/privkey.pem;
  include access_deny.conf;
  return 301 https://www.my-web-site.com$request_uri;
}
server {
  listen 443 ssl http2;
  server_name  www.my-web-site.com;
〜中略〜
  location = /.well-known/caldav {
    return 301 $scheme://$host/nextcloud/remote.php/dav;
  }
  # WordPress blog settings start
  location = /blog/wp-config.php { deny all; }
  location = /blog/xmlrpc.php { deny all; }
  location / {
    try_files $uri $uri/ =404;
  }
  location /blog/ {
    auth_basic "Restricted";
    auth_basic_user_file /home/my-directory/.htpasswd;
  }
  # WordPress blog settings end
  location /.well-known/acme-challenge { }
〜中略〜
  location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
    try_files $uri /nextcloud/index.php$request_uri;
    # Optional: Don't log access to other assets
    access_log off;
  }
}
# WordPress blog settings start
location ~ \.php$ {
  try_files $uri =404;
  fastcgi_split_path_info ^(.+\.php)(/.+)$;
  fastcgi_pass unix:/var/run/php-fpm.sock;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  # fastcgi_param SCRIPT_FILENAME $request_filename;
  include fastcgi_params;
}
# WordPress blog settings end

ほぼサンプル通りなんですが、適当なところにWordPress用の設定を差し込んであります。upstream設定とhttps用のリダイレクト設定も多少変えてあります。

Webサーバの設定 – Apacheの場合

Apacheの方はもっと簡単。例えばLet’s Encryptで設定したexample.com.confに対して、対象の<VirtualHost>ディレクティブ内に<Directory>ディレクティブを追記するだけ。

<virtualhost *:443="">
  DocumentRoot /var/www/html/example
  ServerName example.com
  ServerAlias www.example.com
〜中略〜
  <directory "="" var="" www="" html="" example"="">
    Require all granted
    AllowOverride All
    Options FollowSymLinks MultiViews
  </directory>
</virtualhost>

サブディレクトリ運用する場合は、Nextcloudのトラブルシューティングに従って、ドキュメントルートに以下のような.htaccessファイルを置いておきます。

RewriteEngine On
RewriteRule ^\.well-known/host-meta /nextcloud/public.php?service=host-meta [QSA,L]
RewriteRule ^\.well-known/host-meta\.json /nextcloud/public.php?service=host-meta-json [QSA,L]
RewriteRule ^\.well-known/webfinger /nextcloud/public.php?service=webfinger [QSA,L]
RewriteRule ^\.well-known/carddav /nextcloud/remote.php/dav/ [R=301,L]
RewriteRule ^\.well-known/caldav /nextcloud/remote.php/dav/ [R=301,L]

データベースの設定とNextcloudインストール

MySQLにはあらかじめデータベースと接続ユーザーを作成しておきます。

CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'p@ssw0rd';
CREATE DATABASE NEXTCLOUD;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;

これでドキュメントルート下に配置したNextcloudのインストーラーにブラウザでアクセスすればインストールが始まります。

Nextcloud初期設定

Nextcloudが使用するデフォルトのデータベースはSQLiteなので、アカウント入力欄の下にあるStorage & database ▼をクリックしてMySQL/MariaDBを選択後、必要な情報を入力しましょう。

ちなみに最初に作ったアカウントが管理者アカウントになるので、testとか適当なユーザー名にしないようにしましょう。

Nextcloud状態表示

管理者でログインして設定メニューのAdministration / Overviewを開くと色々なアドバイスが表示されるので、その内容に従って設定をいじるといい感じになります。

共用ファイルサーバーとして使う

最も一般的な使い方です。デスクトップクライアントはMacもWindowsもほとんどDropboxと同じ動き。

サーバー上のファイルのコピーをローカルに持っているので、オフラインでも閲覧や編集ができて、オンラインになったら自動的に同期が始まります。

iOSやAndroidなどのモバイル版は基本的にローカルコピーを持たないので、残り容量を心配することなく運用できます。(いちおうキャッシュはされている)

Dropbox時代から変わらず使い続けているKeePassというパスワード管理ソフトでデータを共有していると、全ての端末でひとつのパスワードファイルを共有できるので、大変便利です。

カレンダーサーバーとして使う

長らく便利に利用させてもらっていた各種クラウドサービスですが、最近は少しづつデータを引き上げつつあります。

上記ファイルサーバーはその最たるものですが、カレンダーもここ3年ほどiCloud上に置いていたものを引き上げることにします。ひとつにはiPhoneからAndroidに乗り換えたというのがあります。これまではiOSデバイスとMac間でのデータ共有にはiCloudが最適解でしたが、これからはそうではない。

ファイルサーバー同様、カレンダーやタスクなどのマスターデータをプライベートサーバーに置いて、MacやAndroidからそれらを閲覧したり編集したりします。

MacならSystem PreferencesのUser Account、iOSならSettingsのPasswords & Accounts、AndroidならSettingsのAccounts and SyncにNextcloudのアカウントを登録すると、それぞれのデバイスからデータの登録や編集、閲覧ができるようになります。

データはサーバーで一元管理されるので、デバイスを変更しても大丈夫。

ビデオ通話もできる

ひとつ前のバージョン13から搭載された新機能。とはいえFacebook messengerやLineなど、代わりはいくらでもあるのだけれど。

これらについても一企業にロックインされるのが嫌だなと思ったとき、選択肢があるというのはよいことです。プライベートSNSとして使えますよ。

こんな感じでいよいよ本格的にNextcloudを活用していこうかなというところで、一旦作業内容をまとめてみました。