サイトアイコン KOKENSHAの技術ブログ

VirtualBox Vagrant CentOS7 PHP mySQL5.6 CakePHPのセットアップ方法

私は普段、Dockerを使っている場合が多いですが、最近「VirtualBox+Vagrant+CentOS7+CakePHPのセットアップ方法」のレッスンもあったので

せっかくなので、記事にまとめました。

なんでCakePHPかと言うと、日本国内では、結構使われているようですね。本当はLaravelをオススメしたいですけどね。笑

LaravelでPHPを勉強した人は下記の記事を参照してください。

初めてでも確実に動くLaradockの起動までの手順(更新版)

生のPHPで基本を勉強した人はこちらの記事を参照してください。

PHPを教える人、勉強する人のためのPHPウェブアプリケーションサンプルコード

目次

全体構成の概念図

これから、様々なロールが登場しますが、それの相互関係をここで簡単に図解しておきます。この図をイメージしながら、下記の手順を行ってください。

 

VirtualBoxのインストール

こちらの記事を参考してください。

VirtualBox

Vagrantのインストール

https://www.vagrantup.com/

本家いのサイトに行って、Vagrantをダウンロードして、インストールしてください。

ダウンロードをクリックしたら、次の画面に遷移します。

私がMacOSなので、MacOS用のパッケージをダウンロードします。皆さんは適宜自分のPCの環境に合わせて、ダウンロードしてください。

ダウンロードしてパッケージを開いて、vagrant.pkgをダブルクリックします。

あとは、案内通りに、インストールを完了させます。

インストール完了したら、MacのTerminalで[vagran]と言うコマンドが使えるようになります!

自分好きなEditorを開いて、/ホームディレクトリ/workspaceと言うフォルダに下記の二つのファイルを作ってください。

Vagranfileの用意

これはVagrantが起動するときに見るファイルです。

Vagrantの詳しい説明は本系のドキュメントに譲ります。

気をつけるところは、

下記の三行です。

 

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://vagrantcloud.com/search.
  # config.vm.box = "centos/7"
  config.vm.box = "bento/centos-7.3"
  config.vm.provision :shell, :path => "provision.sh"
  config.vm.synced_folder "./", "/vagrant", :mount_options => ["dmode=777", "fmode=777"]

  # Disable automatic box update checking. If you disable this, then
  # boxes will only be checked for updates when the user runs
  # `vagrant box outdated`. This is not recommended.
  # config.vm.box_check_update = false

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  # NOTE: This will enable public access to the opened port
  # config.vm.network "forwarded_port", guest: 80, host: 8080

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine and only allow access
  # via 127.0.0.1 to disable public access
  # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
 config.vm.network "private_network", ip: "192.168.33.10"

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  # config.vm.network "public_network"

  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  # config.vm.synced_folder "../data", "/vagrant_data"

  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
  # config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
  #   vb.memory = "1024"
  # end
  #
  # View the documentation for the provider you are using for more
  # information on available options.

  # Enable provisioning with a shell script. Additional provisioners such as
  # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
  # documentation for more information about their specific syntax and use.
  # config.vm.provision "shell", inline: <<-SHELL
  #   apt-get update
  #   apt-get install -y apache2
  # SHELL

  
end

provision.shファイルの用意

上のVagramtfileの中にあるように、provisionを実行するときは、このファイルが実行されるようになります。

そうすると、CentOSのVMの中に、下記のコマンドが実行されます。

それぞれのコマンドの意味は、コメントで記述しています。

# Apache、git、unzipのインストール
sudo yum -y install httpd unzip git

# PHPのインストール。Epel, Remiリポジトリから行います。
sudo yum -y install epel-release
sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
sudo yum -y install --enablerepo=remi,remi-php71 php php-devel php-mbstring php-intl php-mysql php-xml
sudo yum -y install php-mysqlnd


# MySQLのインストール
# mariadbの残党があったら削除
sudo yum -y remove mariadb-libs
# 前の古いmySQLの残党があったら削除
sudo rm -rf /var/lib/mysql/
sudo yum -y remove mysql-server mysql-devel mysql
# yum-config-managerが使えるように
sudo yum -y install yum-utils 
# sudo yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
# mySQLのパッケージを取得する
sudo yum -y localinstall http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm

# mySQL 5.7を無効に
sudo yum-config-manager --disable mysql57-community
# mySQL 5.6を有効に
sudo yum-config-manager --enable mysql56-community
# mySQL サーバをインストール
sudo yum -y install mysql-community-server

# mySQLが自動起動するように
sudo systemctl enable mysqld

# Cakephpコンポーザーのダウンロートとコンポーザーを/bin下に移動
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

# ApcheをVagrant起動時に起動するように設定と起動
sudo systemctl enable httpd.service
sudo systemctl start httpd.service

# Vagrantの共有フォルダにパスを設定
sudo rm -rf /var/www/html
sudo ln -fs /vagrant /var/www/html

# MySQLをVagrant起動時に起動するように設定と起動
sudo systemctl enable mysqld.service
sudo systemctl start mysqld.service

システムの環境はほとんどこれで完了します。

あと、実際にCentOSにログインして、mySQL関連の設定だけで終わります。

二つのファイルを用意できたら

/ホームディレクトリ/workspace で下記のコマンドを実行してください。

vagrant up --provision

結構時間がかかります。あなたのPCの性能によっては、数十分かかることがあります。

 

CentOSでの作業

上のvagrant upが終われば、諸々必要なパッケージがインストール済みのVMが用意されて、立ち上げてある状態になっています。

続いて、VM下記のコマンドを実行して、CentOSのVMに入ります。

vagrant ssh

そうしましたら、まずCakePHPのプロジェクトを作ります。

CakePHP Projectを作成する

下記のコマンドを実行します。

# Document Rootに移動する
cd /var/www/html/
# Composerを用いて展開
composer create-project --prefer-dist cakephp/app myapp

あなたのPCの性能によって、数分から十数分かかります。

最後、フォルダの権限設定しますか?と聞かれて、Yと答えて、終わります。

終わりましたら、一回ブラウザーを開いて、「http://192.168.33.10/myapp」にアクセスしてみてください。

CakePHPができましたね!

でもデータベースの所に、赤いアイコンが付いています。データベースにはまだ正常にアクセスできないと言うことです。

それは当然で、まだmySQLのデータベースやユーザ全部まだ設定していないからです。

 

mySQLの設定

下記の手順を実行する前に一旦、VagrantのVM(CentOS)を一回再起動しましょう。

VM(CentOS)の再起動

下記のコマンドを実行してVMからログアウトします。自分のPCのTerminalに戻ります。

exit

続いて、下記のコマンドを実行して、サイドVM(CentOS)を立ち上げて、ログインします。

vagrant halt

vagrant up

vagrant ssh

mySQLを起動する

sudo systemctl start mysqld

rootのパスワードを設定する

最初は、rootのパスワードが設定されていないです。

mysql_secure_installation

上のコマンドを実行すると、対話形式になります。

パスワードがないので、最初は、Enterキーを押して進みます。

その後、新しいパスワードを二回入力します。ここでrootのパスワードは[pass]にします。覚えていてください。

そのあとは、全部Yで答えて進んでください。

 

mySQLのコマンドを実行する

mysqlの対話環境に入って、データベースの作成や、ユーザ作成、権限付与をやります。

mysql -u root -p

ここで、先ほど、設定したパスワード「pass」を入力してください。

続いて、これからのコマンドを実行して、新しいデータベースを作ります。

これは、上の手順で作成下CakePHPの設定に合わせる形にします。なんでCakePHPの設定に合わせるかと言うと、そうするとCakePHP側の設定を修正なしで、データベースに接続することができるようになるからです。

これから設定コマンドに使う情報を一旦下にまとめます。

 

create database my_app;
show databases;

新しく作ったデータベースが一覧に入っているかどうかを確認します。

(私がcreate database my_appの後ろに「;」を忘れて、改行してから、入れても問題なく実行されますが、皆さんは忘れないでね。)

続いて、ユーザ(my_app)を作成します。

CREATE USER my_app@'localhost' IDENTIFIED BY 'secret';

続いて、上のデータベース(my_app)にユーザ(my_app)がアクセスできるように、権限を付与します。データベース名もユーザ名もmy_appですが、混乱するかもしれませんが、全然別物です。

GRANT ALL ON my_app.* TO my_app@'%' IDENTIFIED BY 'secret';

上のコマンドを実行したら、my_appと言うユーザがmy_appと言うデータベースに対して、secretと言うパスワードを使えばアクセスできると言うことになります。

この時点で、もう一回、ブラウザーをリロードすれば、データベースの所のアイコンが変わるはずです。

問題なく、データベースに接続もできましたね。

ここで、一旦Terminalに戻って「exit」でmysqlの対話環境から出ましょう。

お疲れ様です。これは一通り、VirtualBox+Vagrant+CentOS7+PHP+mySQL+CakePHPのセットアップができました!

 

CakePHPを使ったアプリケーション開発

ちょっとだけ、PCのMacの方のソースコードを修正して、VMのCentOSの方に反映されます。

先ほどのEditor(VS Code)そのまま使います。ちょっと適当に、日本語(川島ができた!)を入れてみます。

ブラウザーの方で、ページがリロードすると、変更が反映されていますね!

これで、CakePHPを楽しく開発してきましょう!笑

まとめ

いかがでしょうか?できましたでしょうか?

Dockerを使って開発環境を構築するのも良いですが、場合によってはVagrantを使うのも良いかもしれません。何れにしても、少しインフラの知識が必要ですね。

では、また次のトピックの時まで!

[amazonjs asin=”B00F418SQ8″ locale=”JP” title=”Vagrant入門ガイド”]

[amazonjs asin=”4297100339″ locale=”JP” title=”Docker/Kubernetes 実践コンテナ開発入門”]

[amazonjs asin=”4798048577″ locale=”JP” title=”PHPフレームワーク CakePHP 3入門”][amazonjs asin=”4798144452″ locale=”JP” title=”SQL 第2版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)”]

この本、初心者にオススメです!

[amazonjs asin=”4798054097″ locale=”JP” title=”CakePHP 超入門”]

モバイルバージョンを終了