広告

Azure Blob ストレージを使って NextCloud を構築

Storage

NextCloud とは

Nextcloudは、オンラインストレージの作成と使用のためのクライアント・サーバ型のソフトウェアである。機能的にはDropboxに似ているが、オフプレミスのオンラインストレージサービスは提供しない。Nextcloudはフリーかつオープンソースなので、誰でも自分のプライベートサーバ(英語版)にインストールして利用することができる。from wiki

環境&要件

  • ubuntu server 22.04 LTS - Gen 2 (Azure Marketplace)

Azure Blob Storage を構成 (BlobFuse)

NextCloud サーバーにAzure ストレージをマウントするのに、BlobFuse を利用します。

BlobFuse は以下の認証方法をサポートしている

  • ストレージ アカウント アクセス キー:※ 今回はこちらを利用する
  • Shared Access Signature (SAS)
  • マネージド ID
  • サービス プリンシパル

Linux サーバーにログインして、以下のコマンドを実行します。

# Microsoft ソースをダウンロードします
wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb

# Microsoft ソースをインストールします
sudo dpkg -i packages-microsoft-prod.deb

# システムを更新およびアップグレードします
sudo apt update && apt upgrade

# 必要なパッケージをインストール
# BlobFuse v1 をインストール(v2 は今プレビュー リリースしている)
# 以下のコマンドで、ubuntu 18.04 の場合、PHP 7.2 がインストールされるので、バージョンが要件に満たせません。※ 注意
sudo apt -y install apache2 mariadb-server libapache2-mod-php php-gd php-mysql php-curl php-mbstring php-intl php-gmp php-bcmath php-xml php-imagick php-zip zip unzip blobfuse libfuse2 smbclient cifs-utils

# モジュール ロードのため、再起動する
sudo shutdown -r now

MariaDB 構成

# mysql コンソールを開く
sudo mysql

# nextcloud DB 作成
> create database nextcloud;

# DB ユーザー作成
> create user nextclouduser@localhost identified by '<your-password>';  # <your-password> を置き換えてください

# DB ユーザーに nextcloud DB のすべての権限を付与
> grant all privileges on nextcloud.* to nextclouduser@localhost identified by '<your-password>';  # <your-password> を置き換えてください

# 権限更新
> flush privileges;

# コンソール終了
> exit;

nextcloud インストール

# パッケージをダウンロード
wget https://download.nextcloud.com/server/releases/nextcloud-24.0.6.zip

# 解凍
unzip nextcloud-24.0.6.zip

# Apache の www フォルダにコピー
sudo cp -r nextcloud /var/www/html

# apache 実行ユーザーにフォルダの権限を付与する
sudo chown -R www-data:www-data /var/www/html/nextcloud

www-data とは:

www-data is the user that web servers on Ubuntu (Apache, nginx, for example) use by default for normal operation. The web server process can access any file that www-data can access. ... Data written out by web servers will be owned by www-data.

NextCloud インストール

  • サーバーの IP で、Web ページをアクセスする
    • http://<Server_IP>/nextcloud/
  • 管理者アカウントを作成
    • DB のユーザー名とパスワードを入れる必要がある
  • 「インストール」をクリック(※ インストール完了まで、少し時間がかかる)
  • チュートリアルが完了まで進む

Azure ストレージ マウント設定

blobfuse 設定

NextCloud サーバーにログインして、以下のコマンドを実行していきます。

# ローカル キャッシュ用フォルダ作成
# BlobFuse では、すべての開かれたファイルをバッファリングしてキャッシュするために、ファイル システム内で一時パスを要求することでネイティブのようなパフォーマンスを提供します。
sudo mkdir /mnt/resource/blobfusetmp -p  # Azure VM の一時ディスクを使う(速度が速い)
sudo chown www-data:www-data /mnt/resource/blobfusetmp -R  # nextcloud の実行ユーザー、一般的には `www-data`

# 構成ファイルを作成し、権限を設定する
sudo mkdir /path/to/ -p
sudo touch /path/to/fuse_connection.cfg
sudo chown www-data:www-data /path/to/fuse_connection.cfg
sudo chmod 600 /path/to/fuse_connection.cfg

# 構成ファイルにストレージ アカウントの情報を記載
# 形式:https://learn.microsoft.com/ja-jp/azure/storage/blobs/storage-how-to-mount-container-linux#authorize-access-to-your-storage-account
sudo -u www-data echo accountName <storageAccountName> >> /path/to/fuse_connection.cfg  # <storageAccountName>を置き換えてください
sudo -u www-data echo accountKey <accessKey> >> /path/to/fuse_connection.cfg  # <accessKey> を置き換えてください
sudo -u www-data echo containerName <containerName> >> /path/to/fuse_connection.cfg  # <containerName> を置き換えてください
sudo -u www-data cat /path/to/fuse_connection.cfg

# Azure ストレージをマウントするためのディレクトリを作成
sudo -u www-data mkdir /var/www/html/nextcloud/data/<username>/files/AzureStorage  # <username> を置き換えてください
sudo chown www-data:www-data /var/www/html/nextcloud/data/<username>/files/AzureStorage -R  # <username> を置き換えてください

# Azure ストレージをディレクトリにマウントする
# 必要なパッケージ:apt -y install smbclient cifs-utils
sudo -u www-data blobfuse /var/www/html/nextcloud/data/<username>/files/AzureStorage --tmp-path=/mnt/resource/blobfusetmp  --config-file=/path/to/fuse_connection.cfg -o attr_timeout=240 -o entry_timeout=240 -o negative_timeout=120  # <username> を置き換えてください

# 設定をクライアント側に反映
# ※ 注意:単純にサーバー側でファイル操作しても、Web サイト側では反映されません。以下のコマンドをサーバー上で実行する必要がある
sudo -u www-data php /var/www/html/nextcloud/console.php files:scan --all

## マウント結果の確認
# www-data ユーザーで bash を起動
sudo -u www-data bash

# フォルダ状況を確認
ls /var/www/html/nextcloud/data/<username>/files/  # <username> を置き換えてください

# www-data ユーザー解除
exit

#####################
## マウントを永続化する
#####################
# スタートアップ スクリプト作成
sudo touch /etc/rc.local

# 実行可能ファイルに設定する
sudo chmod +x /etc/rc.local

# 中身を追加
# www-data (サービス実行ユーザー) でマウントする必要がある
# セキュリティ ホールになる可能性があるので、権限をしっかりしましょう
sudo echo '#!/bin/sh -e' >> /etc/rc.local
sudo echo '' >> /etc/rc.local
sudo echo 'sudo -u www-data blobfuse /var/www/html/nextcloud/data/<username>/files/AzureStorage --tmp-path=/mnt/resource/blobfusetmp -o uid=33 -o gid=33  -o attr_timeout=240 -o entry_timeout=240 -o negative_timeout=120 --config-file=/path/to/fuse_connection.cfg  --log-level=LOG_DEBUG --file-cache-timeout-in-seconds=120' >> /etc/rc.local  # <username> を置き換えてください

Nextcloud 外部ストレージ利用

ローカル ストレージで Azure Storage を利用

サーバ側準備

# マウントポイントの準備
sudo mkdir /share/blobfuse -p
chown www-data:www-data /share/blobfuse
chmod 750 /share/

# マウント
sudo -u www-data blobfuse /share/blobfuse --tmp-path=/mnt/resource/blobfusetmp  --config-file=/path/to/fuse_connection.cfg -o attr_timeout=240 -o entry_timeout=240 -o negative_timeout=120

# startup script にマウントコマンドを書き込む
sudo echo '' >> /etc/rc.local
sudo echo 'sudo -u www-data blobfuse /share/blobfuse --tmp-path=/mnt/resource/blobfusetmp -o uid=33 -o gid=33  -o attr_timeout=240 -o entry_timeout=240 -o negative_timeout=120 --config-file=/path/to/fuse_connection.cfg  --log-level=LOG_DEBUG --file-cache-timeout-in-seconds=120' >> /etc/rc.local  # <username> を置き換えてください

Web クライアント側設定

  • サーバーの IP で、Web ページをアクセスする(NextCloud 管理者)
    • http://<Server_IP>/nextcloud/
  • チュートリアルが完了したら、「右上のユーザー アイコン」→「アプリ」→「無効なアプリ」に移動する
  • リストから、「External storage support」 を有効にする
  • 「右上のユーザー アイコン」→「設定」→「管理」→「外部ストレージ」
  • 以下の設定をし、「✓」をクリックする
    • フォルダー名:※ 任意の名前
    • 外部ストレージ:ローカル
    • 認証:なし
    • 設定:/share/blobfuse
    • 利用可能:※ アクセスさせるユーザー
  • 緑の「✓」マークが表示されたら、設定完了
  • 該当ユーザーのページの「外部ストレージ」で確認可能

注意:サーバー側(ストレージ側)で更新した場合、クライアントに反映するには、以下のコマンドをサーバで実行する必要があります

sudo -u www-data php /var/www/html/nextcloud/console.php files:scan --all

SFTP(SSH)を利用(プレビュー)

※ 注意:このオプションは、アカウントの階層型名前空間が有効になっている場合にのみ表示されます。

  • Azure Storage で、SFTP を有効
  • 権限の構成
  • NextCloud から接続(NextCloud 管理者)
    • 「右上のユーザー アイコン」→「設定」→「管理」→「外部ストレージ」に移動
    • 以下の設定をし、「✓」をクリックする
    • フォルダー名:※ 任意の名前
    • 外部ストレージ:SFTP
    • 認証:ユーザー名とパスワード(※ Azure Storage の認証方式に合わせてください。)
    • ホスト:storage account の FQDN(例:<storage_account_name>.blob.core.windows.net
    • ルート:※ 空欄(コンテナのホーム ディレクトリを使う)
    • ユーザー名:<storage_account_name>.<storage_username>
    • パスワード:※ ストレージアカウントのユーザーのパスワード
    • 利用可能:※ アクセスさせるユーザー
    • 「ユーザーに外部ストレージの接続を許可する」にすると、admin グループのユーザーでなくても、ストレージの登録が可能
    • 接続参考ドキュメント

注意:サーバー側(ストレージ側)で更新した場合、クライアントに反映するには、以下のコマンドをサーバで実行する必要があります

sudo -u www-data php /var/www/html/nextcloud/console.php files:scan --all

参考ドキュメント

トラブルシューティング

# ERROR:blobfuse: error while loading shared libraries: libfuse.so.2: cannot open shared object file: No such file or directory
sudo apt install libfuse2

コメント

タイトルとURLをコピーしました