install Symfony4

CentOS 7.8環境にSymfony4を導入する方法です。正しい情報につきましては公式サイトを見て頂いた方が確実ですが、そちらは英語表記のみとなっておりますので、こちらでは「実際に環境構築した内容」を踏まえた日本語の記述にしています。内容の正しさや理解しやすさについては保証しかねますので、自己責任においてご利用ください。

事前準備

CentOS 7.x環境はPHP 5.3.xが導入されていますが、Symfony4はPHP 7以上が必要となります。このため、初期状態で導入あるいは導入対象となっているPHPではなく、それ以外のものを導入しなければなりません。

EPELレポジトリ、Remiレポジトリをそれぞれyumコマンドで導入し、その上でcomposerを導入する必要があります。これらはrootユーザで実施する必要がありますのでご注意ください。

# yum -y install epel-release
# yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

上記のコマンドを実行した後にPHPとApache(httpd)を導入します。既にそれぞれインストール済みの場合は削除します。

# yum remove php php-*
# yum remove httpd*

削除が終わったら次に導入です。

# yum -y install httpd php71 php71-php

ちなみに筆者の環境はPHP 7.1にしております。これは諸々の互換性を確保する必要があるためなのですが、特にそういう必要が無い場合はもっと新しいバージョンにして頂いた方が良いです。

例えばPHP 7.2を導入する場合、上記の「php71」を「php72」に変更してください。

PHPの導入が終わったら、次にcomposerを導入します。Symfony3以降はcomposer経由でインストールする事が推奨されておりますので、基本的にはその通りに作業を実施します。

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php composer-setup.php
$ rm composer-setup.php

一般ユーザで実行しています。なお、これによってカレントディレクトリに「composer.phar」という実行可能ファイルが置かれますが、/usr/bin等に移設するという運用もあります。サーバ全体で利用する環境である場合はそうした方が都合が良いかも知れません。

下記のコマンドを実行してcomposerのロゴが表示されれば動作上は問題無いことになります。

$ ./composer.phar -v

Symfony 4.4の導入

composerが動作したら、次はSymfony 4.4の導入です。

$ composer create-project symfony/skeleton test_project 

上記のコマンドを実行することで「test_project」というディレクトリがカレントディレクトリ配下に作成されます。

Symfony4では「必要最低限の物だけ導入される」ので、環境に応じて必要なものを適宜導入するという運用になります。具体例は下記の通りです。

・web bundle:ビルトインサーバを動作させる場合に必要

・apache bundle:Apache上でSymfonyを動作させる場合に必要(これを導入しない場合は別途httpd.conf等にController名や変数補完のための定義を書く必要がある)

・orm pack:Doctrine ORM mapperを使用する場合に必要

・maker bundle:make:*****等のconsoleコマンドを使用する場合に必要

・debug pack:デバッグの際に使用

・twig bundle:Twigテンプレートエンジンを使用する場合に必要

・annot:ルーティング定義にannotationを使用する場合に必要

・swiftmailer:メール送信に必要

ざっと挙げてもこれくらいです。この辺りに関しては別の箇所で改めて解説しますので、ここでは「そういうものがある」という程度の解説に留めておきます。

webブラウザで表示させるまで

web bundleを導入しているのであればビルトインサーバを起動して外部からアクセスさせる事が可能です。しかし、実際には開発環境ならばいざ知らず、プロダクト運用であればApacheまたはnginxで表示・動作させる事が目的だと思われますのでここでは解説しません(解説する場合は別項を立てます)。

Symfony4のプロジェクトディレクトリには「public」というものがあり、この中には「index.php」だけ存在します。httpd.confにて当該ディレクトリをDocument Rootに設定して、適宜外部から閲覧できる設定を実施すればそれで基本的には設定完了となります(selinuxが動いている場合は別途権限を与える必要がありますが、必要とあれば別項で説明します)。

ただし、ここに罠があります。あくまでも「index.php」しか存在しないため、デフォルトページを表示させる事が出来ても、それ以外(例えば新規に作成したContoroller)にはアクセスできません。ビルトインサーバの方では問題無く表示させられるのであまりマニュアル読まずにやっている人程ここで大ハマりします。

結論から申し上げると、従来のSymfonyで提供されていた「.htaccess」が存在しないので、URLから各々の呼び出しへの経路がありません。このため、httpd.confに下記のような設定を別途書くか、或いは.htaccessを別途用意するか、或いはapache bundleを導入する必要があります。

<Directory "/path/to/symfony/public">
<Files ~ "^\.(htaccess|htpasswd)$">
  Require all denied
</Files>
Options All
AllowOverride All
Require all granted
<IfModule mod_rewrite.c>
  Options -MultiViews
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.)$ index.php [QSA,L]
  RewriteCond %{HTTP:Authorization} ^(.)
  RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
</IfModule>
</Directory>

ホスト設定のうち<Directory>~</Directory>部分の抜粋です。それ以外の設定も正しく記述する必要がありますが、それに関しては解説を割愛します。また、当然ですがRewriteEngineが動作する(mod_rewrite導入済み)環境が必要です。あと、昨今のApacheは以前のものと記述が変わっているのでご注意ください(具体的にはRequire all granted等アクセス権限周り)。

これで記述に問題がなく、かつ、httpdが正常に再起動出来ればアクセス出来る筈です。

前の記事

About us

次の記事

configure Symfony4