ロリポップでCakephp3.7をPHP5.6モジュール版でインストールする。

ロリポップ CakePHP3 設定

ロリポップでPHPフレームワークのCakephp3を利用してWebアプリケーションを開発したいと思い、インストール作業を行っていたのですが、意外と躓いたので備忘録的な。

前提条件

  • SSHにてログインできること。ある程度コマンド操作ができる人
  • スタンダードもしくはエンタープライズプランで契約している

困ったこと

  • SSH接続後、phpコマンドで実行されるPHP(PHP5.5)とブラウザからのアクセス時に実行されるPHP(PHP5.6)が違う
  • composerでCakePHP3をインストールしたいが、メモリが足りないと怒られる
  • PHPコマンドは、PHP7.1で行っていること

PHP7.1はCGI版しかなく、モジュール版を使用して、実行速度を上げたかったので、今回フロントからのアクセスはPHP5.6のモジュール版を選択しました。

ですが、サーバーサイドにて、cake/bakeや、UNITTEST、その他のコマンド操作はPHP7.1を使うという作業になります。

少し、気持ちが悪いですが、これが現状のロリポップにて最善かなと思われます。

この方法以外では、ロリポップにお問い合わせし、新サーバーに切り替えてもらうと、PHP7系がモジュール版として使えるらしいですが、今回はその他のサービスがPHP5.2系で動いていたため、諦めました。

モジュール版とCGI版の違いのざっくり説明
モジュール版は、Webサーバー(Apache)と一緒に動く感じで高速で動くというメリットがあります。
CGI版はWebサーバーとは別個で動きそのためPHPのバージョンの変更などがしやすいが、ちょっと遅い。
共有サーバではPHPがApacheに干渉しないようなCGI版がよく採用されている。

それでは、変更手順を見ていきましょう。

ロリポップユーザー管理画面操作

まずはロリポップのユーザ専用ページで、
「サーバの管理・設定」→「PHP設定」をクリックし、
該当の、ドメインのバージョンのプルダウンから「PHP5.6(モジュール版)」を選択し、変更ボタンをクリック。

予め公開(アップロード)フォルダ(ドキュメンルート)を設定しておく

今回インストールするCakePHP3.7のドキュメントルートは、「webroot」というディレクトリ名になるため、

「サーバの管理・設定」→「独自ドメイン設定」もしくは「サブドメイン設定」をクリックし、

該当のURLの「設定項目」から、確認変更をクリックします。

ロリポップドキュメントルート指定方法1

公開(アップロード)フォルダに「workspace/adan/webroot」と入力し、更新ボタンをクリック。

※適宜、ディレクトリ名は変えてください。

ロリポップドキュメントルート指定方法2

ロリポップでSSHの設定をする

「サーバの管理・設定」→「SSH」をクリックし、SSHを有効にするボタンをクリック

ロリポップSSH設定

その後、「SSH」の設定画面にホスト名、ユーザー、ポート、パスワードが表示されるので、ターミナルソフトを使い、サーバにログインします。

以上で、ロリポップ管理画面での下準備は完了です。

コマンドラインからCakePHP3をインストール

※ここからは専門的な、お話になってきます

この際に、注意すべきことが、通常のコマンドラインからPHPのバージョンを確認した際に、PHP5.5が実行されることです。

$ php -v
$ PHP 5.5.35 (cli) (built: Jun  7 2017 17:38:06) 

Cakephp3系は、PHP5.6以上で動くフレームワークで、このままではコマンドラインからインストールできないので、
既にロリポップが用意しているPHP7の実行ファイルを使ってインストール作業を進めていきます。

$ /usr/local/php/7.1/bin/php -v
$ PHP 7.1.5 (cli) (built: Jul 10 2017 18:03:20) ( NTS )

今回のCakePHP3.7のインストールのコツは、このPHP7.1の実行ファイルを直接指定するところです。

まずはcomposerをインストール

PHPコンポーサーの公式サイトを参考にインストールしていきます。

下記ホームディレクトリでの作業です。

$ /usr/local/php/7.1/bin/php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ /usr/local/php/7.1/bin/php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$ /usr/local/php/7.1/bin/php composer-setup.php
$ /usr/local/php/7.1/bin/php -r "unlink('composer-setup.php');"

インストールが完了したら、バージョンを確認してみましょう

$ /usr/local/php/7.1/bin/php ~/composer.phar --version
$ Composer version 1.8.6 2019-06-11 15:03:05

composerでCakePHP3.7をインストールしてみましょう

CakePHPの公式ドキュメントにそってインストール作業を開始します。

$ cd web/workspace/
$ rm -rf adan/

※一度 adanディレクトリは削除してしまいましょう。あとでちゃんと作られます。

$ /usr/local/php/7.1/bin/php ~/composer.phar create-project --prefer-dist cakephp/app adan

インストールログを眺めながらしばらく待ちます。。。

PHP Fatal error:  Out of memory (allocated 704380928) (tried to allocate 32 bytes) in /DependencyResolver/RuleWatchNode.php on line 40
Fatal error: Out of memory (allocated 704380928) (tried to allocate 32 bytes) in /DependencyResolver/RuleWatchNode.php on line 40

メモリーが・・・足りてないっすね。
専用サーバやクラウドサーバであれば、php.iniファイルの「php memory_limit」を調整してあげれば問題ないのですが、
今回は、共有サーバなので、できません。
なので、別の手を考えます。

CakePHP3.7のソースコードをダウンロードしてインストール

そんな状況のために、GitHubにプリインストール用のCakePHPのソースコードが配布されているので、
https://github.com/cakephp/cakephp/tags
こちらのGitリポジトリから、該当のバージョンを指定して、ダウンロードします。

$ wget https://github.com/cakephp/cakephp/releases/download/3.7.9/cakephp-3-7-9.zip

先程、消してしまったadanディレクトリを作ります。

$ mkdir adan
$ mv cakephp-3-7-9.zip adan/
$ cd adan
$ unzip cakephp-3-7-9.zip

その後、ブラウザで確認します

Cakephp3インストール完了画面ファーストビュー

やった!表示された♪

composerできれいに後処理

CakePHPの必要なデフォルト処理をしてくれます

$ /usr/local/php/7.1/bin/php ~/composer.phar install

アップデートでモジュールを最新にしてあげます。

$ /usr/local/php/7.1/bin/php ~/composer.phar update

下記BakeコマンドでPHPUNITも動くことを確認

$ /usr/local/php/7.1/bin/php vendor/bin/phpunit tests/TestCase/Controller/PagesControllerTest.php

DEPRECATEDエラーが大量に出た
DEPRECATEDエラー(将来的にサポートされなくなる関数が使用されているときに出る警告)の除去
unittestや各モジュール・ライブラリなどのDEPRECATEDエラーはどうしようもないので、
一旦非表示にしておきます。
‘Error’ => [
‘errorLevel’ => E_ALL ^ E_USER_DEPRECATED,
に変更して完了です。

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