ラズパイに、NextCloudをインストールして、自前のオンラインストレージをセットアップしてテレワークで使う

オンラインストレージサービス ownCloud のクローンソフトである、Nextcloud を使うと、Webブラウザから簡単にファイル共有ができます。
Win、Linux、MacOS用専用アプリが提供され、Webブラウザも利用でき、さらにWebDAVにも対応しているので、シームレスな運用もできます。
ラズパイ用の専用デストリビューション「NextCloudPi」も存在します。 (以前の投稿
→ これでも良いんですが、NextCloudしか動きません
このセクションでは、RaspberryPi3B or  4 上で、RasbianOS Buster の基本ベース上に、Nextcloud を構築します。

[前提条件]:セットアップ時のバージョン
ラズパイホスト  pi-nextcloud(ホスト名を変更しないとブラウザでログイン時に拒否られます)
必要な環境    データベース   MariaDB5.5
Webサーバ    Apatch2.4
PHP用モジュール php-fpm
PHPランタイム  PHP7.3
Rasbian(Raspberry Pi OS)  10

lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster
root@host:/var/www/html# cat /etc/debian_version
10.4

必要なパッケージのインストール

sudo apt update && sudo apt -y install \
 apache2 \
 mariadb-server \
 libapache2-mod-php7.3 \
 php7.3-gd \
 php7.3-json \
 php7.3-mysql \
 php7.3-curl \
 php7.3-mbstring \
 php7.3-intl \
 php-imagick \
 php7.3-xml \
 php7.3-zip

Nextcloudのアーカイブファイルダウンロードと展開

cd /var/www/html wget https://download.nextcloud.com/server/releases/nextcloud-19.0.3.tar.bz2
sudo tar -xjf nextcloud-19.0.3.tar.bz2 -C /var/www/html
sudo chown -R www-data: /var/www/html/nextcloud/

Nextcloud バージョンは、投稿時最新の19.0.3
apacheドキュメントルート:/var/www/html
Nextcloudドキュメントルート:/var/www/html/nextcloud へ展開。
apache2の所有者:www-data をデレクトリ所有者としています。

apache2 の設定ファイルへNextcloudの設定を追加


/etc/apache2/sites-available/000-default.conf の</VirtualHost>の上に以下を追加

<IfModule mod_headers.c>
Header always set Referrer-Policy "no-referrer"
Header always set Referrer-Policy "strict-origin"
</IfModule>

<IfModule mod_rewrite.c>
Redirect 301 /.well-known/carddav /nextcloud/remote.php/dav
Redirect 301 /.well-known/caldav /nextcloud/remote.php/dav
</IfModule>

<Directory /var/www/html/nextcloud/>
Options +FollowSymlinks
AllowOverride All
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/html/nextcloud
SetEnv HTTP_HOME /var/www/html/nextcloud
</Directory>

<IfModule mod_headers.c>
Header always set Referrer-Policy "no-referrer"
Header always set Referrer-Policy "strict-origin"
</IfModule>

<IfModule mod_rewrite.c>
Redirect 301 /.well-known/carddav /nextcloud/remote.php/dav
Redirect 301 /.well-known/caldav /nextcloud/remote.php/dav
</IfModule>

<Directory /var/www/html/nextcloud/>
Options +FollowSymlinks
AllowOverride All
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/html/nextcloud
SetEnv HTTP_HOME /var/www/html/nextcloud
</Directory>
  • mod_headers モジュールを使ったヘッダー付加設定
  • mod_rewrite モジュールを使ったリダイレクト設定
  • シンボリックリンクの許可
  • .htaccessファイルによるアクセス制御の有効化
  • apache2 のWebDAV機能の無効化
  • 環境変数HOME設定
  • 環境変数HTTP_HOME設定   を実施しています。

/etc/php/7.3/apache2/php.ini にopcache機能有効化設定を追加

[soap] →1759 STEP
; Enables or disables WSDL caching feature.
; http://php.net/soap.wsdl-cache-enabled soap.wsdl_cache_enabled=1

↓ ここから下の部分を追加します 
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

apache2 のモジュールのうち必要なものを有効化

sudo a2enmod rewrite
sudo a2enmod headers

mariadb-server へ設定を追加し、mariadb-serverを再起動


/etc/mysql/mariadb.conf.d/99-nextcloud.cnf に以下の内容でファイルを生成

[mysqld]
transaction_isolation = READ-COMMITTED
binlog_format = ROW

mariadbデータベース用意し、ユーザーnextcloud&データベースnextcloudの作成

sudo systemctl restart mariadb
db_name=nextcloud    ← データベース名:nextcloud
db_host=localhost
db_user=nextcloud    ← データベースユーザ名:nextcloud 
db_pass=nextcloud99  ← データベースパスワード名:nextcloud99 
db_charset=utf8mb4
db_collate=utf8mb4_general_ci
sudo mysql << EOS
CREATE USER '${db_user}'@'${db_host}' IDENTIFIED BY '${db_pass}';
CREATE DATABASE IF NOT EXISTS ${db_name}
CHARACTER SET '${db_charset}' COLLATE '${db_collate}';
GRANT ALL PRIVILEGES ON ${db_name}.* TO '${db_user}'@'${db_host}';
FLUSH PRIVILEGES;
EOS

Nextcloudのインストール

sudo -u www-data php /var/www/html/nextcloud/occ \
maintenance:install \
--database "mysql" \
--database-name "nextcloud" \
--database-user "nextcloud" \
--database-pass "nextcloud99" \
--admin-user "mikolabo" \
--admin-pass "mikolabo99" ←ここで[RETURN]
( PHPのoccコマンドでNextcloudインストール)

Nextcloud のURLをホスト名で変更(/var/www/html/nextcloud/config/config.php)

pi_name="pi-nextcloud.local"
cat << EOS > config.php.patch
7a8 >
1 => '${pi_name}',
12c13,14
< 'overwrite.cli.url' => 'http://localhost',
---
> 'overwrite.cli.url' => 'http://${pi_name}/nextcloud',
> 'htaccess.RewriteBase' => '/nextcloud',
EOS
sudo patch \
/var/www/html/nextcloud/config/config.php \
config.php.patch

.htaccessファイルの再生成

sudo -u www-data php /var/www/html/nextcloud/occ \ maintenance:update:htaccess
sudo systemctl restart apache2

ブラウザから、設定したNextcloudの管理ユーザとパスワードでログインし、設定を行います。

http://pi-nextcloud.local/nextcloud
ただし、ラズパイホスト名が「pi-nextcloud.」になっていなかったり、mDNSがうまく作動しない場合には、
http://(IPアドレス)/nextcloud でログインして下さい。
ログインすると以下のような画面で、画面を進めるとファイル一覧画面まで行きます。

NextCloudログイン画面
NextCloudログイン画面
初期メニュー
初期メニュー
ストレージ内容
ストレージ内容

まとめ

今回は、ラズパイOS(「Rasbian」から「Raspberry Pi OS」に名前が変わった )に、NextCloudの tar媒体 をダウンロードするところから、インストールして NextCloud環境を構築するところまでやってみました。

手順が面倒くさいですが、NextCloudのオンラインストレンジ機能だけではなくて、ラズパイOSの他の機能が使いやすい利点があります。

テレワークを構築するために、データのありかが気になるのであれば、オンプロミスのラズパイに必要なデータだけあげて、SoftEtherVPNのVPNセグメント内に置けば、想定外の外部アクセスを心配することもなく、データも楽ちんに管理できます。

NextCloudネタでは、次の投稿もあります。

今回のようにラズパイOSから、NextCloudの tar媒体 をダウンロードして、インストールするのは手順が大変なのですが、「NextCloudPi」であれば専用デストリビューションになっているので、インターネットからダウンロードしてきて、MicroSDに焼いて、起動すればとりあえずは動いてしますので、とってもラクチンです。

  • オンライン・ストレージとしての操作の仕方(別のページで紹介)この投稿の続きで、NextCloudインストール後のラズパイで、管理者ユーザで一般ユーザを登録し、一般ユーザになって、自分のフォルダを作って、ファイルをアップロードするような、オンラインストレージの一般的な使い方を説明しています。 トーリーとしてはラズパイにインストールしたNextCloudで、話を展開していますが、環境によって、NextCloudをインストールする部分は手順が違ってきますが、インストール後のアプリケーションとしての操作性は、どれも同じですので、ここでの説明は、どの環境でも同じ操作になります。

さらにもうひとつ

AWS上のUbuntuサーバにNextCloudを構築し、TalkによるWeb会議に成功しました。
SoftEtherVPN網内での閉域通信とインターネットを介した通常のWeb会議と両方試せました。(自宅、実家、オフィス間で通話)

数あるLinuxデストリビューションの中でも、UbuntuはSNAP管理パッケージシステムが使えるので、他のシステムに比べて、依存関係などに引っかかることなく、割と簡単に構築できるところがあり、他デストリビューションではまっていた「SSLのリダイレクト処理」をクリアすることができ、動かすことができました。