自宅サーバーにNextcloudを導入し、オンラインストレージを構築する

経緯

最近、LINEのノートへの動画投稿機能が廃止された。課金することでアルバムに動画を掲載することはできるが、実質の有料化である。また、かねてより筆者のデジタル一眼レフカメラの写真は、稀にLINEの容量の制限を超過してしまうので、全てを最高画質で共有することはできなかった。そこで今回、自宅サーバーを構築したことを利用し、自宅のNextcloudを通し写真や動画の共有を図ることとした。あとはまあ勢いとノリで作ってみたくなったから。

準備:ブログの移転

今回、自宅サーバーではすでにブログが稼働していることから、それをサブディレクトリのように見せかけて運用することとし、新たにNextcloudもサブディレクトリのように見せかけて運用することとした。そのため、まずVPS側のnginx.confを以下のように変更した。

server{
   listen 80;
   (中略)
   location / {
     return 301 https://$host$request_uri; #redirect to HTTPS
   }
}

server{
   listen 80 default_server;
   return 444;
   }
server{
   listen 443 default_server ssl;
   (中略)
   add_header Strict-Transport-Security 'max-age=15552000; includeSubDomains; preload';
   if ($host = [IPアドレス]){
        return 444;
   }
   if ($host = [VPSでデフォルトで付与されるドメイン名]){
        return 444;
   } 
   client_max_body_size 10G;
  (中略)
   location /blog/ {
     proxy_pass https://[自宅サーバーのローカルIP];
    }
   location /ago/ {
     proxy_pass http://[自宅サーバーのローカルIP]:[開けたポート]/;
    }
   location / {
        root /var/www/html;
        index index.html;
    }

}

まず、HTTPでのアクセスは余程のことがない限り不要と思われるので、certbot関連を除き全てHTTPSにリダイレクトすることとした。

次に、VPSでデフォルトで付与されるドメイン名でのアクセスも、機械的なアクセス試行の餌食になると考えたので、ついでにブロックした。

また、Nextcloudのセキュリティ設定で怒られるので、Strict-Transport-Securityの設定を追加した。

ファイルのアップロードを行うため、client_max_body_sizeを10Gとした。これにより、1ファイル10GBまでアップロードできるようになったはずである。

そして今回の肝が、locationディレクティブによる送信先の振り分けである。今回は、Nextcloudをagoというフォルダにインストールした。また自宅サーバーではすでにこのブログ用に80番ポートが空いているので、別のポートを開けることとした。そして、VPSと自宅サーバーとの間は仮想専用線状態であるので、今回はhttp通信を許容した。これにより構築が少し楽になった。

そして今回、Nextcloudを立てることにより自宅サーバーに複数のサービスが載ることとなったので、簡易的なトップページも作成した。こちらはアクセスいただければ中身はわかる。

次に、Wordpress側の設定を変更した。Wordpressはデフォルトではサーバールートに置かれていると自身を認識するので、そのまま運用しようとすると不具合が生じる。そこで、永続化してあるwp-config.phpの冒頭(正確には、add any custom valuesと書いてある次あたり)に、以下を加筆した。

if (isset($_SERVER['HTTP_X_FORWARDED_HOST']) && $_SERVER['HTTP_X_FORWARDED_HOST'] === 'www.kbyk-sun.com') {
    $_SERVER['HTTP_HOST'] = 'www.kbyk-sun.com/blog';
    $_SERVER['SERVER_NAME'] = 'www.kbyk-sun.com/blog';
}

これは、ホスト名にブログを置いている(設定になっている)サブフォルダを追加する指示である。これにより、管理画面のほとんどがスムーズに動くようになる。ただし、一部の設定変更については、/blog/フォルダが無効になってしまい、404エラーが発生する。この場合も、アドレスバーを手打ちで直せば設定変更は機能する。しょっちゅういじる設定項目ではないので、とりあえずそのままとしている。

余談ながら、Nextcloudのフォルダ名は、シーシャ屋で左隣に座っていた友人に考えてもらった。筆者の身体的特徴に由来する。

Nextcloudの設置

今回も安定のDocker composeで構築した。今回のdocker-compose.ymlは以下。

version: '3.8'

services:
    st-db:
        image: mariadb
        restart: always
        volumes: 
          - [DBのフォルダのパス]:/var/lib/mysql
        environment:
          - MYSQL_ROOT_PASSWORD=${ENV_MYSQL_ROOT_PASSWORD}
          - MYSQL_PASSWORD=${ENV_MYSQL_PASSWORD}
          - MYSQL_DATABASE=[シーシャ屋で左隣にいる友人に考えてもらったデータベース名]
          - MYSQL_USER=[右隣にいる友人に考えてもらったユーザー名]

    st-app:
        image: nextcloud
        ports:
          - "[開けるポート]:80"
        links:
          - st-db
        volumes:
          - [データフォルダのパス]:/var/www/html
        restart: always

ここでポイントは、このdocker-compose.ymlは5TBの外付けドライブ内に作ったフォルダに置くことである。大容量ディスクでなければわざわざ手間をかけて自宅サーバーに構築する意義はない(そもそも別にGoogle DriveとかiCloudに課金した方が早いとか言わないこと)。また、本blogとは別のmariadbを改めて立てることで、相互に依存しないようにして、将来の構成変更時に苦労しないようにした。また本ブログと被らないようにポート番号をうまいこと設定する必要があった。データベースのパスワードは今回は環境変数で管理する。

続いて、Nextcloudもサブフォルダで運用するために、Nextcloud自体にサブフォルダであることを認識させる必要がある。コンテナを一度立ち上げた後数分待つと、data/config/config.php が生成されているので、その冒頭の$CONFIG内に以下を追記する。

  'overwriteprotocol' => 'https',
  'overwritehost' => 'www.kbyk-sun.com',
  'overwritewebroot' => '/ago',
  'trusted_proxies' => ['192.168.0.1'],
  'default_timezone' => 'Asia/Tokyo',

信用するプロキシはVPSのローカルIP(192.168.0.1)のみとし、webrootを上書きする。ついでにタイムゾーンも設定しておく。

このあと、ディレクトリにアクセスし、画面の指示に従ってさきほど設定したデータベースのユーザー名やパスワードなどを入力、管理者アカウントを設定することで、晴れてNextcloudを運用開始することができた。

おわりに

Nextcloud自体はすごく簡単に設置することができたのだが、今回はサブディレクトリ運用を志したため、その設定に時間がかかってしまい、写真共有に出遅れてしまった(約6時間ぐらいかかってしまった)。とはいえ一度完成したものなので、今後は構築したサーバーを積極的に活用していきたい。実際のところ、お名前.comで適当なサブドメインにもDNSの設定をして、ifの$hostで振り分けた方が、WPやNextcloud側での設定が要らなくて楽だったのではないだろうか。ただ今更変えるのもめんどくさいのでそのままで。

今後、ユーザー間写真共有だけでなく、実家と現在の住処間でのデータ共有にも個人的に活用していきたい所存である。また大容量ドライブなので、管理人として筆者がデータの中身を確認する場合があること、不慮の事故によるデータの消失について一切責任を取らないことを条件に、容量を(事実上)無制限として実験的にこのオンラインストレージを使ってみたい方がいらっしゃったら、筆者まで連絡して欲しい。いないとは思うが。

参考文献

Nextcloudに関すること、サブディレクトリ運用について

nginxのプロキシとサブディレクトリとの関係について

WPのサブディレクトリ運用について


コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です