以前Node.jsやPythonの勉強のために立ち上げたVirtualBox+Vagrant上のUbuntuに、CakePHPで開発をできる環境を構築したいと思い色々と調べながら取り組んだ作業のログとなっています。
CakePHPのインストールガイドだけ見ても環境構築弱者の自分にはちんぷんかんぷんでしたので様々なページを参考にさせていただきました。追って参照として示させていただきます。
今回やりたいこと
すでにあるもの
- Vagrant(Ubuntu)
Vagrantを使ってUbuntuの仮想環境を構築する事に関しては様々な記事がインターネット上にあります。
参照 [https://qiita.com/w2-yamaguchi/items/191830191f8af05ac4dd]
作りたいもの
CakePHPインストールのためのシステム要件
- HTTP サーバー。例: Apache。mod_rewrite が推奨されますが、必須ではありません。
- PHP 5.6.0 以上 (PHP 7.2 も含む)
- mbstring PHP 拡張
- intl PHP 拡張
- simplexml PHP 拡張
参照 [ https://book.cakephp.org/3.0/ja/installation.html ]
CakePHPのプロジェクト作成まで
環境を綺麗にする
違ったバージョンの混在などによってうまく動かないのが怖いので一旦PHP関係を取り除きます。
$ sudo apt remove php php-cli php-common
webサーバーのインストール(Apache2)
$ sudo apt install apache2
$ curl localhost:80 && echo success || echo failed
.
.
.
success
apache2の最初のページのhtmlとともに"success"の文字が出てくればオッケーです。
ifconfigを使ってIPアドレスを一応確認します。
$ ifconfig | grep "inet addr:"
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
inet addr:127.0.0.1 Mask:255.0.0.0
もちろんこのままだとホスト側のブラウザからはVagrant上のlocalhostを見ることはできないのでport forwardingをしてあげましょう。
Vagrantfileに以下の一行を足します。
config.vm.network "forwarded_port", guest: 80, host: 80
これによってVagrant上のlocalhost:80
とホストPC側のlocalhost:80
が繋がります。
vagrantをリロードしてあげると以下のようにForwarding portsの情報が出てくるはず。
$ vagrant reload
==> default: Attempting graceful shutdown of VM...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: You are trying to forward to privileged ports (ports <= 1024). Most
==> default: operating systems restrict this to only privileged process (typically
==> default: processes running as an administrative user). This is a warning in case
==> default: the port forwarding doesn't work. If any problems occur, please try a
==> default: port higher than 1024.
==> default: Forwarding ports...
default: 80 (guest) => 80 (host) (adapter 1)
PHPの導入
PHP関係のインストール
$ sudo apt install libapache2-mod-php7.0 php7.0 php7.0-cli php7.0-intl php7.0-json php7.0-mbstring php7.0-sqlite3
PHP,Apache2の動作確認
デフォルトのDocumentRootを変えてあげます。
$ sudo vi /etc/apache2/sites-available/000-default.conf
#DocumentRoot /var/www/html
DocumentRoot /vagrant/hoge
<Directory /vagrant/hoge>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
そうしたら新しく指定したrootにindex.phpを作成してみましょう。
$ mkdir /vagrant/hoge
$ vi /vagrant/hoge/index.php
<?php
phpinfo();
?>
以上の設定が終わったらホストマシンのブラウザでlocalhost:80
を叩いてあげれば...
なんとかApacheとPHPがうまく動きました...
DOCUMENT_ROOTが/vagrant/schedule
となっていますね。これは私がconfファイルのhoge
をschedule
としていたからです。
CakePHPのインストール
ApacheとPHPのインストールがうまくいったので次にCakePHPをインストールしましょう
今回はscheduleという名前でプロジェクトを作りました。
参照 [ https://zaki0929.github.io/page14.html ]
$ sudo apt install composer
$ composer create-project --prefer-dist cakephp/app schedule
Installing cakephp/app (3.7.1)
Failed to download cakephp/app from dist: The zip extension and unzip command are both missing, skipping.
The php.ini used by your command-line PHP is: /etc/php/7.0/cli/php.ini
Now trying to download from source
- Installing cakephp/app (3.7.1)
Cloning 87163adbfb3bde222ab60ef9ea982ae2e0f5f266
Created project in schedule
Loading composer repositories with package information
Updating dependencies (including require-dev)
Failed to download cakephp/plugin-installer from dist: The zip extension and unzip command are both missing, skipping.
The php.ini used by your command-line PHP is: /etc/php/7.0/cli/php.ini
Now trying to download from source
- Installing cakephp/plugin-installer (1.1.0)
Cloning 41373d0678490502f45adc7be88aa22d24ac1843
Failed to download jdorn/sql-formatter from dist: The zip extension and unzip command are both missing, skipping.
The php.ini used by your command-line PHP is: /etc/php/7.0/cli/php.ini
Now trying to download from source
.
.
.
うわ〜Warningがたくさん出てくるぅ〜
冷静によくみてみると
The zip extension and unzip command are both missing, skipping.
とのこと
zip,unzipコマンドがないとのこと。apt install
しましょう。
$ sudo apt install zip unzip
もう一度
composerコマンドを打つと、長いダウンロードが始まりますが、無事にCakePHPが導入されました。
あとはcakephpのインストールガイド通りにパーミッションやApache2のDocumentRootが作成したプロジェクトのwebrootを参照するように設定してあげれば完了です。
参照[ https://book.cakephp.org/3.0/ja/installation.html ]
$cd schedule(⬅︎各自設定したプロジェクトの名前)
$chmod +x bin/cake
$ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1`
$ setfacl -R -m u:${HTTPDUSER}:rwx tmp
$ setfacl -R -d -m u:${HTTPDUSER}:rwx tmp
$ setfacl -R -m u:${HTTPDUSER}:rwx logs
$ setfacl -R -d -m u:${HTTPDUSER}:rwx logs
$ sudo vi /etc/apache2/sites-available/000-default.conf
#DocumentRoot /var/www/html
DocumentRoot /home/vagrant/workspace/schedule/webroot
<Directory /home/vagrant/workspace/schedule/webroot>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
DBとの接続をまだ行なっていないので不穏なページですが、これでCakePHPプロジェクト内のindex.php
がホストPCのブラウザと繋がりました。
最後に
Qiita&プログラミング初心者ですので不要な部分、間違えている部分などいくつもあると思います。皆様からのコメント、指摘、大歓迎でございます。
いずれDockerでの開発環境の構築もやりたいなあ。