KUSANAGI環境にCakephp4をインストールするまで。2020年度版

KUSANAGI_CAKEPHP4

主にWordpress用途でのプロモーションをかけている、プライム・ストラテジーさんのKUSANAGIサーバですがモジュールの管理がらくなのと、何よりも爆速なので今回は通常のWebサービスを運用する際の環境構築手順をご紹介します。

KUSANAGIで使用する今回の環境
さくらのクラウド4コア、メモリ12ギガ
Nginx + PHP7.3 + MariaDB + CentOs7.7
※KUSANAGIの初期設定(kusanagi init)が出来ている前提です

今回は、Cakephp4が2019年12月に正式リリースされたので、
せっかくなので、Kusanagi環境にインストールして、初期画面までを説明していきたいと思います。

注意
CakePHP4はPHP7.2以上のバージョンじゃないと動かない!!

LAMP環境のプロビジョニングを作成しドメインをあてる

まずは、ドメインとNginxを紐付けて、HTTPSでブラウザから確認できるように設定していきたいと思います。

今回のプロビジョニング名は「adan」で、
ドメインは「adan.jp.net」のAレコードに該当サーバのIPアドレスを設定済みです。
※弊社のドメインです♪

下記、プロビジョニング作成コマンドです
「ドメインの設定」「データベースの作成」「HTTPSの証明書発行」までを一気にやってくれます。便利♪

# root権限で実行しましょう
# kusanagi provision --lamp adan

Webサイトで使用するホスト名(FQDN)を入力してください。
> adan.jp.net

//下記メールアドレスを設定すると、HTTPSで通信できるようになります。無料です♪
Let's Encryptを使用される場合、Let's Encrypt の使用規約に同意される必要があります。
使用規約に同意される場合、あなたのメールアドレスを入力してください。同意されない場合、Enterキーを二回押してください。
使用規約は次のURLより確認できます: https://letsencrypt.org/repository/
> info@adan.jp.net

Let’s Encryptにメールアドレスを設定したら、
その後MySQLの「データベース名」「ユーザ名」「パスワード」を聞かれるので、
既存のDBは選択できないらしい。。。すべて新規作成になってしまうので、
同一のデータベースを参照したい場合は、一旦新規で作成後にアプリケーション側で操作するしかなさそうです。

確認してみましょう
まずは、ドキュメントルートは下記になります。

$ cd /home/kusanagi/adan/DocumentRoot

※作成したプロビジョニングは、kusanagiユーザのホームディレクトリに作成されます

ブラウザからアクセスできるか確認
https://adan.jp.net

「403が出た!あれ!?」と思ったら、ドキュメントルートになにもなかった。
ので、index.htmlを作成し、とりあえず確認。

 $ vi /home/kusanagi/adan/DocumentRoot/index.html

も一度アクセスすると。出ました♪ HTTPSもきれいに出来ていますねぇ〜、KUSANAGI便利♪

FQDNとは
結論から言いますと、URLの「http://」から次の「/」までの間の文字列をFQDNといいます。
※「http://←ここから ここ→/abc/def」っす

下記URLの場合、「www.adan.jp.net」がFQDNです。
https://www.adan.jp.net/blog/

ざっくりというとドメイン名のことですが。
ドメインはドット区切りで、サブドメインやトップレベルドメインなど、呼び名がバラバラなで、
大体「ドメイン!」と言えば伝わりますが。
システム設定時には厳密さが求められるので、コミュニケーションミスを防ぐために「FQDN」という厳密な言葉で表現するっす。

Cakephp4の環境をKUSANAGIに用意する

さっそく新バージョンのCakePHP4のインスコです♪
その前に必要なモジュールとPHPコンポーザーをインストールしておきます。

php composerのインストール

といっても、非常に簡単です。
公式サイトに書いてある手順を1行づつ実行していくだけです。

//ユーザー「kusanagi」のホームディレクトリ直下でOK
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "if (hash_file('sha384', 'composer-setup.php') === 'baf1608c33254d00611ac1705c1d9958c817a1a33bce370c0595974b342601bd80b92a3f46067da89e3b06bff421f182') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$ php composer-setup.php
$ php -r "unlink('composer-setup.php');"

CakePHP4でも必要なintlモジュールのインストール

CakePHP4でもこのモジュール必要なんっすね。。。

intlって、国際化用拡張モジュールらしいです

国際化用拡張モジュール (これ以降では Intl と略します) は、ICU ライブラリのラッパーです。 PHP プログラマが、ロケール関連のさまざまな操作を行えるようにします。 フォーマット、音訳、エンコード変換、カレンダーの処理、UCA 準拠の照合順序 (collation)、 テキストの区切り、ロケール識別子やタイムゾーンや書記素を用いた操作などが可能です。

https://www.php.net/manual/ja/intro.intl.php

カレンダー処理とか、エンコード変換とかやってくれて、世界中で統一しようぜ!的な動きなんだな、多分。

ざっくりわかったところでIntlをインストールしていきましょう。

//rootユーザで行いましょう♪
//現在PHP7.3を使ってるので「php73-php-intl」を指定

# yum -y --enablerepo=remi,remi-php7.3 update
# yum -y --enablerepo=remi,remi-php7.3 install php73-php-intl

//確認コマンド。「intl.so」があればOK
# ls -la /opt/remi/php73/root/usr/lib64/php/modules

インストールは出来ましたが、モジュールの実態は、KUSANAGIのphp.iniが管理している
extension_dirで指定されたディレクトリには配置してくれないので、
php.iniで直接指定してあげましょう。

//php.iniを修正する。
# vi /etc/php7.d/php.ini

//extensionを指定して上げる。
extension=/opt/remi/php73/root/usr/lib64/php/modules/intl.so

//インストールされてるか確認する。「intl」が表示されてればOK
# php -m
注意
KUSANAGI+CakePHPで、最大の注意点がこの、php-intlモジュールだと思います。
KUSANAGIでは、このphp-intlを管理しておらず、KUSANAGIをアップデートした際に
バージョンが置いていかれ、サービスが止まってしまった事件がありました。
まじ要注意っす♪

CakePHP4のインストール

さっそくCakePHP4の本体をインストールします。
CakePHP公式サイトに書いてある通りなのですが。
Nginxのドキュメントルート変更し、CakePHP4のスタート画面まで行ってみます。

//すでに、composerにはパスを通してあるので下記実行
# composer self-update && composer create-project --prefer-dist cakephp/app:4.* program

//nginxのconfigファイルを修正し、ドキュメントルートを変更する
# vi /etc/nginx/conf.d/adan_ssl.conf
 //↓変更前
 root /home/kusanagi/adan/DocumentRoot;
 //↓変更後
 root /home/kusanagi/adan/program/webroot;

 //nginxを再起動
 # kusanagi nginx

ブラウザからアクセスできるか確認
https://adan.jp.net
できた♪

下記画面が表示されればひとまずOKじゃないでしょうか♪

CakePHP4初期画面

あとは、DB系の設定してCakePHP4をキャッチアップしながらプロジェクトを勧めていきましょう♪


プロに聞いてみる
株式会社adanはエンジニアのキャリアに真剣に向き合っています。
企業の情報エンジニアとしてのキャリアアップの方法、現在の待遇(給料・報酬)未経験からのステップアップ方法などのご相談を受け付けています。
お気軽にお問合せください。