ロリポップで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サーバーとは別個で動きそのためPHPのバージョンの変更などがしやすいが、ちょっと遅い。
共有サーバではPHPがApacheに干渉しないようなCGI版がよく採用されている。
それでは、変更手順を見ていきましょう。
ロリポップユーザー管理画面操作
目次
まずはロリポップのユーザ専用ページで、
「サーバの管理・設定」→「PHP設定」をクリックし、
該当の、ドメインのバージョンのプルダウンから「PHP5.6(モジュール版)」を選択し、変更ボタンをクリック。
今回インストールするCakePHP3.7のドキュメントルートは、「webroot」というディレクトリ名になるため、
「サーバの管理・設定」→「独自ドメイン設定」もしくは「サブドメイン設定」をクリックし、
該当のURLの「設定項目」から、確認変更をクリックします。
公開(アップロード)フォルダに「workspace/adan/webroot」と入力し、更新ボタンをクリック。
※適宜、ディレクトリ名は変えてください。
「サーバの管理・設定」→「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の実行ファイルを直接指定するところです。
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
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」を調整してあげれば問題ないのですが、
今回は、共有サーバなので、できません。
なので、別の手を考えます。
そんな状況のために、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
その後、ブラウザで確認します
やった!表示された♪
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
unittestや各モジュール・ライブラリなどのDEPRECATEDエラーはどうしようもないので、
一旦非表示にしておきます。
‘Error’ => [
‘errorLevel’ => E_ALL ^ E_USER_DEPRECATED,
に変更して完了です。
企業の情報やエンジニアとしてのキャリアアップの方法、現在の待遇(給料・報酬)、未経験からのステップアップ方法などのご相談を受け付けています。
お気軽にお問合せください。