☁️

Raspberry Piと外付けHDDで構築するNextCloudサーバー

に公開

はじめに

この記事では、Raspberry Piにオープンソースのオンラインストレージ「NextCloud」をインストールし、外付けHDDをデータ保存領域として利用するサーバーを構築する手順を解説します。リソースの限られたRaspberry Piでも安定して動作させるためのポイントも併せて紹介します。

今回の構成

  • デバイス: Raspberry Pi
  • Webサーバー: Apache
  • PHP: 7.2
  • データベース: MariaDB
  • データストレージ: 外付けHDD

1. パッケージの更新

まずはじめに、パッケージリストとインストール済みパッケージを最新の状態に更新します。

sudo apt-get update
sudo apt-get upgrade

2. ApacheとPHP7.2のインストール

NextCloudの動作に必要となるWebサーバー「Apache」と、PHPをインストールします。NextCloudが要求するPHPのバージョンとモジュールを考慮し、ondrej/phpリポジトリを追加してPHP7.2を導入します。

2-1. Apacheのインストール

sudo apt-get install -y apache2

2-2. 外部リポジトリの追加

ondrej/phpリポジトリを追加することで、様々なバージョンのPHPをインストールできるようになります。

sudo apt-get -y install apt-transport-https lsb-release ca-certificates
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg [https://packages.sury.org/php/apt.gpg](https://packages.sury.org/php/apt.gpg)
sudo sh -c 'echo "deb [https://packages.sury.org/php/](https://packages.sury.org/php/) $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt-get update

2-3. PHP7.2と関連モジュールのインストール

NextCloudの公式ドキュメントで推奨されているPHPモジュールを一括でインストールします。

sudo apt-get install -y php7.2 php7.2-common php7.2-cli php7.2-fpm \
php7.2-mbstring php7.2-sqlite3 php7.2-json php7.2-xml php7.2-gd \
php7.2-mysql php7.2-ldap php7.2-common php7.2-zip php7.2-intl \
php7.2-dev php-smbclient php7.2-imap php7.2-gmp php-apcu php-redis \
php-memcached php-imagick php7.2-curl libapache2-mod-php7.2

参考: NextCloud Admin Manual - Prerequisites


3. MariaDB(データベース)のインストールと設定

NextCloudのファイル情報などを管理するためのデータベースとしてMariaDBをインストールします。

sudo apt-get install -y mariadb-server mariadb-client

次に、NextCloudが使用するデータベースと専用ユーザーを作成します。

# MariaDBにrootでログイン
sudo mysql -u root -p

# データベースを作成
CREATE DATABASE myclouddb;

# ユーザーを作成し、パスワードを設定
CREATE USER 'mycloud'@'localhost' IDENTIFIED BY 'mycloud..';

# ユーザーにデータベースへの全権限を付与
GRANT ALL PRIVILEGES ON myclouddb.* to 'mycloud'@'localhost';

# 権限設定を反映
FLUSH PRIVILEGES;

# MariaDBからログアウト
quit;

4. NextCloudのインストール

Webサーバーの公開ディレクトリにNextCloud本体をダウンロードし、展開します。

cd /var/www/html
curl [https://download.nextcloud.com/server/releases/nextcloud-15.0.7.tar.bz2](https://download.nextcloud.com/server/releases/nextcloud-15.0.7.tar.bz2) | sudo tar -jxv

NextCloudがデータを書き込めるように、ディレクトリの所有者と権限を設定します。

cd /var/www/html/nextcloud
sudo mkdir data
sudo chown -R www-data:www-data /var/www/html/nextcloud
sudo chmod 750 /var/www/html/nextcloud/data

5. 外付けHDDの設定とデータディレクトリの移動

大容量のデータを保存するため、外付けHDDをフォーマットし、NextCloudとMariaDBのデータ保存先として設定します。

5-1. Raspberry Piの電力設定

USBポートへの供給電力を増やし、外付けHDDの動作を安定させます。

/boot/config.txtに以下の1行を追記してください。

max_usb_current=1

5-2. HDDのフォーマット

partedを使い、HDDをGPT形式で初期化し、ext4のパーティションを作成します。

:::warning
この操作を行うとHDD内のデータはすべて消去されます。
:::

sudo parted /dev/sda

partedの対話モードで、以下の手順で実行します。

  1. mklabel -> gpt と入力
  2. mkpart -> mycloud, ext4, 0%, 100% と入力
  3. printでパーティション情報を確認
  4. quitで終了

次に、作成したパーティションをext4でフォーマットします。

sudo mkfs.ext4 /dev/sda

5-3. HDDの自動マウント設定

/etc/fstabに設定を追記し、OS起動時にHDDが自動でマウントされるようにします。

まず、HDDのUUIDを調べます。

sudo blkid /dev/sda
# 出力例: /dev/sda: UUID="f9184900-dcbf-4100-9202-6606354d747e" TYPE="ext4"

マウントポイントを作成し、/etc/fstabに追記します。

sudo mkdir /media/hdd0

/etc/fstabに以下の行を追記します。(UUIDはご自身の環境に合わせてください)

UUID=f9184900-dcbf-4100-9202-6606354d747e /media/hdd0 ext4 defaults 0 0

設定後、一度マウントを試してエラーが出ないか確認すると良いでしょう。
sudo mount -a

5-4. NextCloudデータディレクトリの準備

マウントしたHDDにNextCloud用のディレクトリを作成し、権限を設定します。

sudo mkdir /media/hdd0/data
sudo chown -R www-data:www-data /media/hdd0
sudo chmod 750 /media/hdd0/data
sudo touch /media/hdd0/.ocdata
sudo chown www-data:www-data /media/hdd0/.ocdata

この /media/hdd0/data を、NextCloudの初期設定画面でデータディレクトリとして指定します。

5-5. MariaDBデータディレクトリの移動

データベースのデータもHDDに移動させます。

# MariaDBを停止
sudo systemctl stop mariadb

# 保存先ディレクトリを作成し、権限を設定
sudo mkdir /media/hdd0/mariadb
sudo chmod 755 /media/hdd0/mariadb
sudo chown mysql:mysql /media/hdd0/mariadb

# 既存のデータを新しい場所にコピー
sudo cp -rfp /var/lib/mysql/* /media/hdd0/mariadb/

# MariaDBの設定ファイルを編集
sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf

50-server.cnf内のdatadirのパスを新しいディレクトリに変更します。

datadir = /media/hdd0/mariadb
# MariaDBを起動
sudo systemctl start mariadb

6. 自動起動の設定

サーバー再起動後もApacheとMariaDBが自動で起動するように設定します。

sudo systemctl enable apache2
sudo systemctl enable mariadb

7. NextCloudの初期設定

ここまで完了したら、ブラウザで http://(Raspberry PiのIPアドレス)/nextcloud にアクセスしてください。
管理者アカウントの作成とデータベース情報の入力画面が表示されます。

  • データフォルダー: /media/hdd0/data を指定します。
  • データベース: MariaDB/MySQLを選択し、ステップ3で設定したデータベース名、ユーザー名、パスワードを入力します。

セットアップを完了すれば、自分だけのNextCloud環境の完成です。


この記事で紹介した内容以外にも、技術情報をブログで発信しています。
MyNote
https://mynote.meantix.com/

Discussion