はじめに
AWS のソリューションアーキテクトの更新時期が近づいてきているのですが、普段は AWS にほぼ縁のない Nextcloud の構築とか調査とかの業務がメインで、AWS のサービスをフォローアップすることがほとんどできず、さすがに何か準備しなきゃまずいなぁと思い始めました。
そこで、普段さんざん構築している Nextcloud の環境構築と AWS をうまくコラボしてなんかできないかな、と思い、表題のような記事を何回かに分けて書いていくことにしました。
そもそも論として、Nextcloud は自身のデータやファイル管理を Dropbox 等のクラウドサービスに頼らないで自身で管理しているサーバー機器で運用できることが最大のメリットとなるので、AWS に構築することに意味があるかどうかは微妙なところですが、いろいろなサービスがからむので、学習ネタにするには結構よいのではないかと思ってます。
ということで、回を追うごとに AWS の関連サービスが増えていく予定で、自分自身で使ったことあるサービス/使ったことのないサービスを盛り込み、知識のリハビリ、新たな学びと、楽しみながら記事を書いていければいいな、と思います。
「Nextcloud 環境の構築を通じて AWS での環境構築を体験する」 シリーズの記事は下記からどうぞ。
- 【第 1 回】EC2 と RDS を利用した Nextcloud 環境の構築
- 【第 2 回】ElastiCache サービスの導入
- 【第 3 回】EFS ファイルサーバーへの移行
- 【第 4 回】ALB を利用したサーバー負荷分散、可用性向上に向けた取り組み
- 【第 5 回】分散した EC2 インスタンスのログの集約
- 【第 6 回】Cron の外部実行とメール送信の追加
- 【第 7 回】AutoScaling の導入
今回構築する Nextcloud on AWS 環境
利用する AWS サービス
サービス名 | 役割 |
---|---|
Amazon EC2 | 仮想サーバー |
Amazon EBS | EC2 に接続して利用するブロックストレージ |
Amazon RDS | フルマネジメントのリレーショナルデータベースサービス |
Amazon VPC | 仮想のプライベートネットワークサービス |
利用するOS、ミドルウェア、アプリケーション
- CentOS 7
- Nextcloud 17.0.2
- Nginx 1.16
- PHP 7.3
- Redis 5
構築手順
今回は Nextcloud や関連ミドルウェアのインストールや設定が含まれるため、若干長めとなりますことをご了承ください。
EC2 インスタンスを起動する
今回はサーバー OS として CentOS 7 を利用します。
-
「CentOS 7 (x86_64) - with Updates HVM」を探し ("CentOS"のキーワードで検索するとたぶん一番上に出てくる) 、「選択」をクリックします。
-
CentOS 7 は無料の OS なので、"ソフトウェア" が "$0.00" となっており、EC2 の時間課金のみが行われることが確認できます。「Continue」をクリックします。
-
インスタンスタイプを選択します。無料枠内で試したい場合は 「t2.micro」 一択となりますが、Nextcloud サーバーとして利用する場合には、利用するメモリが意外と大きいため、メモリ 1GByte の t2.micro はちょっと足りない感じです。このため、これより高性能なインスタンスタイプがおススメです。今回は「t3.medium」を選択しました。「次のステップ:インスタンスの詳細の設定」をクリックします。
※T2 系と T3 系の違いは以下の記事がわかりやすいと思います。
【EC2】T系ファミリーの概要と、T2,T3の仕様の違いについてのまとめ -
インスタンスをどのように作成するかを設定していきます。ここでの設定は以下のとおりです。すべて設定したら「次のステップ: ストレージの追加」をクリックします。
-
EC2 はサーバーの処理(コンピューティング)をつかさどる部分となり、サーバーで動く OS、ミドルウェア、各種データを格納するストレージ(EBS)が必要となりますのでここで設定します。設定したら「次のステップ: タグの追加」をクリックします。
-
EC2 インスタンスに付与するタグを追加します。何も指定しなくても問題ありませんが、ここではインスタンス名(キー: "Name")を指定しています。(インスタンス名にマルチバイト文字を指定することは可能ですが、後で文字化けしますのでここでは1バイト文字を指定しておくことをおススメします。) 入力行が足りない場合は「別のタグを追加」をクリックすることで追加することができます。指定したら「次のステップ: セキュリティグループの設定」をクリックします。
-
EC2 に設定するセキュリティグループ(トラフィックを制御するファイアウォール)を設定します。これを設定しないとサーバーへの SSH 接続も何もできませんので必ず設定しましょう。入力行は「ルールの追加」で追加することができます。最低限下記の設定を行い、設定したら「確認と作成」をクリックします。
-
SSH 接続する際の接続キーをここで設定します。ここでは AWS に登録済みのキーペアを利用する前提としておりますが、新たに作成していただいても問題ありません。キーを設定したら「インスタンスの作成」をクリックします。
-
EC2 インスタンスの作成が開始されます。「i-xxxxxxxx」のリンクをクリックすることで、当該 EC2 インスタンスの作成状況を確認することができます。
-
下のように「インスタンスの状態」が「running」、ステータスチェックが「2/2 のチェックに合格しました」となっていれば無事作成完了です。サーバーへ SSH 等接続する場合の IP アドレスは 「IPv4 パブリック IP」 の項目で確認できます。
RDS を起動する
今回はデータベースとして MariaDB 10.3 を利用します。Nextcloud では、MySQL(5.5以上)、PostgreSQL(9.4以上)、Oracle(11g) も利用することができます。
-
RDS の設定を投入していきます。設定項目が多いので上から順に分けて書きます。まず以下を設定します。
項目 内容 データベース作成方法を選択 標準作成 エンジンのタイプ MariaDB -
引き続き以下を設定します。
項目 内容 バージョン MariaDB 10.3.13 (「.13」部分は作成時によって変わると思いますので適宜読み替えてください) 「テンプレート」は「開発/テスト」を選択します。 引き続き「設定」の設定です。以下を設定します。 項目 内容 DB インスタンス識別子 RDS サービスを AWS リージョン内で一意になるように名前を入力します。運が悪いとすでにリージョン内で利用されている可能性がありますので、その時はあきらめてほかの名前を入力してください。 -
認証情報の設定です。以下を設定します。
項目 内容 マスターユーザー名 DB インスタンスのマスターユーザーとして利用するログイン ID マスターパスワード マスターユーザーのログイン ID に対するパスワード パスワードを確認 マスターユーザーのログイン ID に対するパスワード(再入力) 続いて DB インスタンスタイプの設定です。以下を設定します。
項目 内容 DB インスタンスクラス バースト可能クラス (t クラスを含む)。 (下のプルダウン) DB インスタンスのタイプを選択します。今回は「db.t3.medium」を選択しておりますが、状況に応じて選択してください。 以前の世代のクラスを含める 有効にすると、旧タイプの DB インスタンスタイプを指定できます。 -
ストレージの設定です。以下を設定します。
-
可用性と耐久性の設定です。マルチ AZ 配置については、今回はスタンバイは作成しないので「スタンバイインスタンスを作成しないでください」を選択します。
続いて接続の設定です。「Virtual Private Cloud (VPC)」はデータベースをどの VPC に作成するかを選択します。ここは、先に作成した EC2 と同じ VPC を選択します。
さらに「▼ 追加の接続設定」をクリックすると表示が隠されている設定が現れます。
-
追加の接続設定です。以下を設定します。
項目 内容 サブネットグループ default-vpc-xxxxx を選択 パブリックアクセス可能 なし VPC セキュリティグループ 既存を選択 アベイラビリティゾーン 選択できるところのどこでも構いません。あえて ap-northeast-1d を選択しているのは、この アベイラビリティゾーンが新しいという個人的な好みです。 データベースポート 特に問題なければ、デフォルトポートのままで OK -
追加設定をしていきます。基本的にはほぼデフォルトで問題ありませんが、ここでは最低限の設定をしておきます。必要があればほかの設定も見直してください。まず以下を設定します。
項目 内容 最初のデータベース名 nextcloud -
拡張モニタリングの有効化のチェックは外します。拡張モニタリングは CloudWatch Logs に準じた追加料金が発生しますが必要があればチェックします。
-
データベースの作成が開始されます。データベース用のインスタンスやストレージの準備、初期バックアップの作成などが行われるため少し時間がかかります。何回かブラウザをリロードして赤枠部分の表示が消えたら作成完了です。
-
「2020 年 2 月 5 日までに Amazon RDS SSL/TLS 証明書を更新してください」の表示が出ていたら証明書の更新が必要です(なんで最初から新しい証明書で作ってくれないのだろう?)。出ていない場合は 17. にスキップしてください。
「保留中のメンテナンスアクションを表示」をクリックします。
-
「新しい CA 証明書をしないと、データベースへの SSL/TLS 接続が中断されることを理解しています。」をチェックして「今すぐ適用」をクリックします。
もし「今すぐ適用」をクリックして下のような画面になった場合には、データベースバックアップ処理などがまだ実施中であるので、しばらく待って再実行します。
Nextcloud 環境の構築
Nextcloud 環境は、SSH コンソールで構築します。
SSH 接続は、EC2 構築時に割り当てられた IP アドレスに対して行います。
認証は公開鍵方式となります。EC2 構築時に指定した(もしくは作成した)キーペアの秘密鍵ファイルを利用します。
OS の基本設定
-
構築に必要なパッケージのインストール
sudo yum install epel-release yum-utils unzip curl wget bash-completion -y sudo yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm -y
-
システムを最新状態にアップデート
sudo yum update -y
-
日本時間、日本ロケール、日本語キーボードの設定
sudo timedatectl set-timezone Asia/Tokyo sudo localectl set-locale LANG=ja_JP.utf8 sudo localectl set-keymap jp106
-
SELINUX の無効化
sudo vi /etc/selinux/config ※"SELINUX=enforcing" を "SELINUX=disabled" に修正します。
-
サーバー再起動
sudo reboot
-
再度 SSH 接続し、設定状況の確認
getenforce ※"Disabled" が表示されることを確認。 date ※現在の時刻が日本時間、日本語で表示されることを確認。
Nginx のインストール、設定
Nginx の最新版をインストールします。
-
リポジトリファイルの作成
sudo vi /etc/yum.repos.d/nginx.repo
/etc/yum.repos.d/nginx.repo[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1
-
Nginx のインストール
sudo yum install nginx -y
-
Nginx のインストール確認
nginx -v ※Nginx のバージョンが表示されることを確認。
-
Nginx の自動起動設定
sudo systemctl enable nginx
-
Nextcloud 向けの Nginx 設定ファイルの追加
sudo vi /etc/nginx/conf.d/nextcloud.conf
/etc/nginx/conf.d/nextcloud.confupstream php-handler { #server 127.0.0.1:9000; server unix:/var/run/php-fpm/php-fpm.sock; } server { listen 80; listen [::]:80; server_name 【Nextcloud を動かすサーバーの FQDN】; # enforce https return 301 https://$server_name:443$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name 【Nextcloud を動かすサーバーの FQDN】; # 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/letsencrypt/live/【Nextcloud を動かすサーバーの FQDN】/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/【Nextcloud を動かすサーバーの FQDN】/privkey.pem; # 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 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; # Remove X-Powered-By, which is an information leak fastcgi_hide_header X-Powered-By; # 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; # The following rule is only needed for the Social app. # Uncomment it if you're planning to use this app. #rewrite ^/.well-known/webfinger /public.php?service=webfinger last; 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; } # 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; } 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; # Avoid sending the security headers twice fastcgi_param modHeadersAvailable true; # Enable pretty urls 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; } # Adding the cache control header for js, css and map files # Make sure it is BELOW the PHP block location ~ \.(?:css|js|woff2?|svg|gif|map)$ { try_files $uri /index.php$request_uri; 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 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; # Optional: Don't log access to assets access_log off; } location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ { try_files $uri /index.php$request_uri; # Optional: Don't log access to other assets access_log off; } }
※【Nextcloud を動かすサーバーの FQDN】の部分はご自身の環境に合わせて適宜修正してください。
PHP のインストール、設定
PHP 7.3 系の最新版をインストールします。
-
PHP 7.3 の最新版ならびに関連パッケージをインストール。
sudo yum install --enablerepo=remi,remi-php73 php php-fpm php-cli php-common php-curl php-gd php-mbstring php-mysqlnd php-process php-xml php-zip php-opcache php-pecl-apcu php-intl php-pecl-redis php-pecl-zip php-pear -y
-
PHP 7.3 がインストールされたか確認。
php -v ※PHP 7.3.xx が表示されることを確認します。
-
PHP 設定ファイルを修正。
sudo cp -pi /etc/php.ini{,.orig} sudo vi /etc/php.ini ※"memory_limit = 128M" を "memory_limit = 512M" に修正します。
-
PHP-FPM 設定ファイルを修正。
sudo cp -pi /etc/php-fpm.d/www.conf{,.orig} sudo vi /etc/php-fpm.d/www.conf ※修正箇所が多いので、下の diff 結果を参照して修正してください。 diff /etc/php-fpm.d/www.conf.orig /etc/php-fpm.d/www.conf 24c24 < user = apache --- > user = nginx 26c26 < group = apache --- > group = nginx 38c38 < listen = 127.0.0.1:9000 --- > listen = /var/run/php-fpm/php-fpm.sock 48,50c48,50 < ;listen.owner = nobody < ;listen.group = nobody < ;listen.mode = 0660 --- > listen.owner = nginx > listen.group = nginx > listen.mode = 0666 396,400c396,400 < ;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:/home/centos/.local/bin:/home/centos/bin > env[TMP] = /tmp > env[TMPDIR] = /tmp > env[TEMP] = /tmp 425c425,427 < ;php_admin_value[memory_limit] = 128M --- > php_admin_value[memory_limit] = 512M > php_admin_flag[session.cookie_secure] = on > php_admin_flag[expose_php] = off
-
PHP セッションディレクトリのグループ情報を変更。
sudo chown -R root:nginx /var/lib/php/session
-
PHP-FPM の自動起動設定
sudo systemctl enable php-fpm
SSL 証明書 (Let's Encrypt) の取得
SSL 証明書は Let's Encrypt を利用して取得します。
取得にあたっては、あらかじめ、アクセス FQDN に対して EC2 サーバーの IP アドレスに名前解決ができるように DNS 登録を済ませておく必要があります。
-
certbot のインストール。git もないのでついでにインストール。
sudo yum install git -y cd /usr/local sudo git clone https://github.com/certbot/certbot
-
Let's Encrypt 証明書の取得。
cd certbot ./certbot-auto certonly --standalone -d 【Nextcloud を動かすサーバーの FQDN】 -m 【管理者のメールアドレス】--agree-tos -n ※実行結果として "- Congratulations! ・・・" が表示されれば作成は成功です。 cd
PHP-FPM、Nginx の起動
-
PHP-FPM を起動。
sudo systemctl start php-fpm systemctl status php-fpm ※"Active: active (running)" が表示されることを確認します。
-
Nginx を起動。
sudo systemctl start nginx systemctl status nginx ※"Active: active (running)" が表示されることを確認します。
MariaDB クライアントのインストール
-
MariaDB クライアントをインストール。
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash sudo yum install -y MariaDB-client
-
RDS で作成した MariaDB データベースに接続できるか確認。
mysql -h 【RDS で作成したデータベースのエンドポイント】 -u 【マスターユーザー名】 -p 【DB 名】 Enter password: ※マスターユーザーのパスワードを入力 ※"「MariaDB [【DB 名】]>" とプロンプトが表示されることを確認します。
-
Nextcloud データベースを利用する DB ユーザーを作成し、データベースへのアクセス権限を付与。
CREATE USER '【ユーザー名】'@'%' IDENTIFIED BY '【パスワード】'; GRANT SELECT, UPDATE, DELETE, INSERT, CREATE, DROP, INDEX, ALTER, LOCK TABLES, EXECUTE, CREATE TEMPORARY TABLES, TRIGGER, CREATE VIEW, SHOW VIEW, EVENT ON nextcloud.* TO '【ユーザー名】'@'%';
-
MariaDB コンソールを終了する。
exit
Nextcloud のインストール、設定
-
Nextcloud パッケージとチェックサムファイルを取得、パッケージの正当性を確認。
wget https://download.nextcloud.com/server/releases/nextcloud-17.0.2.tar.bz2 wget https://download.nextcloud.com/server/releases/nextcloud-17.0.2.tar.bz2.md5 md5sum -c nextcloud-17.0.2.tar.bz2.md5 < nextcloud-17.0.2.tar.bz2 ※"nextcloud-17.0.2.tar.bz2: 完了" が表示されることを確認します。
-
bzip2 を展開するために bzip2 を追加インストール。
sudo yum install bzip2 -y
-
ダウンロードしたNextcloudパッケージを展開、インストール。
tar xf nextcloud-17.0.2.tar.bz2 sudo cp -R nextcloud/ /var/www/html/ sudo chown -R nginx:nginx /var/www/html/nextcloud
-
Nextcloud データ保存用ディレクトリの作成、権限設定。
sudo mkdir /DATA sudo chown -R nginx:nginx /DATA
-
PHP-FPM を再起動。
sudo systemctl restart php-fpm
-
ブラウザで
https://【Nextcloud を動かすサーバーの FQDN】/
にアクセス。下のような画面が表示が確認できたら、各種設定を投入。項目 内容 管理者アカウント Nextcloud 管理者アカウントをまず作成します。このアカウントのユーザー ID を入力します。 パスワード 管理者アカウントのパスワードを入力します。 引き続いて「ストレージとデータベース ▼」のリンクをクリックすることで追加の登録フォームが表示されます。
メモリキャッシュ (Redis) のインストール、設定
-
Redis をインストール。
sudo yum install --enablerepo=remi redis -y
-
Redis の自動起動を設定し、Redis サービスを起動。
sudo systemctl enable redis.service sudo systemctl start redis.service
-
Nextcloud 設定ファイルの修正。
sudo cp -pi /var/www/html/nextcloud/config/config.php{,.orig} sudo vi /var/www/html/nextcloud/config/config.php ※以下の diff 結果のように設定行を追加します。 sudo diff /var/www/html/nextcloud/config/config.php.orig /var/www/html/nextcloud/config/config.php 21a22,29 > 'memcache.distributed' => '\\OC\\Memcache\\Redis', > 'memcache.locking' => '\\OC\\Memcache\\Redis', > 'memcache.local' => '\\OC\\Memcache\\APCu', > 'redis' => > array ( > 'host' => 'localhost', > 'port' => 6379, > ),
-
PHP-FPM 設定ファイルの修正。
sudo cp -pi /etc/php-fpm.d/www.conf{,.orig2} sudo vi /etc/php-fpm.d/www.conf ※以下の diff 結果のように設定を修正します。 diff /etc/php-fpm.d/www.conf.orig2 /etc/php-fpm.d/www.conf 437,438c437,438 < php_value[session.save_handler] = files < php_value[session.save_path] = /var/lib/php/session --- > php_value[session.save_handler] = redis > php_value[session.save_path] = "tcp://localhost:6379/"
-
PHP-FPM を再起動。
sudo systemctl restart php-fpm
PHP OPcache の設定
-
PHP 設定ファイルの修正。
sudo cp -pi /etc/php.d/10-opcache.ini{,.orig} sudo vi /etc/php.d/10-opcache.ini ※以下の diff 結果のように設定を修正します。 diff /etc/php.d/10-opcache.ini.orig /etc/php.d/10-opcache.ini 18c18 < opcache.max_accelerated_files=4000 --- > opcache.max_accelerated_files=10000 36c36 < ;opcache.revalidate_freq=2 --- > opcache.revalidate_freq=1 43c43 < ;opcache.save_comments=1 --- > opcache.save_comments=1
-
PHP-FPM を再起動。
sudo systemctl restart php-fpm
ImageMagick の導入
-
ImageMagick 関連パッケージのインストール。
sudo yum install https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick-libs-7.0.9-14.x86_64.rpm -y sudo yum install https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick-7.0.9-14.x86_64.rpm -y sudo yum install https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick-devel-7.0.9-14.x86_64.rpm -y sudo yum install --enablerepo=remi,remi-php73 php-devel -y sudo pecl install imagick ※入力待ちになったら [ENTER] を押下してください。
-
PHP 設定ファイルの修正。
sudo cp -pi /etc/php.ini{,.orig2} sudo vi /etc/php.ini ※最終行に以下の 2 行を追加します。 [PECL] extension=imagick.so
-
PHP-FPM を再起動。
sudo systemctl restart php-fpm
一部データベースカラムの big int 変換
-
big int 変換を行う Nextcloud occ コマンドを実行。
sudo -u nginx php /var/www/html/nextcloud/occ db:convert-filecache-bigint ※確認が求められたら [y] を入力します。
追加設定後の確認
以下のように「すべてのチェックに合格しました。」と表示されれば OK です。
バックグラウンドジョブの設定
Nextcloud では、データの適正化を図るなどの目的でバックグラウンドジョブが動作しております。
デフォルトでは "AJAX" モードとなっており、各ぺーじの読み込みごとにバックグラウンドジョブが起動するようになっておりますが、これを CRON で動かすように変更します。
-
Cron 定義ファイルを作成します。バックグラウンドジョブは 5分おきに実行されるようにしています。
sudo sh -c "echo '*/5 * * * * nginx php -f /var/www/html/nextcloud/cron.php' > /etc/cron.d/nextcloud-cron-php"
-
Cron の実行ログを確認し、エラーが出ていないことを確認。
tail -f /var/log/cron
※私が試していた時には
(CRON) ERROR chdir failed (/var/cache/nginx): そのようなファイルやディレクトリはありません
というエラーメッセージがでました。もし同様に発生した場合には以下のようにディレクトリを追加します。sudo mkdir /var/cache/nginx
-
再びバックグラウンドジョブの画面を確認します。「最終ジョブ実行」が定期的に更新され、グリーンシグナルとなっていれば問題ありません。
お疲れさまでした! これですべての設定が完了です。
あとがき
今回は Nextcloud 自体の初期構築を含んだため手順が多くなってしまいました。最後まで読んでいただいた方、本当にありがとうございました。
次回は、EC2 サーバーにインストールした Redis を EC2 から分離してみます。