写真、動画、大切なファイル…データの保管場所、もっと安心・安全に、そして自由にしたいと思いませんか?
この記事では、Nextcloudを使って、あなただけのプライベートクラウドを構築する方法を分かりやすく解説します。
Nextcloudとは
Nextcloudについて少し紹介します。Wikipediaの情報によると
Nextcloudは、オンラインストレージの作成と使用のためのクライアント・サーバ型のソフトウェアである。機能的にはDropboxに似ているが、Dropboxはオフプレミスのオンラインストレージサービスは提供しない。Nextcloudはフリーかつオープンソースなので、誰でも自分のプライベートサーバ(英語版)にインストールして利用することができる。
https://ja.wikipedia.org/wiki/Nextcloud
簡単にまとめると、Google DriveやDropboxみたいなクラウドストレージを自分のパソコン(サーバー)で動かすことができるサーバーソフトウェアです。
導入環境
Nextcloudを導入する環境を紹介します。
- multipass
- Ubuntu 24.04 LTS
- 2コアCPU
- 4GBメモリ
- 64GBストレージ
この記事では検証環境に仮想マシンの「multipass」を使用しました。multipass以外でもUbuntu24.04が動く環境であれば何でもいい(はず)です。
また、Ubuntuのバージョンに関しては、LTSのものであればインストールできると思います。(検証はしていません。)
ストレージはクラウドストレージに預けられるデータの容量になるので、自分の環境に合わせてストレージサイズを変更する必要があります。


環境構築
環境を構築していきます。
まずは、毎度お馴染みのコマンドをターミナルで実行します。
$ sudo apt update
では、順番に必要なソフトをインストールしていきます。
Apache2をインストール
Apacheをインストールしていきます。
$ sudo apt install apache2
インストールできたので、実際にアクセスすることができるかを確認します。
ブラウザを起動してサーバのIPアドレスを入力します。
サーバのIPアドレスは、以下のコマンドを実行することで確認できます。
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:7c:cf:27 brd ff:ff:ff:ff:ff:ff
altname enp0s3
inet 192.168.64.10/24 metric 100 brd 192.168.64.255 scope global dynamic ens3
valid_lft 86128sec preferred_lft 86128sec
inet6 fd63:50f6:7781:63e2:5054:ff:fe7c:cf27/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 2591955sec preferred_lft 604755sec
inet6 fe80::5054:ff:fe7c:cf27/64 scope link
valid_lft forever preferred_lft forever
アクセスするとApacheのテストページが表示すると思います。

これでApacheのインストールが完了しました。
PHP-FPMをインストール
php-fpmをインストールします。
$ sudo apt install php8.3-fpm
Apacheに必要なモジュールを有効化します。
$ sudo a2enmod proxy_fcgi setenvif
PHP-FPMの設定をApacheで有効化します。
$ sudo a2enconf php8.3-fpm
設定を反映させるためにサービスを再起動します。
$ sudo systemctl restart php8.3-fpm apache2
これでPHP-FPMのインストールが完了しました。
MySQLのインストールとデータベースの設定
MySQLをインストールします。
$ sudo apt install mysql-server
インストールが完了したら、Nextcloudで使うデータベースの設定をしていきます。
まず、MySQLにログインします。
$ sudo mysql
次に、Nextcloud用のデータベースユーザーを作成します。
> CREATE USER 'nextuser'@'localhost' IDENTIFIED BY 'password';
データベースユーザーを作成できたのでNextcloud専用のデータベースも作成します。
> CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
作成したユーザーに、Nextcloud用データベースへの権限を与えます。
> GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextuser'@'localhost';
最後に、権限の変更を適応させます。
> FLUSH PRIVILEGES;
作業が完了したので、MySQLからログアウトします。
> quit;
これでMySQLのインストールとデータベースの設定が完了しました。
Nextcloudのインストール
Nextcloudを構築していきます。
PHPとPHPモジュールをインストールしていきます。
$ sudo apt -y install php8.3-mbstring php8.3-intl php8.3-gd php8.3-zip php8.3-bz2 php8.3-mysql php8.3-bcmath php8.3-gmp php8.3-opcache php8.3-imagick php8.3-curl php8.3-soap php8.3-redis php-pear php-json php-apcu libmagickcore-6.q16-7-extra redis-server unzip
PHP-FPMの設定ファイルを作成し、編集します。
それぞれのパラメーターは記事最後の方に
$ sudo nano /etc/php/8.3/fpm/pool.d/nextcloud.conf
[nextcloud]
user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data
listen = /run/php/nextcloud.sock
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/sessions
php_value[max_execution_time] = 3600
php_value[memory_limit] = 512M
php_value[post_max_size] = 2G
php_value[upload_max_filesize] = 2G
php_value[max_input_time] = 3600
php_value[max_input_vars] = 2000
php_value[date.timezone] = Asia/Tokyo
php_value[opcache.memory_consumption] = 128
php_value[opcache.interned_strings_buffer] = 32
php_value[opcache.max_accelerated_files] = 10000
php_value[opcache.revalidate_freq] = 1
php_value[opcache.save_comments] = 1
php_value[opcache.jit] = 1255
php_value[opcache.jit_buffer_size] = 128M
設定が終わったら設定を適用します。
$ sudo systemctl restart php8.3-fpm
NextcloudをApacheに設定していきます。ダウンロード→展開→アクセス権変更の順で作業をしていきます。
最初にダウンロードします。
$ wget https://download.nextcloud.com/server/releases/latest.zip
ls
latest.zip
続いて、ダウンロードしたファイルを展開します。
$ unzip latest.zip
$ ls
latest.zip nextcloud
最後にフォルダーをコピーしてアクセス権を変更します。
$ sudo cp -r nextcloud /home/remylog/www/remylog_blog/
$ sudo chown -R www-data:www-data /home/remylog/www/remylog_blog/nextcloud/
Apacheの設定をしていきます。
アクセスルートなどの設定ファイルを作成します。
$ sudo nano /etc/apache2/conf-available/nextcloud.conf
Timeout 3600
ProxyTimeout 3600
DirectoryIndex index.php index.html
Header set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
<VirtualHost *:80>
DocumentRoot /home/remylog/www/remylog_blog/nextcloud
ServerName domain.com
</VirtualHost>
<Directory "/home/remylog/www/remylog_blog/nextcloud">
Options FollowSymLinks MultiViews
AllowOverride All
Require all granted
<FilesMatch \.(php|phar)$>
SetHandler "proxy:unix:/run/php/nextcloud.sock|fcgi://localhost"
</FilesMatch>
</Directory>
ServerName domain.com
の部分の domain.com
のところは、自分のドメイン名を入力して下さい。
ローカルで実行する場合は、.lan
にするといいと思います。
最後に設定を適応して終了です。
$ sudo a2enconf nextcloud
$ sudo a2enmod headers
$ sudo a2enmod rewrite
$ sudo systemctl restart apache2
Nextcloudの設定
Nextcloudをインストールできたのでアクセスしてみます。
ブラウザを起動してサーバのIPアドレスを入力します。

アクセスできたら必要な項目を入力します。
項目 | 内容 |
ログイン | ログイン時のユーザー名 |
パスワード | ログイン時のパスワード |
データフォルダー | /home/remylog/www/remylog_blog/nextcloud/data |
データベースアカウント | データベース作成時のアカウント名 |
データベースのパスワード | データベース作成時のパスワード |
データベース名 | データベース作成時のデータベース名 |
データベースのホスト名 | localhost |

「インストール」をクリックしたら推奨アプリを選択します。必要なものにチェックを入れて「推奨アプリをインストール」をクリックします。

インストールが終わったらNextcloudのポップアップを閉じます。
これでセットアップ完了です。
PHP-FPMのパラメーター
PHP-FPMのパラメーターについて少し説明していきます。このパラメーターはNextcloudのパフォーマンスにも影響があるのでサーバースペックと使用状況に合わせて調節する必要があります。
php_value[max_execution_time] = 3600
php_value[memory_limit] = 512M
php_value[post_max_size] = 2G
php_value[upload_max_filesize] = 2G
php_value[max_input_time] = 3600
php_value[max_input_vars] = 2000
php_value[date.timezone] = Asia/Tokyo
php_value[opcache.memory_consumption] = 128
php_value[opcache.interned_strings_buffer] = 32
php_value[opcache.max_accelerated_files] = 10000
php_value[opcache.revalidate_freq] = 1
php_value[opcache.save_comments] = 1
php_value[opcache.jit] = 1255
php_value[opcache.jit_buffer_size] = 128M
下の方にこのような内容が書かれていると思います。この中から重要な項目を解説していきます。
php_value[memory_limit] = 512M
はPHPプロセスが使用できるメモリの上限です。メモリに余裕がある場合は少し上げてもいいと思います。
php_value[post_max_size] = 2G
はPOSTリクエストの最大サイズです。
php_value[upload_max_filesize] = 2G
はアップロードファイルの最大サイズです。
php_value[max_execution_time] = 3600
はPHPの実行時間の上限です。ここの値を0にすると待ち時間が無制限になります。
これらの設定をすることで快適にNextcloudを使うことができます。
セキュリティ&セットアップ警告の設定
セキュリティ&セットアップ警告の設定を確認します。右上のアイコンをクリックして「管理者設定」をクリックします。

そして、「概要」をクリックします。

今回は以下のエラーを修正していきます。
・安全ではないHTTP経由でのサイトへのアクセス。代わりにHTTPSを要求するようにサーバーを設定することを強くお勧めします。そうしないと「クリップボードにコピー」や「service workers」のような重要なウェブ機能が動作しません! 詳細については、ドキュメント↗を参照してください。
・サーバーにはメンテナンスウィンドウの開始時間が設定されていません。これは、リソースを多く使用する日常のバックグラウンドジョブが、メインの利用時間中にも実行されることを意味します。利用者がこれらの重いタスクによる負荷の影響を受けにくくするために、低い利用時間に設定することをおすすめします。 詳細については、ドキュメント↗を参照してください。
・One or more mimetype migrations are available. Occasionally new mimetypes are added to better handle certain file types. Migrating the mimetypes take a long time on larger instances so this is not done automatically during upgrades. Use the command `occ maintenance:repair --include-expensive` to perform the migrations.
・いくつかの欠落しているオプションのインデックスを検出しました。データベースのパフォーマンスを向上させるために、(Nextcloudまたはインストールされたアプリケーションによって)新しいインデックスが追加されることがあります。インデックスの追加には時間がかかり、一時的にパフォーマンスが低下することがあるため、アップグレード時には自動的には行われません。インデックスが追加されると、それらのテーブルへのクエリが速くなるはずです。インデックスを追加するには、`occ db:add-missing-indices` コマンドを使用してください。インデックスが不足: "mail_messages_strucanalyz_idx" テーブル内の "mail_messages", "mail_class_creat_idx" テーブル内の "mail_classifiers", "mail_acc_prov_idx" テーブル内の "mail_accounts", "mail_alias_accid_idx" テーブル内の "mail_aliases", "systag_by_objectid" テーブル内の "systemtag_object_mapping", "mail_messages_mb_id_uid_uidx" テーブル内の "mail_messages", "mail_smime_certs_uid_email_idx" テーブル内の "mail_smime_certificates", "mail_trusted_senders_idx" テーブル内の "mail_trusted_senders", "mail_coll_idx" テーブル内の "mail_coll_addresses". 詳細については、ドキュメント↗を参照してください。
・データベースがトランザクションファイルロックに使われています。パフォーマンスをあげるには、可能であればメモリーのキャッシュを設定してください。 詳細については、ドキュメント↗を参照してください。
・メモリキャッシュが設定されていません。パフォーマンスを向上させるため、利用可能であればメモリキャッシュを設定してください。 詳細については、ドキュメント↗を参照してください。
・ご使用のシステムには、デフォルトの電話地域が設定されていません。これは、プロフィール設定で国コードなしの電話番号を有効にするために必要です。国コードなしの電話番号を許可するには、"default_phone_region" を地域の ISO 3166-1 コードとともに設定ファイルに追加してください。 詳細については、ドキュメント↗を参照してください。
・メールサーバーの設定が未設定または未確認です。「基本設定」で設定を行ってください。その後、フォームの下にある「メールを送信」ボタンで設定を確認してください。 詳細については、ドキュメント↗を参照してください。
最初に、データベース関係のエラーを修正していきます。以下のコマンドを実行します。
$ sudo -u www-data php --define apc.enable_cli=1 /home/remylog/www/remylog_blog/nextcloud/occ db:add-missing-indices
実行したら一旦Apacheを再起動します。
$ sudo systemctl reload apache2
再起動後、概要をチェックするとエラーが減っていることがわかります。
ここからはNextcloudの設定ファイルを編集していきます。
$ sudo nano /home/remylog/www/remylog_blog/nextcloud/config/config.php
<?php
$CONFIG = array (
'instanceid' => 'ocagt9fqxk5k',
'passwordsalt' => 'KJbBWV/y6bzvlIg3fIgZfPDJBl1aVc',
'secret' => 'Wgm4v4033Vv1FwzEPeTATxaDAQLZpEmQLn1vDrXfqg6tLp2B',
'trusted_domains' =>
array (
0 => '192.168.64.3',
),
'datadirectory' => '/home/remylog/www/remylog_blog/nextcloud/data',
'dbtype' => 'mysql',
'version' => '30.0.2.2',
'overwrite.cli.url' => 'http://192.168.64.3',
'dbname' => 'nextcloud',
'dbhost' => 'localhost',
'dbport' => '',
'dbtableprefix' => 'oc_',
'mysql.utf8mb4' => true,
'dbuser' => 'nextuser',
'dbpassword' => 'password',
'installed' => true,
<ーー ここに追加していく ーー>
);
「安全ではないHTTP経由でのサイトへのアクセス。…」のエラーは以下のコードを追加します。
ただ、ローカル環境でこれを有効にするとアクセスできなくなる場合があるので注意してください。
'overwriteprotocol' => 'https',
「ご使用のシステムには、デフォルトの電話地域が設定されていません。」のエラーは以下のコードを追加します。
'default_phone_region' => 'JP',
「データベースがトランザクションファイルロックに使われています。」のエラーは以下のコードを追加します。
'memcache.locking' => '\OC\Memcache\Redis',
「メモリキャッシュが設定されていません。」のエラーは以下のコードを追加します。
'memcache.local' => '\OC\Memcache\APCu',
「サーバーにはメンテナンスウィンドウの開始時間が設定されていません。」のエラーは以下のコードを追加します。
'maintenance_window_start' => 1,
これでNextcloudの設定ファイルの編集が終わりました。以下に編集後の設定ファイルを載せておきます。
※黄色のマーカー部分が今回追加した内容
<?php
$CONFIG = array (
'instanceid' => 'ocagt9fqxk5k',
'passwordsalt' => 'KJbBWV/y6bzvlIg3fIgZfPDJBl1aVc',
'secret' => 'Wgm4v4033Vv1FwzEPeTATxaDAQLZpEmQLn1vDrXfqg6tLp2B',
'trusted_domains' =>
array (
0 => '192.168.64.3',
),
'datadirectory' => '/home/remylog/www/remylog_blog/nextcloud/data',
'dbtype' => 'mysql',
'version' => '30.0.2.2',
'overwrite.cli.url' => 'http://192.168.64.3',
'dbname' => 'nextcloud',
'dbhost' => 'localhost',
'dbport' => '',
'dbtableprefix' => 'oc_',
'mysql.utf8mb4' => true,
'dbuser' => 'nextuser',
'dbpassword' => 'password',
'installed' => true,
'overwriteprotocol' => 'https',
'default_phone_region' => 'JP',
'maintenance' => false,
'memcache.locking' => '\OC\Memcache\Redis',
'memcache.local' => '\OC\Memcache\APCu',
'maintenance_window_start' => 1,
);
変更を保存したらApacheを再起動して適応します。
$ sudo systemctl restart apache2
そのほかのエラーも修正していきます。
「One or more mimetype migrations are available.」のエラーは以下のコードを追加します。
$ sudo -u www-data php /home/remylog/www/remylog_blog/nextcloud/occ maintenance:repair --include-expensive
「メールサーバーの設定が未設定または未確認です。」のエラーを修正していきます。
この設定を行う前にユーザーにメールアドレスを登録します。アカウントのアイコンをクリックして「個人情報」をクリックします。そしてメールの部分に受け取れるメールアドレスを入力します。

これは管理画面から修正していきます。管理者設定 → 基本設定 に移動します。
下の方にスクロールして「メールサーバー」の項目をチェックします。ここに必要な内容を記入して「メールを送信」をクリックします。

テストメールが来たら完了です。
これで一通りのエラーの修正が終わりました。これ以外のエラーがある場合は、Nextcloudの公式ドキュメントやほかのブログを参考にして修正してください。
まとめ
今回は、Nextcloudの構築方法を紹介しました。内容をおさらいすると、
- Apache2をインストール
- PHP-FPMをインストール
- MySQLのインストールとデータベースの設定
- Nextcloudのインストール
- Nextcloudの設定
- セキュリティ&セットアップ警告の設定
です。
最後の「セキュリティ&セットアップ警告の設定」は、環境によって出るエラーが変わるので少し難しいところです。Nextcloudの公式ドキュメントやほかのブログを参考にして修正していきましょう!
参考リンク

コメント