Edited at

完全無料でクラウドストレージを構築する【NextCloud】


完全無料でクラウドストレージを構築する【NextCloud】


まえがき

この記事では完全無料でプライベートクラウドストレージサーバを構築することを目標とします。また、この記事でなるべく全てを完結できるように最低限の操作だけを書いています。ご了承ください。

構築目安:2時間(※アップデートやダウンロードで時間がかかるので)

この記事を読んでできること


  • NextCloud(ストレージサーバ)の構築

  • 固定ドメインの取得(Serveo)

この記事でしないこと


  • SSL化(近日更新予定)


環境

構築した環境、準備したものは以下の通りです。VirtualBoxがあればWindowsでも大丈夫(なはず)です。


仮想マシンを構築する

まず、VirtualBoxで仮想マシンを構築します。ここはあまりややこしいところは無いと思いますので簡単に要点だけ書いておきます。

1. 「新規(N)」をクリック。名前は適当につけてタイプは「Linux」、バージョンは「Red Hat(64-bit)」を選択します。

2. RAMですがNextCloudの公式には最低128MB、推奨は512MBと書いているので1024MBあれば十分でしょう。

3. ハードディスクはデフォルトの「仮想ハードディスクを作成する」、ファイルタイプもデフォルトの「VDI」にしておきます。

4. 物理ハードディスクにあるストレージは「固定サイズ」にします。(次で容量を設定しますが、後からでも変更可能です)

5. ファイルの場所とサイズはこの時点ではなんでもいいです。特に触る必要はありません。ここまでで一旦仮想マシンを「作成」します。

〜数分待機〜

6. 出来た仮想マシンを起動します。ダウンロードしたCentOS7 minimalをディスクイメージに選択し、「Start」します。

7. 「Install CentOS7」を選択。GUIが起動するので、言語を日本語にし「続行」します。

8. インストールの概要は特に触らなくていいでしょう。「インストール先」だけ一度中身を確認しないと次に進めないのでクリックし「インストールを開始(B)」します。

9. rootユーザのパスワードを設定します。

〜数分待機〜

10. 「再起動(R)」し、rootユーザでログインします。


初期設定

この時点では、ネットワーク設定が初期設定のままで繋がらないのでネットワーク設定を変更します。今回はもっとも簡単なブリッジネットワークにしておきます。(VirtualBoxのネットワーク設定まとめはこちら

# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

///ONBOOTをyesに変更

- ONBOOT=no
+ ONBOOT=yes

# shutdown -h now

シャットダウンしたらVirtualBoxで「設定(S)」→「ネットワーク」→「ブリッジネットワーク」に変更し、再び起動します。これで外部ネットワークにも繋がるはずです。ちなみにここから長いコマンドをたくさん打つ必要があります。VirtualBoxのウィンドウではコピペができないので、SSH(パスワード認証)を有効にしてターミナルから操作すると楽でしょう。


# vi /etc/ssh/sshd_config

//インストールが全て終わったらまたコメントアウトしておきましょう
- #PermitRootLogin
+ PermitRootLogin

# systemctl enable sshd.service
# systemctl start sshd.service
# ip a (IPアドレスを確認しておきましょう)

//ターミナルなどからアクセス
# ssh root@192.0.2.10


NextCloudインストール

ここからが本題です。インストール途中で何かミスると嫌なので一度ここで(この後も適宜)スナップショットを取っておきましょう。

基本的に公式の手順に沿っていきます。

# yum install -y epel-release yum-utils unzip curl wget bash-completion policycoreutils-python mlocate bzip2

# yum update -y
〜数分待機〜
// Apacheインストール
# yum install -y httpd

//ファイルを新規作成
# vi /etc/httpd/conf.d/nextcloud.conf
<VirtualHost *:80>
DocumentRoot /var/www/html/
ServerName example.serveo.net(exampleの部分は自由)

<Directory "/var/www/html/">
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
</Directory>
</VirtualHost>

# systemctl enable httpd.service
# systemctl start httpd.service

# yum install -y centos-release-scl
# yum install -y rh-php72 rh-php72-php rh-php72-php-gd rh-php72-php-mbstring rh-php72-php-intl rh-php72-php-pecl-apcu rh-php72-php-mysqlnd rh-php72-php-pecl-redis rh-php72-php-opcache rh-php72-php-imagick
〜数分待機〜

# ln -s /opt/rh/httpd24/root/etc/httpd/conf.d/rh-php72-php.conf /etc/httpd/conf.d/
# ln -s /opt/rh/httpd24/root/etc/httpd/conf.modules.d/15-rh-php72-php.conf /etc/httpd/conf.modules.d/
# ln -s /opt/rh/httpd24/root/etc/httpd/modules/librh-php72-php7.so /etc/httpd/modules/
# ln -s /opt/rh/rh-php72/root/bin/php /usr/bin/php

// MariaDBインストール
# yum install -y mariadb mariadb-server

# systemctl enable mariadb.service
# systemctl start mariadb.service

MariaDB初期設定

# /usr/bin/mysql_secure_installation

Enter current password for root (enter for none): (空欄でEnter)
Set root password? [Y/n] Y
New password: (MariaDBのrootパスワード入力)
Re-enter new password: (再度入力)
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

# mysql -uroot -p
Enter password:(MariaDBのrootパスワード)
MariaDB [(none)]> CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS nextcloud;
MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES ON nextcloud.* TO 'username'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> FLUSH privileges;
MariaDB [(none)]> quit

NextCloudダウンロード

# wget https://download.nextcloud.com/server/releases/nextcloud-15.0.0.tar.bz2

〜数分待機〜
# wget https://download.nextcloud.com/server/releases/nextcloud-15.0.0.tar.bz2.md5

# tar xf nextcloud-15.0.0.tar.bz2
# cp -R nextcloud/ /var/www/html/

# mkdir /var/www/html/nextcloud/data
# chown -R apache:apache /var/www/html/nextcloud

# systemctl restart httpd.service

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

# yum install -y redis
# systemctl enable redis.service
# systemctl start redis.service

# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/data(/.*)?'
# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/config(/.*)?'
# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/apps(/.*)?'
# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.htaccess'
# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.user.ini'
# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/3rdparty/aws/aws-sdk-php/src/data/logs(/.*)?'

# restorecon -R '/var/www/html/nextcloud/'
# setsebool -P httpd_can_network_connect on

ここで、ブラウザからhttp://(サーバのIPアドレス)/nextcloud/にアクセスすると初期設定画面が表示されます。管理者アカウントのユーザ名とパスワードを設定し、セットアップを完了します。これでNextCloudの完成です!


固定ドメインの取得

次は家の外からでもアクセスできるように固定ドメインを取得します。無料で取得できるドメインサービスはたくさんありますが、特に簡単にできると思ったServeoを使いたいと思います。これは特定のURLにSSHを行うだけです。さらにサブドメインも指定できるのでちょっとうれしいです。普通のSSHだと定期的な更新が必要そうなのでautosshコマンドをバックグラウンドで使いましょう。

# vi /var/www/html/nextcloud/config/config.php

- 0 => '192.0.2.10',
+ 0 => '192.0.2.10','example.serveo.net'

# ssh -R example(自由なサブドメイン):80:localhost:80 serveo.net
//初回接続をして、ブラウザでhttp:/example.serveo.net/nextcloud/にアクセスできることを確認

Ctrl+C

# yum install -y autossh
# autossh -f -M 0 -R example(自由なサブドメイン):80:localhost:80 serveo.net

これで固定ドメインでのプライベートクラウドストレージの完成です!!お疲れ様でした〜


Tips

関連して使いそうなことをまとめておきます。


仮想マシンのバックグラウンド起動(Headless)

# VBoxManage startvm 仮想マシン名 --type headless


仮想マシンの容量変更

//ホストマシンで

VBoxManage modifyhd vdiファイル --resize 変更するサイズ(MB)


autosshの切断

# pkill -9 autossh


あとがき

あくまで私の環境での構築手順です。訂正、補足、こんなところでエラーが出たなどあればコメントいただけると幸いです。(ちなみに実際に使ってみると激遅なので実用的ではないかもしれません。ちょっと考えます...)


参考URL