テクノロジーガイド

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
著者
編集

類似の素材

Debian 11 に Podman をインストールして使う
コンテナ

Debian 11 に Podman をインストールして使う

Apt-pinning入門:Debianで複数リポジトリを管理
Linux

Apt-pinning入門:Debianで複数リポジトリを管理

OptiScalerでFSR 4を全対応ゲームに導入する方法
ゲーム

OptiScalerでFSR 4を全対応ゲームに導入する方法

Dansguardian と Squid(NTLM)を Debian Etch に導入する方法
ネットワーク

Dansguardian と Squid(NTLM)を Debian Etch に導入する方法

AndroidでSDカードのインストールエラーを修正する方法
トラブルシューティング

AndroidでSDカードのインストールエラーを修正する方法

KNetAttach と KDE の remote:/ でネットワークフォルダーを設定
Linux ネットワーク

KNetAttach と KDE の remote:/ でネットワークフォルダーを設定