nextcloudによるプライベートオンラインストレージの構築

はじめまして、@h_amakasuと申します。

いきなりですが、みなさん個人のファイルはどのように管理されていますでしょうか。
私はNASに集約していましたが、故障によってデータを一部喪失してしまいました。。。。
そのため、同じ悲しみを繰り返さないために、現在はs3に一部のデータをバックアップしています。
ただ、視認性が悪くて使いにくかったので、何かいいものはないかなーと思っていたところ
いろいろ遊べそうなnextcloudというOSSを見つけましたので
その最小構成インストールと外部ストレージへの接続までを簡単にまとめました。

# nextcloudについて

Dropboxなどのようなオンラインストレージを自身で構築できるOSSです。
nextcloudはowncloudのフォークで、owncloud有償版の一部機能も利用可能となっているようです。
centos7のepelにも収録されていましたが、バージョンが古いようでした。(最新12.0.4に対し10.0.4でした)

＜nextcloud 公式サイト＞
https://nextcloud.com/

## owncloudとの違い

ぱっと見は大きく変わらないようですが、管理面や運用面がかなり改善されているようです。
具体的には以下の機能がnextcloudにのみ実装されていました。(他にもありそうです

　・ パスワードポリシーの設定
　・ 対ブルートフォースIPホワイトリスト機能
　・ OAuth 2.0認証
　・ Native SAML対応
　・ リソースモニタ
　・ リアルタイムログ追跡
　・ アクティビティ追跡
　・ 使用状況レポート
　・ カスタムテーマ
　・ ワークフロー機能
　・ メール送信機能
　・ 追加アプリの充実

いいことばかりに見えますが、owncloudで使えたgoogle cloud storageが利用できなくなっていました。
（アップロードしかできない）

# 環境構築

今回の動作検証ではCentOS7の環境を使用しました。
記載されたコマンドもこの環境に準拠したものとなります。

## remiリポジトリの登録

```
yum -y update
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```

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

```
yum -y install unzip wget
yum -y install httpd php php-json php-gd php-curl php-mbstring php-intl php-mcrypt php-imagick php-xml php-apcu php-mysqlnd php-zip --enablerepo=remi-php71
```

## nextcloudのセットアップ

```
cd /usr/local/src
wget https://download.nextcloud.com/server/releases/nextcloud-12.0.4.zip
unzip nextcloud-12.0.4.zip
cp -r nextcloud /var/www
mkdir -p /var/www/nextcloud/data
chown -R apache:apache /var/www/nextcloud

cat << EOF > /etc/httpd/conf.d/nextcloud.conf
Alias /nextcloud "/var/www/nextcloud/"

<Directory /var/www/nextcloud/>
  Options +FollowSymlinks
  AllowOverride All

 <IfModule mod_dav.c>
  Dav off
 </IfModule>

 SetEnv HOME /var/www/nextcloud
 SetEnv HTTP_HOME /var/www/nextcloud

</Directory>
EOF
```

## firewallの設定

```
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --reload
```

## selinuxの設定

```
yum -y install policycoreutils-python

semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/data(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/config(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/apps(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/3rdparty(/.*)?'

restorecon -Rv '/var/www/nextcloud/'
```

## サービス起動

```
systemctl start httpd
```

# nextcloudを使う

ここからはWEBUIでの操作となります。

## nextcloudへのログイン

http://< IPアドレス >/nextcloud にアクセスすれば、管理者アカウント登録画面が表示されるはずです。
ユーザー名とパスワードを登録し、ログインします。

## 外部ストレージの登録

今回はs3の設定方法となります。

### 外部ストレージの有効化

右上の歯車アイコンから「アプリ」を選択します。

<img width="1440" alt="menu.png" src="https://qiita-image-store.s3.amazonaws.com/0/198206/6cb8e699-c3be-ce00-9a9a-74008f1289f8.png">

「無効なアプリ」を選択し、「External storage support」を有効にします。

<img width="1440" alt="app_activate.png" src="https://qiita-image-store.s3.amazonaws.com/0/198206/efc064da-ece1-2d38-1069-8e22d2d9ab15.png">

### 外部ストレージの登録

外部ストレージの有効化と同じく、右上の歯車アイコンから「管理」を選択します。

<img width="1440" alt="menu2.png" src="https://qiita-image-store.s3.amazonaws.com/0/198206/98b59276-448b-9d12-a9ba-f04c089b3a99.png">

左メニューの「外部ストレージ」を選択したあと、「ストレージを追加」プルダウンメニューから
「Amazon S3」を選択してください。
以下の入力フィールドが表示されますので、適宜情報を入力します。

<img width="1440" alt="add_s3_default.png" src="https://qiita-image-store.s3.amazonaws.com/0/198206/4f2e5823-da60-a17a-7320-5927ee53bf4d.png">

**<入力する情報>**

|項目|設定内容|
|---|---|
|フォルダー名|任意の名称|
|認証|アクセスキーをチェック (デフォルトのまま)|
|バケット名|共有したいs3バケット名|
|ホスト名|(空欄) (デフォルトのまま)|
|ポート|(空欄) (デフォルトのまま)|
|リージョン|共有したいバケットがあるs3のリージョン|
|アクセスキー|s3へのアクセス権を持つユーザーのアクセスキー|
|シークレットアクセスキー|s3へのアクセス権を持つユーザーのシークレットアクセスキー|
|利用可能|(空欄) (デフォルトのまま)|

入力後に右のチェックアイコンをクリックし、フォルダ名左のステータスアイコンが緑になれば正常です。

### 外部ストレージの確認

上部メニュー左にあるフォルダアイコンをクリックすることで、ファイルリスト画面に戻れます。
ここで以下のように先ほど登録した外部ストレージが登録できていれば使用可能になっているはずです。

<img width="1440" alt="filelist_add_s3.png" src="https://qiita-image-store.s3.amazonaws.com/0/198206/2a7b6d93-ecc2-b60a-d0b4-a7c3ee814cc6.png">



# まとめ

個人的には管理、運用面で必要な機能はだいたい揃っている印象でした。
また、アプリも充実しているようなので、そちらを使えばさらに面白く使えるんじゃないでしょうか。

これを実際に使う場合は、nextcloudそのものの設定だけでなくDB変更など様々あると思いますが
これでも使用感はわかりますので、おや？と思われた方はこの最小構成でお試しいただいてはどうでしょうか。

それでは、本稿はこれで終わりとなります。みなさまよいお年をお迎えください！