システム環境
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ファイルを作成します
sudo touch nextcloud.conf
####2-3 /etc/nginx/conf.d/nextcloud.confファイルの編集
sudo vi nextcloud.conf
ファイルが開けたら i を入力すると編集ができるようになります
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ファイルの文量が多いので、変更箇所のみ記載します
< 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の画面を表示させてください
#####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タグ内に下記を追記します
'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 セキュリティ&セットアップ警告リストの対応
メニュバーの「概要」ボタンを押下すると、セキュリティ&セットアップ警告リストの一覧が表示されます。
本記事ではその一部の対応方法について記載します
####7-1 デフォルトの電話地域の設定
phpタグ内に下記を追記してください
'default_phone_region' => 'JP
####7-2 メモリーキャッシュの構成
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を構築したので、備忘録として本記事を投稿しました。