前回はNGINXとMariaDB + phpMyAdminのセットアップを行いました
続いてWebコンテンツ管理システム(CMS)であるDrupalの構築を行います
今回のコンポーネント
コンポーネント | 利用しているもの |
---|---|
Webサーバ | NGINX 1.18 |
データベース | MariaDB 10.3 |
コンテンツ管理(CMS) | Drupal9 |
Drupal
Drupalはコンテンツ管理はもちろん、優れた拡張性と柔軟性を備えていてWebフレームワークとしても耐えうるスペックを持っています。
大規模の会員サイトやECサイトなどでの実績も多数あり、個人用サイトとしてはオーバースペックではありますが、Wordpressは以前使っていたこともあり新たなチャレンジとして本サイトでは利用してみたいと思います。
Drupalの特徴
Drupalの特徴は、公式サイトでは次のように紹介されています。
- 簡易なコンテンツ作成
- 信頼できるパフォーマンス
- 優れたセキュリティ
- 柔軟性とモジュール化
Drupalのインストールには、各種用途向けにパッケージ化されたディストリビューションの利用、開発用途向けのDDEVというDockerベースの事前設定済みツールなどもありますが、今回はDrupalコミュニティお勧めのPHPのパッケージ管理システムであるComposerを使ってのインストールを進めます。
Drupalインストール前の確認
公式インストールガイドに従って事前確認を行います。
先に結論をお伝えすると、Drupal9を各種Linuxディストリビューションの公式パッケージベースで構築しようとすると、Ubuntu 20.04LTSまたはCentOS 8.1以降が必要です。
ディスクサイズ
Drupalコアソフトウェアはおおよそ100MBを利用します。
その他に、今後展開するコンテンツサイズも見越したディスク容量を確保してください。
PHP
Drupal9ではPHP7.3以降のバージョンが必要です。
PHPでは最低64MB以上のメモリサイズが必要です。
また、Drupalコアソフトウェアや各種モジュールはPHP extensionが必要です。
Webサーバ
今回はNGINXを利用しますが、その他のWebサーバを利用する際の条件も転記します。
Apache
Drupal公式ではApacheが推奨となっています。
DrupalコアソフトウェアはApache 2.4.7以降で、mod_rewriteモジュールが有効化された環境が必要です。
ApacheのVirutalHost設定には.htaccessファイルで利用するAllow Overrideディレクティブの値をAllとする必要があります。
PHP Local Server
趣味の世界ですね。。。
テンポラリでの利用であれば、Webサーバをインストールせずともサーバ上のPHPを利用することも可能です。
NGINX
Drupalコアソフトウェアはnginx 0.7以降で、ngx_http_rewrite_moduleが有効化された環境が必要です。
Microsoft IIS
PHPが正しく設定されたIIS 5,6,7,8,10で利用可能です。
IIS 7/8ではMicrosoft URL Rewrite moduleかサードパーティ製のモジュールが必要です。
データベース
今回はMariaDBを利用しますが、各種DBの要件も記載します
MySQL
5.7.8以降(InnoDB互換ストレージエンジンが必要)
MariaDB
10.3.7以降(InnoDB互換ストレージエンジンが必要)
PostgreSQL
10.0以降(pg_trgmが必要)
SQLite
3.26以降
デモサイトなどを簡易に作成する際はPHPにバンドルされたSQLiteの利用は簡単ですが、バージョンが要件を満たすかの確認が必要です。
Composerセットアップ
Drupalのインストールにあたり、今回はDrupalコミュニティお勧めのPHPのパッケージ管理システムであるComposerをセットアップします
Composerのインストール
最新版のComposerを利用するには、Composer公式サイトのダウンロードページを参照ください。
下記はComposer v2.0.13(2021/5/6時点最新版)をベースに記載しています
# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc
62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3')
{ echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer
-setup.php'); } echo PHP_EOL;"
# php composer-setup.php
# php -r "unlink('composer-setup.php');"
# mv composer.phar /usr/local/bin/composer
例では以下を順番に実行しています
ベリファイ用のハッシュ値などはインストールするタイミングで異なりますので、実行時はComposer公式サイトのダウンロードページを参照ください
- 最新版のインストーラをダウンロード
- ダウンロードしたファイルのベリファイ(SHA384)
- インストーラ(composer-setup.php)実行
- インストーラ(composer-setup.php)削除
- 作成された実行ファイル(composer.phar)をパスが通っているディレクトリに移動(/usr/local/bin)
Composerを利用してDrupal9をインストール
今更ですが、コマンド実行例とユーザスイッチ方法
ここまではroot権限で実行していきましたが、以下はnginxの実行ユーザであるwww-dataで実行します
コマンド実行例 # コマンド rootでのコマンド実行 user$ コマンド ユーザ(user)でのコマンド実行 |
複数ユーザで管理するシステムでは、sudoを使ってのコマンド実行などルールがあると思いますので、環境によって使い分けしてください
特定ユーザ権限でのコマンド実行
例)ユーザubuntuでログインしている際に、ユーザ www-dataでmkdirコマンド実行
特定ユーザでのシェル実行 パスワードを設定していない特定ユーザでシェルを実行したい場合は以下のようなことも可能です
|
さて、本題であるdrupalのセットアップに進みます
composerを利用してdrupal 9をセットアップ
今回は、ディレクトリ /var/www/drupal 以下にdrupalをインストールします
www-data$ composer create-project drupal/recommended-project:9.1.8 /var/www/drupal
ちなみに、root権限でcomposerを実行すると下記のような警告が出ますので、nginxの実行ユーザである「www-data」で実行するようにします
Do not run Composer as root/super user! See https://getcomposer.org/root for details
composerを利用してdrush 9をセットアップ
続いて、コンソール上からDrupalを操作できるDrushをインストールします
www-data$ cd /var/www/drupal
www-data$ composer require drush/drush
以上でインストールは完了です。
Drushの実行ファイルはvender/bin/drushにインストールされるので、./vender/bin/drushのようにコマンドを打てば実行できますが面倒ですね。
1プロジェクトだけであれば環境変数のPATHに追加すれば対応することも可能ですが、複数プロジェクトを利用する際は現実的ではありません。
そこで、パスを通さずともdrushコマンドを利用できるDrush Launcherを導入します。
Drush Launcherとは
Drush Launcher は drush コマンドを実行したカレントディレクトリを見て、適切なDrush を呼び出す Drush のラッパーコマンドです。
composer.json があるディレクトリ配下であれば、どこで drush コマンドを実行してもプロジェクトにインストールされた Drush を呼び出すため、都度パスを考えて打つ必用がなくDrush を実行することができます。
Drush Launcherインストール
Drush公式サイトに書かれた手順通りにインストールを行います
# wget -O drush.phar https://github.com/drush-ops/drush-launcher/releases/latest/download/drush.phar
# mv drush.phar /usr/local/bin
# chown www-data:www-data /usr/local/bin/drush
# chmod 755 /usr/local/bin/drush
- 公式サイトからファイルをダウンロード
- PATHが通っているディレクトリ/usr/local/binへ移動
- ファイルの所有者をnginx実行ユーザに変更
- 実行権限を付与
(参考)Drush Launcherのアップデート
新バージョンが出た際はDrush Launcherはコマンドでアップデートが可能です
# drush self-update
Drupal用データベース作成
前回の記事でセットアップしたphpMyAdmin、もしくはコマンドラインでデータベースを作成します。
今回は、DB名、ユーザ名共にdrupalとします。
MariaDB/MySQLを利用する際は、照合順序(collation)をutf8mb4_general_ciもしくはutf8mb4_unicode_ciにします。
コマンドラインで作成する場合は以下となります。パスワードは適宜変更ください。
# mysql -u root -p
CREATE DATABASE drupal;
GRANT ALL ON drupal.* TO 'drupal'@'localhost' IDENTIFIED BY 'Str0ngDrupaLP@SS';
FLUSH PRIVILEGES;
\q
尚、aptでMariaDBをインストールした際は、MariaDB標準の照合順序(collation)は/etc/mysql/mariadb.conf.d/50-server.cnfに記載があります。
変更していない場合はutf8mb4_general_ciとなります。
NGINXの設定変更
drupalを使うために、NGINXの設定ファイルを作成します
前回の記事で記載した通り、固定のグローバルIP1個をもつVPS環境(WebARENA Indigo)を利用し、独自ドメインを利用するため、1台のサーバで公開用のホスト名と、各種管理機能用のホスト名を分離して利用します。
今回は公開用サイトとしてdrupal9をセットアップします。
用途 | ホスト名(FQDN) |
---|---|
公開用 | www.your-domain.com |
管理用 | manage.your-domain.com |
設定ファイル作成
# vim /etc/nginx/sites-availavie/drupal9
Drupal公式サイトのサンプルコンフィグをベースにしてサンプルを記載します。
server { listen 80; ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; ## Let's Encryptで作成したワイルドカード証明書を指定 # Redirect HTTP to HTTPS 強制的にHTTPSアクセスに変更 location = /favicon.ico { rewrite ^/core/authorize.php/core/authorize.php(.*)$ /core/authorize.php$1; location ~ \..*/.*\.php$ { location ~ ^/sites/.*/private/ { # Block access to "hidden" files and directories whose names begin with a location / { location @rewrite { # In Drupal 8, we must also match new paths where the '.php' appears in the middle, # Fighting with Styles? This little gem is amazing. location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { |
作成したコンフィグファイルを有効にします
# ln -s /etc/nginx/sites-available/drupal /etc/nginx/sites-enabled/
# nginx -t
# systemctl restart nginx
- /etc/nginx/sites-enabled/にリンクを作成
- コンフィグ書式確認
- nginx再起動
Drupal初期セットアップ
無事起動が出来たら、アクセスを許可した環境からブラウザ経由でアクセスします。
https://www.your-domain.com/
初期アクセス時はインストーラ/core/install.phpが起動します。
言語選択
日本語を選択
プロファイル選択
標準を選択
必要条件の検証
システムが要件を満たしているか確認が入ります。問題なければデータベースのセットアップに進みます。
データベースのセットアップ
スクリーンショットの取得が漏れてしまったため、項目のみ記載します
項目 | 値 |
---|---|
データベースのタイプ | 「MySQL, MariaDB, Percona Serverまたは同等のもの」を選択 |
データベース名 | 作成したデータベース(drupal) |
データベースのユーザー名 | 作成したデータベースユーザー(drupal) |
データベースのパスワード | データベース作成時に指定したパスワード |
高度なオプション | 標準のまま(ホスト:localhost、TCPポート:3306、テーブル名プレフィックス:なし) |
この後にデータベースの作成、翻訳の作成、設定ファイルの作成などが実施されます
サイトの環境構築
作成するWebサイトの情報を入力します
- サイト名
- サイト管理用のメールアドレス
- サイト管理用初期アカウント(ユーザ名、パスワード、メールアドレス)
- 地域設定(国、タイムゾーン)
- 更新通知(自動的なアップデート確認の有無、メール通知有無)
セットアップ
インストール完了すると、初期画面が表示されます
まずはここまでとします。
今後、テーマのインストール、拡張機能のインストールなど追加していきます。
次回はPostfix、Dovecot、PostfixAdminを使って送受信用のメールサーバのセットアップを行います。
SPF / DKIM / Dmarcなど自サーバの信頼度向上、Amavis / ClamAV / SpamAssasinなど受信メールのSPAM/セキュリティ対策なども実施していきます。
Drupal9を始めるにあたって、Drupal 9 Web開発ことはじめ (技術の泉シリーズ(NextPublishing)が発売されたそうです。よかたら参考にしてみてください。