[NextCloud]ストレージ代わりにレンタルサーバーにインストールした話
経緯
アプリケーション開発でAmazon S3やsupabase storage使ったりして、なんせん無料枠はすごく小さい。
静的サイトやwordpressサイトをホストするために、XServerのレンタルサーバーを契約していて、月1000円程度でもう3年ぐらい払い続けています。この月1000円のレンタルサーバーは300GBもあって、10件近くのサイトホストしているけどそれでも使ったのはたった700MBぐらいで、300GBに対して0.23%ぐらい。もっらいない!と、300GBもあるレンタルサーバーをアプリケーションのストレージ代わりにできないかというのは今回の始まりです。
NextCloudとは
Nextcloud はオープンソースのファイル共有とコラボレーションプラットフォームです。
要するにGoogle DriveやBoxのようなアプリケーションを自前で構築できるものです。
主に以下のような機能を提供している(一人で使う分にはオーバースペックだが)
-
ファイルストレージと共有: Nextcloud を使用して、ファイルを保存、アクセス、共有することができます。これにより、ユーザーは異なるデバイス間でファイルを同期し、簡単に共有することができます。
-
セキュリティとプライバシー: オープンソースであるため、セキュリティとプライバシーに対する透明性が高いです。データはエンドユーザーのコントロール下にあり、多くのセキュリティ機能が組み込まれています。
-
コラボレーションツール: カレンダー、連絡先管理、タスク管理などの統合されたコラボレーションツールを提供しています。
-
カスタマイズと拡張性: 様々なアプリやプラグインを通じて機能を追加し、カスタマイズすることができます。
-
自己ホスティング: Nextcloud は自己ホスティングが可能で、ユーザーは自分のサーバーにインストールして使用することができます。これにより、データの管理と制御をより強化できます。
HP https://nextcloud.com/
Web Installer https://github.com/nextcloud/web-installer
Doc https://docs.nextcloud.com/server/latest/developer_manual/client_apis/index.html
NextCloudをレンタルサーバーにインストール
NextCloudをインストールするための環境として、まずサブドメインを追加します。
例えばnextcloud.sample.com
xserverで新しいデータベースを作成し、そのデータベース用のユーザーも作成し、作成したデータベースに作成したユーザーを割り当てます
xserverのデータベースユーザー割当はかなりわかりにくい
nextcloudのHPに行き、web installerであるsetup-nextcloud.phpファイルをダウンロード
FTPなどを経由してsetup-nextcloud.phpをサブドメイン直下に配置(xserverの場合はpublic_html)し、ブラウザからアクセス
https://nextcloud.sample.com/setup-nextcloud.php
するとnextcloudのインストール画面が表示される
このphpプログラムは自動でサーバー環境調べて、それに合わせた最新のnextcloudをダウンロードしてセットアップしてくれる
どこにインストールするかと聞かれ、「.」で入力して進めばsetup-nextcloud.phpのいるカレントディレクトリにインストールされる
すぐインストール終わったと表示された!
と思ったら、NEXTを押すと500エラー
このときのURLはstep3なので、どうにも設定終わってない雰囲気が(すくなくともデータベース情報まだ一切渡してないので)
https://nextcloud.sample.com/setup-nextcloud.php?step=3&directory=.
以降サブドメインのどのパスをアクセスしても500エラーで、setup-nextcloud.php自体はすでに削除された状態
サーバーログを調べる
[Mon Jan 22 22:12:09.087017 2024] [core:alert] [pid xxxxx:tid xxxxx] [client xx.xx.xxx.xxx:xxxxx] /home/xxxxx/sample.com/public_html/nextcloud.sample.com/.htaccess: Invalid command 'ModPagespeed', perhaps misspelled or defined by a module not included in the server configuration
どうやら.htaccessが悪さをしている
.htaccessの下記部分をコメントアウトしたら治った
#<IfModule pagespeed_module>
# ModPagespeed Off
#</IfModule>
Google PageSpeedの設定っぽいけど、xserverにはこのモジュールがインストールされてないからエラーでたっぽい? IfModuleと条件分岐書いてあるのに。。。とりあえずコメントアウトしたら500エラーは治ったので謎のまま
サブドメインにアクセスすると管理者アカウント作成してくださいの画面がでた。
データベースまだ設定してないけど??とりあえず管理者アカウント作成しようとするが、うん、いかない
エラーメッセージ意味不明。。。
よくよくみたら「ストレージとデータベース▼」とかなり分かりにくいところに隠しメニュがあったじゃないか。。。
最初用意したデータベース名、データベースユーザー名、パスワード、ホスト名を入力
注意: ホスト名はlocalhost:3306
で、レンタルサーバーのホスト名ではない
3306はMySQLのデフォルトポート番号
インストール完了
これだけでかなり感動した。。。
(base) [xxxxxxx@svxxxxx public_html]$ ls
nextcloud.sample.com
(base) [xxxxxxx@svxxxxx public_html]$ du -sh nextcloud.sample.com
645M nextcloud.sample.com
これが645MBで、300GBのレンタルサーバーの298Gぐらいストレージに使えそうだ!!
外部アクセス
curl -X PROPFIND -H "Depth: 1" -u username:password https://nextcloud.sample.com/remote.php/dav/files/username
とりあえずこれで情報取得できるが、アプリケーションからアクセスしようとするととにかくCORSで引っかかる
.htaccess編集して許可するようにしても、NextCloudアプリケーション側のセキュリティがいろいろかかっているっぽく、CORSを乗り越えるのにかなり苦労した
このリポジトリーのREADMEにしたがって、NextCloudアプリケーション側のPHPプログラムをいろいろ編集したらアクセスできるようになった。
アクセスできてもファイルはContent-Disposition: attachmentになっているようで、画像はそのまま表示できずいろいろ苦労した。
長くなっちゃったので、CORS設定や自前のアプリケーションAPIからアクセスする詳細はこちらに書いた
ウェブアプリケーションのストレージとして使うなら、PHPでエンドポイント作ればもっとシンプルかもだが、デザイナーとしての私はまだスキル不足でまた今度試してみる。
とにかくNextCloudのGUIにはわくわくしちゃいました。
オープンソースなだけに、UIUXの突っ込みどころ満載で癖強めだが、よしとしよう
Discussion