オンラインストレージシステム Nextcloud環境 サブディレクトリ扱いで建ててみた!

オンラインストレージシステム Nextcloud環境 サブディレクトリ扱いで建ててみた!

皆さん、こんちわ
相変わらずのピン村でございます。
弊サークルには専有サーバーつまりオンプレミスのサーバーがございません。(IT系サークルなのに)
そこで、ここ最近ブレードサーバーでも買って弊サークルのホームページ環境+オンラインストレージシステムの両環境を建ててしまえば使い勝手非常にいいのでは?と思い至るようになりました。
ちなみに、ブレードサーバーにしようかなっていうのは個人的興味+大学のサークルにブレードサーバー置いてあったらカッコええやろ という間抜けな考えでございます。 えぇ....

欲しいのは、コレね
image
HPE C7000

でかいでしょ?
これ置いてあったら一種のデータセンターだろと言われなくもない気はしますがそれでいいんです。

というわけで本題戻ります。

Contents

Nextcloudってな~に?

dropboxやgoogle driveと似たよなもので完全自社でオンラインストレージを建てたいときに使うソフトウェアです。
なお、ある程度テーマなどもカスタマイズが出来るため非常に汎用性が高いです。さらに、もともとあったowncloudから開発者側が脱退し "やっぱOSSだよね" ということで作られたソフトウェアがnextcloudのためセキュリティ更新や機能更新も比較的頻繁に行われています。

じゃあ今回のサブディレクトリで建ててみたってなんのメリットあんの?

んーっと、ですね
弊サークルの場合、ドキュメントルート(url直打ちすると一番最初に出てくるところ)にブログを置いてるので、ドメインの関係上(お金がない)サブディレクトリに設置すると http://(url)/サブディレクトリ名 とサービスを明確に分けることが容易になるため1台のサーバでシステムを構築する際非常に有用です。  

実際に建ててみる

まぁ、CentOS7のインストールはかっ飛ばします。
書くのが面倒なので....

では、CentOS7 minimal環境インストール直後の状態と仮定したうえで開始します。

1-1 OSの設定

とりあえず、SELinuxをdisableに...

image

ついでに、firewalldも止めます。
今回は検証なのでセキュリティのことは後で考えることにしましょう (そういって、いつもないがしろの私)

image

この状態だと、firewalldはまだ生きておりますので再起動する必要があります。
のちに再起動をかけるのでとりあえずこのまま放置で結構です。
なお、systemctl disable firewalldでコマンドを打っておりますのでした画面のターミナルで disableになってるか確認してください。(画面と表示が同じであればおk)

1-2 必要パッケージインストール


root@localhost ~# vi /etc/yum.repo.d/nginx.repo  
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

:wq で保存

続いて、mariaDBのリポジトリ登録に移ります。

root@localhost ~# vi /etc/yum.repos.d/mariadb.repo  
# MariaDB 10.4 CentOS repository list - created 2019-07-05 10:32 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1  

ここも同じく、 :wq で保存

続いて、remi リポジトリを登録します。
いつも通りと言っては何ですが、PHP導入の際に必要になる作業ですね。

root@localhost ~# yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm  

root@localhost ~# vi /etc/yum.repos.d/remi-php73.repo  
# This repository only provides PHP 7.3 and its extensions
# NOTICE: common dependencies are in "remi-safe"

[remi-php73]
name=Remi's PHP 7.3 RPM repository for Enterprise Linux 7 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/php73/$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/7/php73/httpsmirror
mirrorlist=http://cdn.remirepo.net/enterprise/7/php73/mirror

enabled=0  
ここを、enabled=1に変更する。

gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

ファイルを編集し終わったら :wq で保存

ここまでで、nginx , mariadb , remiリポジトリのPHPまでリポジトリ登録が済みましたので必要なパッケージのインストールを行っていきます。


root@localhost ~# yum -y install php php-fpm php-gmp php-mbstring php-mcrypt php-mysqlnd php-opc ache php-pear-Net-Curl php-pecl-redis php-pecl-zip php-soap php-intl php-ldap php-gd nginx MariaDB-server MariaDB-client bzip2 wget  

image

上記コマンドを打つと、全てのパッケージが順当に入る "はず" です。
また、インストールまでに15分少々時間がかかるのでコーヒーでも入れてゆっくり飲んでましょう。

1-3 各種パッケージにおける設定

では、ここまでとりあえず終わりましたら導入したパッケージを自動起動するように設定します。
なお、この自動起動設定はOSが再起動または通常起動からのみ有効です。
このコマンドを打った時点では、パッケージの起動まで行われていないので留意しましょう。

root@localhost ~# systemctl enable nginx  
root@localhost ~# systemctl enable php-fpm  
root@localhost ~# systemctl enable mariadb  
# nginx , php-fpm , mariadb の自動起動設定を有効化  

続いてphpがインストールされている /var/lib/php に対してディレクトリの所有者を "nginx" へ変更します。


root@localhost ~# chown nginx:nginx /var/lib/php/ -R  

続けて、nginx 関連の設定をしていきます。

root@localhost ~# rm -rf /etc/nginx/conf.d/default.conf  
#今回は、nginx の confが非常に長いのでdefault.confをいったん削除し、  
#新しく/etc/nginx/conf.d/default.conf というのを作成します。  

root@localhsost ~# vi /etc/nginx/conf.d/default.conf  

upstream php-handler {
    server unix:/var/run/php-fpm/php-fpm.sock;
}

server {
    listen       80;
    server_name  test.labo;
    rewrite     ^ https://test.labo$request_uri?;
}

server {
    listen       443 ssl http2;
    #listen       [::]:443 ssl http2;
    server_name  test.labo;
    root         /usr/share/nginx/html/wordpress/;
    error_log /var/log/nginx/error.log warn;

    ssl_certificate /etc/nginx/cert/nextcloud.crt;
    ssl_certificate_key /etc/nginx/cert/nextcloud.key;

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_protocols TLSv1.1 TLSv1.2;

    ssl_prefer_server_ciphers on;
    ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED';

    index index.php;

    location ~* /wp-config.php {
        deny all;
    }

    #location ~* /wp-login\.php|/wp-admin/((?!admin-ajax\.php).)*$ {
    #  auth_basic "Please enter your name and password";
    #  auth_basic_user_file  "/usr/share/nginx/html/wordpress/.htpasswd";
    #}

    # For NextCloud
    # Protecting sensitive files from the evil outside world
    location ~ ^/nextcloud/(data|config|\.ht|db_structure.xml|README) {
        deny all;
    }

    location ^~ /nextcloud {

        root /usr/share/nginx/html/;

        # set max upload size
        client_max_body_size 10G;
        fastcgi_buffers 64 4K;

        # Disable gzip to avoid the removal of the ETag header
        gzip off;

        # Uncomment if your server is build with the ngx_pagespeed module
        # This module is currently not supported.
        #pagespeed off;

        index index.php;

        error_page 403 /nextcloud/core/templates/403.php;
        error_page 404 /nextcloud/core/templates/404.php;

        location ~ ^/nextcloud/(?:\.htaccess|data|config|db_structure\.xml|README) {
            deny all;
        }

        rewrite ^/nextcloud/caldav(.*)$ /nextcloud/remote.php/caldav$1 redirect;
        rewrite ^/nextcloud/carddav(.*)$ /nextcloud/remote.php/carddav$1 redirect;
        rewrite ^/nextcloud/webdav(.*)$ /nextcloud/remote.php/webdav$1 redirect;

        rewrite ^/nextcloud/core/doc/([^\/]+)(?:$|/) /nextcloud/core/doc/$1/index.html;

        try_files $uri $uri/ /nextcloud/index.php;

        location ~ \.php(?:$|/) {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param HTTPS on;
            fastcgi_pass php-handler;
        }

        # Optional: set long EXPIRES header on static assets
        location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
            expires 30d;
            # Optional: Don't log access to assets
            access_log off;
        }

    }

    location ~ \.php$ {
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       include  fastcgi_params;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PATH_INFO $fastcgi_script_name;
       fastcgi_pass php-handler;
    }
}

nginx の default.conf は上記の通り
なお、ローカル環境でFQDNを使ってnextcloud , wordpress にアクセスしたい場合はnginx の default.conf内のtest.labo と明記されてある部分を任意に変更すること。

オレオレ証明書というものを作っていきます。
オレオレ証明書とは、ローカル環境でSSLを用いて通信できるようにすることで、ブラウザの信頼できない証明書として警告画面が出ていたりとありますがそういったものを回避出来たりするものです。
ここでは、警告画面が出ると思いますがSSL通信でやり取りされているのでまぁ、目標は達せているという扱いにします。....

root@localhost ~# openssl req -new -x509 -days 365 -nodes -out /etc/nginx/cert/nextcloud.crt -keyout /etc/nginx/cert/nextcloud.key  

root@localhost ~# chmod 700 /etc/nginx/cert  
root@localhost ~# chmod 600 /etc/nginx/cert/*  
#ここで、上記ディレクトリのアクセス権限を設定します。  

次に、nginx をインストールした際に所有しているテスト用のhtmlを削除していきます。

root@localhost ~# rm -rf /usr/share/nginx/html/index.html  
root@localhost ~# rm -rf /usr/share/nginx/html/50x.html  

これらのファイルを削除しておきます。  

それでは、ここらでnginx の confを確認するためのコマンドを打っておきます。

root@localhost ~# nginx -t  
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok  
nginx: configuration file /etc/nginx/nginx.conf test is successful  
 ```

 このように、表示されていれば大丈夫です。  
 次に、nginx でphp-fpm.sock というものを使って通信するのですが その為に php-fpm.sockというファイルが必要なのでこれに係る設定を行います。  

 ```
 root@localhost ~# vi /etc/php-fpm.d/www.conf  

 user = apache ← nginx に変更 
; RPM: Keep a group allowed to write in log dir.  
group = apache  ← nginx に変更  

そのまま行を下の方にずらしていくと....  

listen = /var/run/php-fpm/php-fpm.sock  
ここもあります。  
最初は、 ;listen = /var....  
となってるはずなので、 ; を消しちゃってください。  

さらに少し下に....  
listen.owner = nobody ←nobodyをnginxに変更  
listen.group = nobody ←nobodyをnginxに変更  

それでは、この辺でいったんサーバー自体の再起動をかけておこうと思います。


 root@localhost ~# reboot  

<br>
それでは、次にデータベースメインで設定していきます。
各種パッケージをインストールした際に、  
systemctl enable mariadb と打ったと思いますが
念のため下記コマンドを実行しておきます。

root@localhost ~# systemctl start mariadb  

root@localhost ~# mysql -u root  
ここから先は、 mysql 内で実行するコマンドになる ↓  

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.4.6-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

```SQL
MariaDB [(none)]> create database nextcloud_db;

MariaDB [(none)]> create user nextcloud@localhost identified by 'password';


>nextcloud@localhostの部分ですが、
>>ユーザーはユーザー名と接続を行うクライアントのホスト名の組み合わせで指定します。指定したホストから指定したユーザー名でログインした場合だけ接続を行えます。
ユーザー名とホスト名は特別な文字(例えば @ など)を含まない限りは引用符で囲う必要はありませんが、特別な文字を含む場合やホスト名にワイルドカードを使用する場合は逆引用符( ` ) 、シングルクオーテーション( ' )、またはダブルクオーテーション( " )で囲って指定して下さい。(引用符で囲む場合はユーザー名とホスト名は別々に囲って下さい)。 (https://www.dbonline.jp/mysql/user/index1.html より)  

ということみたいです。  
今まで、おまじない的に何も考えず打っていたのでここで勉強になるとは思いませんでした(笑)  


続きです... ```SQL MariaDB [(none)]> grant all privileges on nextcloud_db.* to nextcloud@localhost identified by 'password'; MariaDB [(none)]> create database wordpress; MariaDB [(none)]> grant all privileges on wordpress.* to wp_user@localhost identified by 'password';

これで、ひとまずは必要なデータベースの構築が出来ました。
いよいよ、wordpress と nextcloudのコアファイルをあとは設置するだけとなりました。!!

では、最後頑張っていきましょう!

root@localhost ~# wget wget https://download.nextcloud.com/server/releases/nextcloud-xx.x.x.tar.bz2  

root@localhost ~# wget https://ja.wordpress.org/latest-ja.tar.gz  

ここから、それぞれのファイルを解凍していく。  

root@localhost ~# tar jxvf xx.x.x.tar.bz2  

root@localhost ~# tar xzvf latest-ja.tar.gz  

これらを展開すると、とりあえず圧縮されていたファイルがドバァーと表示されます。(この時点で解凍済み)  

ここからは、展開したフォルダを適切な位置へ置いていきます。

root@localhost ~# mv /root/wordpress/ /usr/share/nginx/html/  
root@localhost ~# mv /root/nextcloud/ /usr/share/nginx/html/  

ここでnextcloud と wordpress のフォルダそれぞれに所有者変更と権限変更を行います。  

root@ocalhost ~# chown nginx:nginx /usr/share/nginx/html/nextcloud/ -R  

root@localhost ~# chown nginx:nginx /usr/share/nginx/html/wordpress/ -R  

以上で、作業は終了です。
あ、書き忘れてましたが test.laboなどのドメイン名で設定する場合はwindows , mac などのクライアントPCのhostsに明記が必要です。
場所は、こちらになります。

C:\Windows\System32\drivers\etc\hosts  

image

最下段にきさいしてあるtest.laboの通りIPアドレスと任意に設定したドメイン名を紐づける必要があります。
ここだけ、留意していただければ大丈夫かと思います。

それでは、楽しいプライベートクラウドライフを!!