3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Nextcloudの環境構築(CentOs7/nginx/php/MySQL)

Last updated at Posted at 2021-11-30

システム環境

OS
 ・CentOs7
Webサーバ
 ・Nginx
その他ミドルウェア
 ・PHP 8.0
 ・PHP-FPM 8.0
 ・MySQL 8.0
 ・Redis 6.2
アプリケーション
 ・Nextcloud 22.2.0

#全体の流れ
1 必要パッケージのインストール
2 Nginxのインストールと設定
3 PHPのインストールと設定
4 MySQLのインストールとDB作成
5 Nextcloudのインストールとセットアップ
6 Redisのインストールと設定
7 セキュリティ&セットアップ警告リストの対応
 
###1 必要パッケージのインストール
####1-1 Nextcloudの環境構築に必要なパッケージのインストール

ターミナル
sudo yum install -y epel-release yum-utils unzip curl wget bash-completion bzip2

####1-2 インストール終了後システムのアップデート

ターミナル
sudo yum update -y

###2 Nginxのインストールと設定
####2-1 Nginxのインストール

ターミナル
sudo yum install nginx -y

####2-2 nextcloud.confファイルの作成
/etc/nginx/conf.dディレクトリにnextcloud.confファイルを作成します

/etc/nginx/conf.d
sudo touch nextcloud.conf

####2-3 /etc/nginx/conf.d/nextcloud.confファイルの編集

/etc/nginx/conf.d
sudo vi nextcloud.conf

ファイルが開けたら i を入力すると編集ができるようになります

/etc/nginx/conf.d/nextcloud.conf
 upstream php-handler {
    server unix:/var/run/php-fpm/php-fpm.sock;
}

server {
    listen 80;
    listen [::]:80;
    server_name (サーバのIPアドレス);

    # Add headers to serve security related headers
    # Before enabling Strict-Transport-Security headers please read into this
    # topic first.
    # add_header Strict-Transport-Security "max-age=15768000;
    # includeSubDomains; preload;";
    #
    # WARNING: Only add the preload option once you read about
    # the consequences in https://hstspreload.org/. This option
    # will add the domain to a hardcoded list that is shipped
    # in all major browsers and getting removed from this list
    # could take several months.
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;

    # Path to the root of your installation
    root /var/www/html/nextcloud/;
    
    location = /robots.txt {
       allow all;
       log_not_found off;
       access_log off;
    }

    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
    # last;

    location = /.well-known/carddav {
      return 301 $scheme://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
      return 301 $scheme://$host/remote.php/dav;
    }

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Enable gzip but do not remove ETag headers
    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

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

    location / {
        rewrite ^ /index.php$uri;
    }

    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
        deny all;
    }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny all;
    }

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.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;
        #Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri/ =404;
        index index.php;
    }

    # Adding the cache control header for js and css files
    # Make sure it is BELOW the PHP block
    location ~ \.(?:css|js|woff|svg|gif|mp4)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=15778463";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        # Before enabling Strict-Transport-Security headers please read into
        # this topic first.
        # add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
        #
        # WARNING: Only add the preload option once you read about
        # the consequences in https://hstspreload.org/. This option
        # will add the domain to a hardcoded list that is shipped
        # in all major browsers and getting removed from this list
        # could take several months.
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        # Optional: Don't log access to assets
        access_log off;
    }

    location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log off;
    }
}

上記を入力できたらEsc→:wqを入力することで保存することができます

####2-4 起動と自動起動の設定
nginxの設定ができましたので、起動と自動起動を行います

ターミナル
sudo systemctl start nginx  //起動方法

sudo systemctl enable nginx  //自動起動方法

補足:nginxのログは/var/log/nginx/に出力されます

###3 PHPのインストールと設定

####3-1 PHPモジュールのインストール

ターミナル
sudo yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm -y
ターミナル
sudo yum install --enablerepo=remi,remi-php80 php php-fpm php-cli php-common php-curl php-gd php-mbstring php-mysqlnd php-process php-xml php-opcache php-pecl-apcu php-intl php-pecl-redis php-pecl-zip php-pear -y

####3-2 PHP-FPMの設定
 www.confファイルの文量が多いので、変更箇所のみ記載します

/etc/php-fpm.d/www.conf
< user = apache

> user = nginx
-----
< group = apache

> group = nginx
-----
< listen = 127.0.0.1:9000

> listen = /var/run/php-fpm/php-fpm.sock
-----
< ;listen.owner = nobody
< ;listen.group = nobody
< ;listen.mode = 0660

> listen.owner = nginx
> listen.group = nginx
> listen.mode = 0666
-----
< ;env[HOSTNAME] = $HOSTNAME
< ;env[PATH] = /usr/local/bin:/usr/bin:/bin
< ;env[TMP] = /tmp
< ;env[TMPDIR] = /tmp
< ;env[TEMP] = /tmp

> env[HOSTNAME] = $HOSTNAME
> env[PATH] = /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
> env[TMP] = /tmp
> env[TMPDIR] = /tmp
> env[TEMP] = /tmp

####3-3 PHPセッションディレクトリのグループ情報を変更

ターミナル
sudo chown -R root:nginx /var/lib/php/session

####3-4 起動と自動起動の設定

ターミナル
sudo systemctl start php-fpm  //起動方法

sudo systemctl enable php-fpm  //自動起動方法

補足:PHP-FPMのログは/var/log/php-fpm/に出力されます

###4 MySQLのインストールとDB作成
####4-1 MariaDB関連ライブラリの確認と削除
CentOs7ではMariaDBがデフォルトとなっている為、関連ライブラリを削除します

ターミナル
rpm -qa | grep mariadb    //存在の確認

sudo yum remove mariadb-libs  //削除
sudo rm -rf /var/lib/mysql/

####4-2 インストール

ターミナル
rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm

sudo yum install mysql-community-server

####4-3 起動と自動起動の設定

ターミナル
sudo systemctl start mysqld.service    //起動

sudo systemctl enable mysqld.service   //自動起動

####4-4 パスワードの確認
インストール時にrootのパスワードがlogに出力されているのでgrepで確認

ターミナル
grep password /var/log/mysqld.log
ターミナル
//grepで出力されるログ例
2021-10-28T02:20:42.844277Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ZrZlt!ZNt6kS

上記の例だと[ZrZlt!ZNt6kS]が初期パスワードとなります
後の作業で使用するのでパスワードを控えておいて下さい

####4-5 基本セットアップ

ターミナル
sudo mysql_secure_installation

パスワードが求められますので、先ほど控えたパスワードを入力します
New password、Re-enter new passwordでrootユーザのパスワードを設定する以外はEnterキーを押していきます

####4-6 DBとユーザの作成
以下の通り設定しております
 -ユーザ名:sampleuser
 -DB名:sampledb
 -パスワード:Samplepass%2021
(任意のユーザ名、DB名、パスワードを入力してください)

ターミナル
mysql -u root -p

CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8mb4;
CREATE USER 'sampleuser'@'localhost' IDENTIFIED BY 'Samplepass%2021';
SHOW GRANTS FOR 'sampleuser'@'localhost';

exit;

###5 Nextcloudのインストールとセットアップ

####5-1 インストール

ターミナル
wget https://download.nextcloud.com/server/releases/nextcloud-22.2.0.tar.bz2

####5-2 セットアップ
インストールしたNextcloudのパッケージを展開します

ターミナル
tar xf nextcloud-22.2.0.tar.bz2

展開したNextcloudをドキュメントルートにコピー (本記事のドキュメントルートは2-3で設定しているように/var/www/html/となります)
ターミナル
sudo cp -R nextcloud/ /var/www/html/

dataディレクトリを作成します

ターミナル
sudo mkdir /var/www/html/nextcloud/data

全フォルダ及びファイルの所有権を変更

ターミナル
sudo chown -R nginx:nginx /var/www/html/nextcloud

PHP-FPMとnginxの再起動を行います

ターミナル
sudo systemctl restart nginx

sudo systemctl restart php-fpm

####5-3 ブラウザからNextcloudの設定
ブラウザで指定したURLにアクセスしてNextcloudの画面を表示させてください

nextcloudセットアップ画面.jpg


#####5-3-1 管理者アカウントを作成します
 -ユーザ名:admin
 -パスワード:adominpass
 (任意のユーザ名とパスワードを入力してください)

#####5-3-2 データベースの指定
「ストレージとデータベース」を押下し、データベースはMySQLを選択します

下記には4-6で設定した内容を入力します(本記事では下記内容)
 -データベースのユーザ名:sampleuser
 -データベース名:sampledb
 -データベースのパスワード:Samplepass%2021
 -DBのホスト名: localhost:3306 

情報を入力後、「セットアップを完了」ボタンを押下
(必要に応じて「推奨アプリのインストール」チェックボタンを押してください)

###6 Redisのインストールと設定

####6-1 Redisのインストール

ターミナル
sudo yum install --enablerepo=remi redis -y

####6-2 設定ファイルの編集

ターミナル
sudo cp -pi /var/www/html/nextcloud/config/config.php{,.orig}

phpタグ内に下記を追記します

/var/www/html/nextcloud/config/config.php
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'memcache.local' => '\\OC\\Memcache\\APCu',
'redis' => 
array (
  'host' => 'localhost',
  'port' => 6379,
),

####6-3 起動と自動起動

ターミナル
sudo systemctl start redis


sudo systemctl enable redis

nginxとphp-fpmを再起動しておきます

ターミナル
sudo systemctl restart nginx


sudo systemctl restart php-fpm

(補足:Redisのログは/var/log/redisに出力されます)

###7 セキュリティ&セットアップ警告リストの対応
メニュバーの「概要」ボタンを押下すると、セキュリティ&セットアップ警告リストの一覧が表示されます。
本記事ではその一部の対応方法について記載します
セットアップバー.png

####7-1 デフォルトの電話地域の設定
phpタグ内に下記を追記してください

/var/www/html/nextcloud/config/config.php
'default_phone_region' => 'JP

####7-2 メモリーキャッシュの構成
phpタグ内に下記を追記してください

/var/www/html/nextcloud/config/config.php
'memcache.local' => '\OC\Memcache\APCu',

####7-3 推奨されるPHPモジュールのインストール
 ・bcmath
 ・gmp
 ・imagick

ターミナル
sudo yum install php80-php-bcmath php80-php-gmp php80-php-imagick

sudo cp /etc/opt/remi/php80/php.d/20-bcmath.ini /etc/php.d/

sudo cp /etc/opt/remi/php80/php.d/20-gmp.ini /etc/php.d/

sudo cp /etc/opt/remi/php80/php.d/40-imagick.ini /etc/php.d/

sudo cp /opt/remi/php80/root/usr/lib64/php/modules/bcmath.so /usr/lib64/php/modules/

sudo cp /opt/remi/php80/root/usr/lib64/php/modules/gmp.so /usr/lib64/php/modules/

sudo cp /opt/remi/php80/root/usr/lib64/php/modules/imagick.so /usr/lib64/php/modules/

sudo systemctl restart nginx && systemctl restart php-fpm

##参考記事 [Nextcloudドキュメント](https://docs.nextcloud.com/server/latest/admin_manual/installation/source_installation.html)


##さいごに 本記事を最後まで読んで頂きありがとうございます。 業務でNextcloudを構築したので、備忘録として本記事を投稿しました。
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?