導入から
CentOS7のインストール
- VMware Workstation 12にCentOS7のminimalをインストール
- 言語に日本語を選択
- ネットワークを利用できるようにする
- 時刻設定をネットワーク同期
- rootのパスとユーザを作成
アドレスを確かめる
[root@localhost ~]# ip addr
おなじみのifconfigはnet-toolsをインストールすれば使えるようになるけど別にいいかな
パッケージのアップデート
[root@localhost ~]# yum update -y
ApacheとPHPのインストール
やむ [root@localhost ~]# yum install -y httpd php
Apacheの設定
[root@localhost ~]# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.170830 [root@localhost ~]# vi /etc/httpd/conf/httpd.conf [root@localhost ~]# diff /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.1 70830 144c144 < Options Includes ExecCGI FollowSymLinks --- > Options Indexes FollowSymLinks 151c151 < AllowOverride All --- > AllowOverride None 164c164 < DirectoryIndex index.php index.html --- > DirectoryIndex index.html 294c294 < AddHandler cgi-script .cgi --- > #AddHandler cgi-script .cgi 316c316 < AddDefaultCharset Off --- > AddDefaultCharset UTF-8
起動と自動起動設定
[root@localhost ~]# systemctl start httpd.service [root@localhost ~]# systemctl enable httpd.service Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
この時点でhttpアクセスできない
[root@localhost ~]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens33 sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules:
案の定firewalldが原因なのでhttpをデフォルトゾーンに追加
[root@localhost ~]# firewall-cmd --add-service=http --zone=public --permanent success [root@localhost ~]# firewall-cmd --reload success
httpアクセスができるようになる
PHP5.6のインストール
[root@localhost ~]# vi /var/www/html/index.php <?php phpinfo(); ?>
とりあえずPHPが動作していることを確認
> PHP Version 5.4.16
CakePHP3の動作には最低でもPHP5.6が必要になるそうです。
PHP5.6はRemiリポジトリで提供されており、そのRemiリポジトリはEPELリポジトリに依存しているのでどちらもインストールします。
(どちらもrelease-7)
[root@localhost ~]# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm を取得中 警告: /var/tmp/rpm-tmp.LfgF5M: ヘッダー V3 RSA/SHA256 Signature、鍵 ID 352c64e5: NOKEY 準備しています... ################################# [100%] 更新中 / インストール中... 1:epel-release-7-10 ################################# [100%] [root@localhost ~]# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm http://rpms.famillecollet.com/enterprise/remi-release-7.rpm を取得中 警告: /var/tmp/rpm-tmp.sRvoWa: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 00f97f56: NOKEY 準備しています... ################################# [100%] 更新中 / インストール中... 1:remi-release-7.3-2.el7.remi ################################# [100%] [root@localhost ~]# yum install -y --enablerepo=remi,remi-php56 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt
rebootして PHP Version 5.6.31 になっているのを確認。
phpinfo() じゃなくても php -v とかでもok
PHPの設定
いつもの
[root@localhost ~]# cp /etc/php.ini /etc/php.ini.170831 [root@localhost ~]# vi /etc/php.ini [root@localhost ~]# diff /etc/php.ini /etc/php.ini.170831 889c889 < date.timezone = "Asia/Tokyo" --- > ;date.timezone = 1660c1660 < mbstring.language = Japanese --- > ;mbstring.language = Japanese 1667c1667 < mbstring.internal_encoding = UTF-8 --- > ;mbstring.internal_encoding = 1675c1675 < mbstring.http_input = UTF-8 --- > ;mbstring.http_input = 1685c1685 < mbstring.http_output = pass --- > ;mbstring.http_output = 1693c1693 < mbstring.encoding_translation = On --- > ;mbstring.encoding_translation = Off 1698c1698 < mbstring.detect_order = auto --- > ;mbstring.detect_order = auto 1703c1703 < mbstring.substitute_character = none --- > ;mbstring.substitute_character = none
MySQLのインストール
CentOS7からはMySQL公式のリポジトリからパッケージをインストールします
# mariaDBを削除しておく [root@localhost ~]# yum remove mariadb-libs [root@localhost ~]# rm -rf /var/lib/mysql/ [root@localhost ~]# yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm [root@localhost ~]# yum install -y mysql-community-server # is-enabledで調べたら既にenabledだった [root@localhost ~]# systemctl start mysqld.service
インストールが終わったらセットアップ。
# /var/log/mysqld.log に初期パスワードが出力されているので抜き出す [root@localhost ~]# cat /var/log/mysqld.log | grep "temporary password" 2017-09-01T17:20:42.541796Z 1 [Note] A temporary password is generated for root@localhost: 0fn>k0itm48T # 対話式のセットアップコマンド [root@localhost ~]# mysql_secure_installation # my.cnfをいじる [root@localhost ~]# cp /etc/my.cnf /etc/my.cnf.170902 [root@localhost ~]# vi /etc/my.cnf [root@localhost ~]# diff /etc/my.cnf /etc/my.cnf.170902 28,30d27 < < character-set-server = utf8 < default_password_lifetime = 0
CakePHP3って?
(こっから本題)
- PHP上で動作するフレームワーク
- Railsを参考にしたらしい
- ORMが簡単にできるのが目玉
- すげー嫌な予感がする
- 別にSQL文くらい普通に書けばいいじゃんって思うんだけど
- バリデーションチェックが容易
- これはいいな
- MVC
- 似たようなの打ち出してコケたフレームワーク知ってます
CakePHP3のインストール
公式のドキュメントを参考にする。
システム要件を見るにphpのintl拡張が足りてない
[root@localhost ~]# yum install -y --enablerepo=remi,remi-php56 php-intl
Composerのインストール
パッケージの依存管理ツールらしい。
Composer公式のドキュメントに従う
[root@localhost ~]# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" [root@localhost ~]# php -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" Installer verified [root@localhost ~]# php composer-setup.php All settings correct for using Composer Downloading... Composer (version 1.5.1) successfully installed to: /root/composer.phar Use it: php composer.phar [root@localhost ~]# php -r "unlink('composer-setup.php');" # ここはCakePHP3の指示 [root@localhost ~]# mv composer.phar /usr/local/bin/composer
CakePHPプロジェクトの作成
どこにインストールするのが適切なのかはさておき、とりあえずドキュメントルート配下に置きます。
[root@localhost ~]# composer create-project --prefer-dist cakephp/app /var/www/html/Cake # インストールが始まる
その後、/Cake/ にアクセスするも403エラー。
とりあえずエラーログを見る
[root@localhost ~]# less /etc/httpd/logs/error_log [Sat Sep 02 01:32:58.031817 2017] [core:crit] [pid 2081] (13)Permission denied: [client 192.168.170.1:63139] AH00529: /var/www/html/Cake/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable and that '/var/www/html/Cake/' is executable
/Cake/.htaccess がチェックできないので読み込み可能にするのと、/Cake/ が実行可能にするのを要求されている。
しかし、/Cake/.htaccess は644になってるし、/Cake/ は755になっている。
それでも発生する権限の問題…もしかしてあいつでは
[root@localhost ~]# getenforce Enforcing [root@localhost ~]# setenforce 0 [root@localhost ~]# vi /etc/selinux/config SELINUX=disabled
案の定SELinux。切っちまえ
アクセスすると見た目のエラーこそないものの、何も表示されない。再びエラーログを見る。
[root@localhost ~]# less /etc/httpd/logs/error_log [Sat Sep 02 01:39:34.726621 2017] [:error] [pid 2083] [client 192.168.170.1:63228] PHP Fatal error: You must enable the intl extension to use CakePHP.\n in /var/www/html/Cake/config/requirements.php on line 31
intl拡張を有効にしていないらしい。そういえばそうだな
[root@localhost ~]# vi /etc/php.ini # 雑に追加 extension=intl.so
httpdを再起動すると、ついに /Cake/ にアクセスできるようになる。
しかし、"Database driver Cake\Database\Driver\Mysql cannot be used due to a missing PHP extension or unmet dependency"というエラーメッセージに出迎えられた。
PHPからmysqlを操作するパッケージが導入されていない?
[root@localhost ~]# yum install -y --enablerepo=remi,remi-php56 php-mysqlnd
これでやっと正常に表示された。
しかし、"CakePHP is NOT able to connect to the database."と表示された。そりゃそうだ。
CakePHP用のDBとユーザを作ります。
[root@localhost ~]# mysql -u root -p mysql> create database cake_test character set utf8; mysql> create user cake_user@localhost identified by "********"; mysql> grant all on *.* to cake_user@localhost;
DBとユーザが作成できたらCakePHPのプロジェクトからDBにログインできるように書き換えます。
[root@localhost ~]# cp /var/www/html/Cake/config/app.php /var/www/html/Cake/config/app.php.170902 [root@localhost ~]# vi /var/www/html/Cake/config/app.php [root@localhost ~]# diff /var/www/html/Cake/config/app.php /var/www/html/Cake/config/app.php.170902 232,234c232,234 < 'username' => 'cake_user', < 'password' => '********', < 'database' => 'cake_test', --- > 'username' => 'my_app', > 'password' => 'secret', > 'database' => 'my_app',
"CakePHP is able to connect to the database."と表示されるのを確認。
ここまででやっとインストールが全て完了した。
次回からは実際にCakePHP3で何か作ってみます