テクノロジーガイド

CentOS 8 に Nextcloud 17 を Nginx / PHP-FPM 7.3 / MariaDB で構築する手順

4 min read サーバー構築 更新されました 21 Oct 2025
CentOS 8 に Nextcloud 17 を Nginx/PHP-FPM/MariaDBで構築
CentOS 8 に Nextcloud 17 を Nginx/PHP-FPM/MariaDBで構築

このガイドでは、CentOS 8 サーバー(推奨: 2GB RAM、25GB 空き、2 vCPU)に Nextcloud 17 を Nginx、PHP-FPM 7.3、MariaDB でインストールし、Let’s Encrypt で HTTPS を有効化する手順を詳述します。各ステップごとに必要なコマンド、SELinux の設定、トラブルシューティング、運用上の注意点や更新手順も含みます。初期インストールから運用準備、バックアップや証明書更新までカバーしています。

重要: 本手順は CentOS 8 向けです。別ディストリビューションや OS バージョンではリポジトリ名やパッケージが異なります。

目的と想定読者

目的: CentOS 8 環境で Nextcloud 17 を安全に稼働させる。 想定読者: Linux サーバーの基本操作(systemctl、dnf、vim、firewall-cmd)ができるシステム管理者。

用語(1行)

  • Nextcloud: オープンソースのセルフホスト型ファイル同期/共有プラットフォーム。簡潔: Dropbox のセルフホスト版。

目次

  • 前提条件
  • 概要(実施項目)
  • ステップ 1: Nginx のインストール
  • ステップ 2: PHP-FPM 7.3 のインストール
  • ステップ 3: PHP-FPM の設定
  • ステップ 4: MariaDB のインストールとデータベース作成
  • ステップ 5: Let’s Encrypt SSL 発行
  • ステップ 6: Nextcloud のダウンロードとインストール
  • ステップ 7: Nginx 仮想ホスト設定
  • ステップ 8: SELinux 設定
  • ステップ 9: Nextcloud ウェブインストーラー
  • 運用・保守: 自動証明書更新、cron、バックアップ、トラブルシューティング
  • セキュリティ強化とベストプラクティス
  • 受け入れ基準
  • 管理者/運用者チェックリスト
  • 参考リンク

前提条件

  • CentOS 8 がインストールされたサーバー
  • ルート権限(sudo)が使用可能
  • 固定の公開ドメイン名(本例では cloud.hakase-labs.io を使用)
  • ポート 80 と 443 が外部から到達可能

推奨サーバースペック: 2 GB RAM、25 GB 以上の空きディスク、2 つの CPU。

重要: 実運用時はディスク I/O、バックアップ、監視などを考慮してリソースを検討してください。


実施項目(概要)

  • Nginx をインストールしてファイアウォールを設定
  • PHP-FPM 7.3 と推奨モジュールを REMI 経由で導入
  • PHP 設定(メモリ、timezone、opcache)を調整
  • MariaDB を導入し Nextcloud 用データベースとユーザーを作成
  • Certbot で Let’s Encrypt 証明書を取得
  • Nextcloud 17 をダウンロードして配置
  • Nginx の仮想ホストを用意して HTTPS を強制
  • SELinux のコンテキストを設定
  • ブラウザでインストールウィザードを実行

ステップ 1 - Nginx のインストール

まず Nginx をインストールし、firewalld で HTTP/HTTPS を開けます。

インストール:

sudo dnf install nginx

サービス開始と自動起動登録:

systemctl start nginx
systemctl enable nginx

ステータス確認:

systemctl status nginx

起動済みであればブラウザでサーバーの IP またはドメインにアクセスすると Nginx のデフォルトページが表示されます。

Nginx を systemd で起動した状態を示すスクリーンショット

firewalld に HTTP/HTTPS を追加:

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

注意: クラウド環境(AWS、GCP、Azure 等)では OS レベル以外にクラウドのセキュリティグループやファイアウォール設定も確認してください。

firewalld の設定を示すスクリーンショット


ステップ 2 - PHP-FPM 7.3 のインストール

Nextcloud 17 は PHP 7.2/7.3 を推奨します。本手順では REMI リポジトリの PHP 7.3 を利用します。

まず PowerTools、EPEL、REMI を有効化します:

sudo dnf config-manager --set-enabled PowerTools
sudo dnf install epel-release
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

リポジトリ一覧を確認:

dnf repolist

PHP モジュール一覧確認と REMI モジュール有効化:

dnf module list php
dnf module enable php:remi-7.3

必要な PHP パッケージをインストール(Nextcloud 用):

sudo dnf install php-fpm php-cli php-devel php-gd php-mysqlnd php-pear php-xml php-mbstring php-pdo php-json php-pecl-apcu php-pecl-apcu-devel php-pecl-imagick-devel php-intl php-opcache php-zip

ステップ 3 - PHP-FPM 7.3 の設定

Nextcloud に適した php.ini と PHP-FPM の設定を行います。

php.ini の編集:

vim /etc/php.ini

以下を編集(コメント解除して変更):

memory_limit = 512M
date.timezone = Asia/Jakarta
cgi.fixpathinfo = 0

メモ: timezone は運用場所に合わせて適切なものに置き換えてください(例: Asia/Tokyo)。

opcache のチューニング:

vim /etc/php.d/10-opcache.ini

次のように設定:

opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

PHP-FPM のワーカ設定:

vim /etc/php-fpm.d/www.conf

以下を変更:

user = nginx
group = nginx
listen = /run/php-fpm/www.sock

環境変数と opcache のファイルキャッシュをアンコメント:

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

php_value[opcache.file_cache] = /var/lib/php/opcache

セッションと opcache 用ディレクトリを作成し所有権を nginx に:

mkdir -p /var/lib/php/{session,opcache}
chown -R nginx:nginx /var/lib/php/{session,opcache}

サービス起動と自動起動登録:

systemctl enable php-fpm
systemctl start php-fpm

状態確認:

netstat -pl | grep php
systemctl status php-fpm

PHP 設定のスクリーンショット

PHP-FPM のソケットが稼働している様子を示すスクリーンショット

重要: PHP のメモリ設定や opcache は利用状況に応じて調整してください。小規模環境では 512M は妥当ですが、大規模では増やす必要があります。


ステップ 4 - MariaDB のインストールと設定

MariaDB をインストールして root のパスワード設定、Nextcloud 用のデータベース/ユーザーを作成します。

インストール:

sudo dnf install mariadb mariadb-server

サービス開始と有効化:

systemctl start mariadb
systemctl enable mariadb

初期セキュリティ設定:

mysql_secure_installation

対話では通常以下を推奨:

Set a root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

データベースとユーザー作成(例):

mysql -u root -p
-- パスワード入力
create database nextcloud_db;
create user nextclouduser@localhost identified by 'nextcloudpassdb';
grant all privileges on nextcloud_db.* to nextclouduser@localhost identified by 'nextcloudpassdb';
flush privileges;
exit;

注意: パスワードは実運用では強力なものに置き換えてください。ソフトコードしないでください。

MariaDB の設定を示すスクリーンショット


ステップ 5 - Let’s Encrypt SSL 証明書を取得

Certbot を使い無料の証明書を発行します。ここでは webroot を使った証明書取得を例示します。

インストール:

sudo dnf install certbot

証明書の発行(ドメインとメールを自分のものに変えてください):

certbot certonly --webroot --webroot-path /usr/share/nginx/html --agree-tos -m [email protected] -d cloud.hakase-labs.io

発行後の証明書場所:

ls -lah /etc/letsencrypt/live/cloud.hakase-labs.io/

証明書は /etc/letsencrypt/live// に配置されます。nginx の設定でこのパスを参照してください。

重要: 証明書の自動更新を必ず設定してください(下記に手順あり)。


ステップ 6 - Nextcloud のダウンロードと配置

Nextcloud 17 の配布アーカイブをダウンロードして /var/www に展開します。

unzip が必要:

sudo dnf install unzip

ダウンロードと展開:

cd /var/www/
wget https://download.nextcloud.com/server/releases/nextcloud-17.0.2.zip
unzip nextcloud-17.0.2.zip

データディレクトリを作成:

mkdir -p /var/www/nextcloud/data/

所有者を nginx に設定:

sudo chown -R nginx:nginx /var/www/nextcloud

Nextcloud をダウンロードした様子のスクリーンショット

注意: Nextcloud の data ディレクトリは可能なら別ストレージ(別ディスクや LVM、NFS)に置き、適切にバックアップしてください。ディスク I/O が重要です。


ステップ 7 - Nginx の仮想ホスト設定

/etc/nginx/conf.d に nextcloud.conf を作成し、PHP-FPM ソケットと SSL 証明書パスを指定します。

cd /etc/nginx/conf.d/
vim nextcloud.conf

以下のサンプルをベースに domain と証明書パスを変更して貼り付けてください(ソースからそのまま転載)。

upstream php-handler {
 #server 127.0.0.1:9000;
 server unix:/run/php-fpm/www.sock;
}

server {
 listen 80;
 listen [::]:80;
 server_name cloud.hakase-labs.io;
 # enforce https
 return 301 https://$server_name:443$request_uri;
}

server {
 listen 443 ssl http2;
 listen [::]:443 ssl http2;
 server_name cloud.hakase-labs.io;

 # Use Mozilla's guidelines for SSL/TLS settings
 # https://mozilla.github.io/server-side-tls/ssl-config-generator/
 # NOTE: some settings below might be redundant
 ssl_certificate /etc/ssl/nginx/fullchain.pem;
 ssl_certificate_key /etc/ssl/nginx/privkey.pem;

 # Add headers to serve security related headers
 add_header Referrer-Policy "no-referrer" always;
 add_header X-Content-Type-Options "nosniff" always;
 add_header X-Download-Options "noopen" always;
 add_header X-Frame-Options "SAMEORIGIN" always;
 add_header X-Permitted-Cross-Domain-Policies "none" always;
 add_header X-Robots-Tag "none" always;
 add_header X-XSS-Protection "1; mode=block" always;

 fastcgi_hide_header X-Powered-By;

 root /var/www/nextcloud;

 location = /robots.txt {
 allow all;
 log_not_found off;
 access_log off;
 }

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

 client_max_body_size 512M;
 fastcgi_buffers 64 4K;

 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;

 location / {
 rewrite ^ /index.php;
 }

 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\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
 fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
 set $path_info $fastcgi_path_info;
 try_files $fastcgi_script_name =404;
 include fastcgi_params;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_param PATH_INFO $path_info;
 fastcgi_param HTTPS on;
 fastcgi_param modHeadersAvailable true;
 fastcgi_param front_controller_active true;
 fastcgi_pass php-handler;
 fastcgi_intercept_errors on;
 fastcgi_request_buffering off;
 }

 location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
 try_files $uri/ =404;
 index index.php;
 }

 location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
 try_files $uri /index.php$request_uri;
 add_header Cache-Control "public, max-age=15778463";
 add_header Referrer-Policy "no-referrer" always;
 add_header X-Content-Type-Options "nosniff" always;
 add_header X-Download-Options "noopen" always;
 add_header X-Frame-Options "SAMEORIGIN" always;
 add_header X-Permitted-Cross-Domain-Policies "none" always;
 add_header X-Robots-Tag "none" always;
 add_header X-XSS-Protection "1; mode=block" always;
 access_log off;
 }

 location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {
 try_files $uri /index.php$request_uri;
 access_log off;
 }
}

設定テストと再起動:

nginx -t
systemctl restart nginx

ネットワークポート確認:

netstat -plntu

Nginx の Nextcloud 用設定を示すスクリーンショット

注意: 上の設定内の ssl_certificate と ssl_certificate_key は certbot のパスに合わせて変更してください。


ステップ 8 - SELinux の設定

SELinux を enforcing のまま運用する場合、Nextcloud 用ディレクトリに適切なコンテキストを設定します。

policycoreutils-python-utils をインストール:

sudo dnf install policycoreutils-python-utils

ファイルコンテキストを設定:

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/assets(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.htaccess'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.user.ini'

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

重要: SELinux を緩める代わりに適切なラベルを付与することが推奨されます。


ステップ 9 - ブラウザで Nextcloud ウェブインストール

ブラウザで https://cloud.hakase-labs.io/ を開くとインストールウィザードが表示されます。

  • 管理者アカウントを作成
  • データフォルダの場所を確認(通常 /var/www/nextcloud/data)
  • データベースで MySQL/MariaDB を選び、ステップ 4 で作成した nextcloud_db / nextclouduser / nextcloudpassdb を入力

“Finish Setup” をクリックしてインストールを完了すると、ダッシュボードが表示されます。

Nextcloud のウェブインストーラーのスクリーンショット

インストール後の画面例:

Nextcloud ダッシュボードのスクリーンショット

おめでとうございます — Nextcloud 17 が稼働しています。


運用・保守のポイント

自動証明書更新

certbot による自動更新は通常 systemd タイマーや cron を使います。動作確認:

certbot renew --dry-run

自動更新が成功すれば systemd の timer または cron により 60 日毎に実行されます。自動更新後に nginx を再読み込みする設定例:

# /etc/cron.d/certbot-reload の例
0 3,15 * * * root certbot renew --post-hook "systemctl reload nginx"

注意: cron の書き方は環境に合わせてください。systemd の timer を利用する方法もあります。

Nextcloud の cron ジョブ

Nextcloud のメンテナンスジョブは system cron(推奨)または AJAX を使用します。system cron を設定する場合、Nextcloud 管理画面で cron を選択し、次のように cron を登録します:

*/15 * * * * php -f /var/www/nextcloud/cron.php

この cron は root で実行することが多いですが、所有者 nginx のユーザーで実行する場合はパスや環境を調整してください。

バックアップ方針(簡易)

  • データディレクトリ(/var/www/nextcloud/data)の定期バックアップ
  • Nextcloud 設定ファイル(/var/www/nextcloud/config)とカスタムアプリのバックアップ
  • MariaDB の定期ダンプ(mysqldump)とリストア確認
  • バックアップはオフサイトに保管(別サーバーやクラウドストレージ)

例: MariaDB のダンプ

mysqldump -u root -p nextcloud_db > nextcloud_db-$(date +%F).sql

アップデートについて

  • OS とパッケージ(dnf)を定期的に更新
  • Nextcloud のメジャーバージョンアップはテスト環境で先に検証後に本番へ
  • Nextcloud アップデートでは PHP や DB 要件が変わることがあるため、互換性を必ず確認

セキュリティ強化とベストプラクティス

  • HTTPS を常に有効にする。HSTS は理解した上で有効化する。
  • 強力な管理者パスワードと 2 要素認証(可能ならアプリで有効化)を使用する。
  • 外部公開 API を制限する(必要なエンドポイントのみ公開)。
  • 定期的にログをレビューし、不審なアクセスを検知する。
  • 可能であればバックアップからの復旧手順を文書化し、定期的にリハーサルを実施する。

SELinux/Firewall の注意点

  • SELinux を無効化するよりも適切なラベルを付与する。
  • ファイアウォールは最小権限で許可し、必要なプロトコルのみ開放する。

トラブルシューティング(よくある症状と対処)

症状: ブラウザでページが 502 Bad Gateway を返す

  • 原因: php-fpm が停止している、またはソケットパスが異なる。
  • 対処:
    • systemctl status php-fpm
    • nginx の設定で fastcgi_pass が unix:/run/php-fpm/www.sock と一致しているか確認
    • /run/php-fpm/www.sock の存在とパーミッションを確認

症状: ファイルアップロード時に 413 Request Entity Too Large

  • 対処: nginx の client_max_body_size を増やす(例 512M)。php.ini の upload_max_filesize, post_max_size も確認。

症状: Nextcloud ログやブラウザで “No database driver found”

  • 対処: php-mysqlnd がインストールされているか確認。php-fpm 再起動。

症状: Let’s Encrypt の発行が失敗する

  • 対処: HTTP-01 (webroot) を使用する場合、80 番ポートへ外部から到達可能であり、指定した –webroot-path にファイルが配置されることを確認。nginx が 80 をリッスンしているか。

受け入れ基準

  • HTTPS で Nextcloud のログインページにアクセスできること。
  • 管理者アカウントでログインし、ファイルのアップロード/ダウンロードができること。
  • cron による定期ジョブが動作していること(ログで確認)。
  • MariaDB に接続でき、Nextcloud のテーブルが作成されていること。

管理者と運用者のチェックリスト

管理者用(導入時):

  • ドメインと DNS が正しく設定されている
  • ポート 80/443 が開放されている
  • SELinux 設定を実施した
  • Nextcloud データディレクトリの所有権が nginx に設定されている
  • 証明書を取得して nginx に設定した

運用者用(運用日常):

  • certbot renew –dry-run を定期確認
  • Nextcloud と OS の更新計画を管理
  • バックアップの定期実行とリストア検証
  • 監視(ログ、トラフィック、ディスク使用量)を設定

代替アプローチと注意点

  • Apache を利用する場合は mod_php ではなく php-fpm を利用することを推奨します。Apache 用の設定は公式ドキュメントを参照してください。
  • データベースに PostgreSQL を使うことも可能です。Nextcloud は MySQL/MariaDB と PostgreSQL の両方に対応しています。
  • 大規模環境や高可用性が必要な場合は、外部ストレージ(S3、NFS)、分散 DB、ロードバランサを検討してください。

参考・リンク


まとめ

このガイドでは CentOS 8 に Nextcloud 17 を Nginx、PHP-FPM 7.3、MariaDB を使って導入する一連の手順を示しました。インストールだけでなく、SELinux の取り扱い、証明書管理、自動更新、運用チェックリストまでを含めています。運用を始めたら定期的なバックアップとアップデート、監視の設定を優先してください。

短い発表文(社内向け)

Nextcloud 17 を CentOS 8 に Nginx + PHP-FPM 7.3 + MariaDB でセットアップし、Let’s Encrypt による HTTPS を有効化しました。システムは SELinux 有効環境で稼働し、運用向けチェックリストとバックアップ手順を整備しています。

共有する: X/Twitter Facebook LinkedIn Telegram
著者
編集

類似の素材

Ubuntu 16.04でTripwireをインストール・設定
システム管理

Ubuntu 16.04でTripwireをインストール・設定

MacでのSplit Viewの使い方と活用法
使い方

MacでのSplit Viewの使い方と活用法

Wordで画像を箇条にする方法(2通り)
Microsoft Office

Wordで画像を箇条にする方法(2通り)

iPhoneでアプリを削除せずにキャッシュを削除する方法
iPhone

iPhoneでアプリを削除せずにキャッシュを削除する方法

Sony PSPを安全にクリーニングする方法
ハードウェア メンテナンス

Sony PSPを安全にクリーニングする方法

iPhoneロック画面のミュージックウィジェットを消す方法
iPhone トラブル

iPhoneロック画面のミュージックウィジェットを消す方法