AWS EC2(AmazonLinux) nginxでCakePHP3構築


Cakephp3構築

以下の環境を構築する手順です。

OS AmazonLinux2
nginx 1.12.1
PHP 7.2
mysqld 5.7.23
  • 前提:httpが繋がる状態であること

nginxのインストール

「amazon-linux-extras」 というAmazonのパッケージライブラリ?を使います。
好きなバージョンを入れたい場合は、yumなどでインストールを行なってください。

  • amazon-linux-extras listでインストールできるバージョンを確認

インストール済みのものは色がつきます。

$ amazon-linux-extras list
  0  ansible2                 available  [ =2.4.2 ]
  1  emacs                    available  [ =25.3 ]
  2  memcached1.5             available  [ =1.5.1 ]
  3  nginx1.12=latest         enabled    [ =1.12.2 ]
  4  postgresql9.6            available  [ =9.6.6  =9.6.8 ]
  5  postgresql10             available  [ =10 ]
  6  python3                  available  [ =3.6.2 ]
  7  redis4.0                 available  [ =4.0.5  =4.0.10 ]
  8  R3.4                     available  [ =3.4.3 ]
  9  rust1                    available  \
        [ =1.22.1  =1.26.0  =1.26.1 ]
 10  vim                      available  [ =8.0 ]
 11  golang1.9                available  [ =1.9.2 ]
 12  ruby2.4                  available  [ =2.4.2  =2.4.4 ]
 13  nano                     available  [ =2.9.1 ]
 14  php7.2=latest            enabled    [ =7.2.0  =7.2.4  =7.2.5 ]
 15  lamp-mariadb10.2-php7.2  available  \
        [ =10.2.10_7.2.0  =10.2.10_7.2.4  =10.2.10_7.2.5 ]
 16  libreoffice              available  [ =5.0.6.2_15 ]
 17  gimp                     available  [ =2.8.22 ]
 18  docker=latest            enabled    [ =17.12.1  =18.03.1 ]
 19  mate-desktop1.x          available  [ =1.19.0  =1.20.0 ]
 20  GraphicsMagick1.3        available  [ =1.3.29 ]
 21  tomcat8.5                available  [ =8.5.31 ]
  • nginxのインストール
$ sudo amazon-linux-extras install nginx1.12
  • 接続確認
nginx起動.
$ sudo systemctl start nginx
常時ONにしておく.
$ sudo chkconfig nginx on

http://[EC2のIPアドレス]/
にアクセスしてnginxのページがでれば成功

phpのインストール

  • phpのインストール

同様に「amazon-linux-extras」を使います

$ sudo amazon-linux-extras install php7.2
  • phpのモジュールをインストール

cakephp3を使うためのいろいろ。
こちらは「amazon-linux-extras」に無いので「yum」で。

  • インストールするモジュール
    • php-fpm
    • php-devel
    • php-intl.
    • php-mbstring
    • php-xml
まずはモジュールを検索.
$ sudo yum search php-fpm 
〜
============================= N/S matched: php-fpm ==============================
php-fpm.x86_64 : PHP FastCGI Process Manager
インストール.
$ sudo yum install php-fpm.x86_64

各モジュール繰り返し
(* あとから記載したため、インストール漏れがあったらご指摘ください)

  • php-fpm を起動しておく
$ sudo service php-fpm start

mysqlのインストール

デフォルトだと「MariaDB」のインストールになる

$ sudo yum search mysql
〜
============================== N/S matched: mysql ===============================
〜
mariadb.x86_64 : A community developed branch of MySQL

mariadbしか出てこない・・・。

MySQLのリポジトリ追加.
$ yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
Loaded plugins: ovl, priorities
MySQLのインストール.
$ yum install mysql-community-server

☆参考(というかまんまこちらの手順を実施させていただきました)
https://skworkspace.net/archives/460

  • 接続確認
    • パスワードが空ではない!!
    • 初回ログイン時にパスワード変更が必要
mysqldサービス開始.
$ systemctl start mysqld
パスワード確認.
$ sudo cat /var/log/mysqld.log | grep 'temporary password'
ログイン.
$ mysql -uroot -p   # 先ほど確認したパスワードを

ログインできてもパスワードを変更しないと何もさせてくれない・・・
しかも、半角英小文字、半角英大文字、記号、数字がいるという・・・

パスワード変更(例).
set password for root@localhost=password('hogeHoge@123');

cakephp3のインストール

  • composerのインストール
$ curl -sS https://getcomposer.org/installer | php
$ mv composer.phar /usr/local/bin/composer
  • cakephp3でプロジェクトの作成

最後の「my_app_name」は自分が作りたいプロジェクト名で。
あらかじめプロジェクトを置きたい場所にcdで移動しておきましょう。

$ php composer.phar create-project --prefer-dist cakephp/app my_app_name

* 作成失敗した場合は前項のphpのモジュールのインストールで足りなかったのがあったかもしれません。
モジュールインストールしなおし、プロジェクトをフォルダごと一旦削除(すでにフォルダがあると作成失敗するため)してからやりなおしてください。

cakephp3 を nginx で

nginx は 「.htaccess」をつかわないので、nginx側にちょっと手を入れないといけないです。
(今の状態のままつないでも、スタイルシートもimgも取れずテキストだけ出てる?みたいなページになります)

cakephpの公式にも手順が書いてあります
https://book.cakephp.org/3.0/ja/installation.html#nginx

以下、は公式の手順と流れは同じですが、実際にやったことだけ簡略化

php-fpmの確認.
sudo vi /etc/php-fpm.d/www.conf

  ; Note: This value is mandatory.
  listen = /var/run/php-fpm/www.sock  ← 確認
nginxの変更.
$ sudo vi /etc/nginx/nginx.conf

- root         /usr/share/nginx/html;
+ root         /[プロジェクトのパス]/webroot;
+ index        index.php

  location / {
+      try_files $uri $uri/ /index.php?$args;
  }

+  location ~ \.php$ {
+    try_files $uri =404;
+    include fastcgi_params;
+    fastcgi_pass   unix:/var/run/php-fpm/www.sock;    ★
+    fastcgi_index index.php;
+    fastcgi_intercept_errors on;
+    fastcgi_param SCRIPT_FILENAME 
+    $document_root$fastcgi_script_name;
+  }

★ fastcgi_passの部分はphp-fpmで確認したsockと合わせる
fastcgi_pass unix:[確認したパス]

$ sudo sysmtemctl restart nginx
$ sudo sysmtemctl restart php-fpm

これでcakephp3の画面が見れる・・・はず?