dockerかvagrantどちらかを使用してfuelphpの開発環境を構築できるようにしたのでまとめました。 ソースコードはgithubにまとめてあります。 https://github.com/hirasaki1985/fuelphp_sample

今回使用した各バージョンは以下の通りです。

php 7.1
fuelphp 1.8
mysql 5.7
apache 2.4.25

ディレクトリ構成

ディレクトリ構成は以下のようになっておりまして、 fuelphpのディレクトリ構成にdev_envディレクトリを追加して必要な設定ファイルを追加した形になります。 Vagrantで使用するVagrantfileとdocker-composeのdocker-compose.ymlファイルはルートディレクトリに設定しました。

.
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── TESTING.md
├── Vagrantfile
├── composer.json
├── composer.lock
├── composer.phar
├── dev_env
│  ├── mysql
│  │   ├── Dockerfile
│  │   ├── initialize.sql
│  │   ├── my.cnf
│  │   └── my.docker.cnf
│  └── webserver
│     ├── Dockerfile
│     ├── httpd
│     │   └── httpd.vagrant.conf
│     ├── php
│     │   ├── php.ini
│     │   ├── php.ini-development
│     │   ├── php.ini-production
│     │   └── php.vagrant.ini
│     └── vhosts
│            └── example.conf
├── docker-compose.yml
├── docs
├── fuel
│   ├── app
│   ├── core
│   ├── packages
│   └── vendor
├── oil
├── public
│   ├── assets
│   ├── favicon.ico
│   ├── index.php
│   └── web.config
└── test

dev_envディレクトリですが、 webserverディレクトリがapache/phpに関わる設定ファイル、 mysqlディレクトリがmysqlに関わる設定ファイルが格納されています。 initialize.sqlは初回起動時に流すSQL。 設定ファイルの名前がvagrantとなっているものはvagrant使用時に適用されるものです。

使い方

使い方ですが、 docker-composeとvagrantでそれぞれ手順を示します。

docker-composeを使用する場合

必要なツール・ライブラリ docker / docker-compose

インストール

$ docker-compose up -d

/etc/hostsへ追加

127.0.0.1 example.com

DBの初期化 / 初期設定

$ docker exec -it fuelphp_sample_mysql_1 bash
(container)$ mysql -u root -p < /docker-entrypoint-initdb.d/initialize.sql (pass: secret)
(container)$ exit
$ docker exec -it fuelphp_sample_webserver_1 bash
(container)$ php composer.phar install
(container)$ php oil refine migrate

ブラウザからアクセス http://example.com:20080/

Vagrantを使用する場合

$ vagrant plugin install vagrant-vbguest
$ vagrant up

/etc/hostsへ追加

127.0.0.1 example.com

migrate (こちらはやらなくてもよくなりました)

// $ vagrant ssh
// $ cd /var/www/html && php oil refine migrate

fuelphpの設定について

ログの出力先は「/var/log/fuelphp/」で、 プロジェクトのルートディレクトリは「/var/www/html」になります。

docker-compose.ymlとVagrantfileはこうなりました。

docker-compose.yml

version: '2'

services:
  webserver:
    #image: php:7.1-apache
    build: dev_env/webserver
    # container_name: webserver
    ports:
      - '20080:80'
    volumes:
      - "$PWD:/var/www/html"
      #- "$PWD/dev_env/webserver/vhosts:/etc/apache2/sites-enabled"
      #- "$PWD/dev_env/webserver/php:/usr/local/etc/php"
    links:
      - mysql

  mysql:
    #image: mysql:5.7.10
    build: dev_env/mysql
    # container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: 'secret'
    ports:
      - '23306:3306'
    volumes:
      # - "$PWD/dev_env/mysql:/etc/mysql"
      - mysql-data:/var/lib/mysql
    # volumes_from:
    #  - webserver

volumes:
  mysql-data:
    driver: local

Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"

  config.vm.network "forwarded_port", guest: 80, host: 20080
  config.vm.network "forwarded_port", guest: 3306, host: 23306

  config.vm.synced_folder "./", "/var/www/html", mount_options: ['dmode=777','fmode=755']

  config.vm.provision "shell", inline: $setup
  config.vm.provision "shell", run: "always", inline: $start
end

$setup = <<SCRIPT
  ## defines
  PROJECT_ROOT=/var/www/html
  LOG_DIR=/var/log/fuelphp/

  #mkdir -p /var/www/
  #ln -s /vagrant/ /var/www/html
  ## init
  yum update -y && yum upgrade -y
  yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
  yum install -y yum-utils
  yum install -y git unzip lsof sendmail sendmail-cf npm gzip vim php-fpm
  yum install -y gcc gcc-c++ wget tar autoconf gd-devel libxml2-devel t1lib-devel bzip2-devel curl-devel gmp-devel aspell-devel recode-devel

  ## jpn lang
  yum -y install ibus-kkc vlgothic-*
  localectl set-locale LANG=ja_JP.UTF-8
  source /etc/locale.conf
  localedef -f UTF-8 -i ja_JP ja_JP.UTF-8

  ## timezone
  timedatectl set-timezone Asia/Tokyo

  #
  # Apache
  #
  yum -y install httpd httpd-devel
  # /sbin/service httpd restart
  /sbin/chkconfig httpd on
  cp -rp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bkup
  cp -rp $PROJECT_ROOT/dev_env/webserver/httpd/httpd.vagrant.conf /etc/httpd/conf/httpd.conf
  cp -rp $PROJECT_ROOT/dev_env/webserver/vhosts/* /etc/httpd/conf.d/
  /usr/bin/systemctl enable httpd.service

  ## install php71
  # yum-config-manager --enable remi-php71
  # yum install -y --enablerepo=remi-php71 php-fpm php-mcrypt php-cli php-common php-devel php-gd php-mbstring php-mysqlnd php-opcache php-pdo php-pear php-pecl-apcu php-pecl-zip php-process php-xml
  yum install -y https://rpms.remirepo.net/enterprise/7/
  yum install -y --enablerepo=remi-php71,epel php php-devel php-common php-cli php-pdo php-mcrypt php-mbstring php-gd php-mysqlnd php-pear php-soap php-xml php-xmlrpc php-pecl-apc
  cp -p /etc/php.ini /etc/php.ini.bkup
  cp -p $PROJECT_ROOT/dev_env/webserver/php/php.vagrant.ini /etc/php.ini
  php -v

  ## install composer
  php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
  php composer-setup.php
  php -r "unlink('composer-setup.php');"
  mv composer.phar /usr/local/bin/composer
  su vagrant -c "composer --version"

  ## fuel php
  curl https://get.fuelphp.com/oil | sh

  ## uninstall mariadb
  yum remove -y mariadb-libs

  ## install mysql 5.7
  # yum localinstall -y http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm
  # yum-config-manager --enable mysql57-community
  # yum info mysql-community-server
  # yum install -y mysql57-community-server
  # mysqld --version
  rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
  yum install -y --enablerepo=mysql57-community mysql-community-server
  mysqld --version
  mkdir -p /etc/mysql/
  ln -s /etc/my.cnf.d /etc/mysql/conf.d
  cp -p /etc/my.cnf /etc/my.cnf.bkup
  cp -p $PROJECT_ROOT/dev_env/mysql/my.cnf /etc/my.cnf
  chmod 644 /etc/my.cnf
  service mysqld restart

  ## exec sql
  export MYSQL_PWD=
  echo ${MYSQL_PWD}
  mysql -u root < $PROJECT_ROOT/dev_env/mysql/initialize.sql

  ## auto start
  /usr/bin/systemctl enable mysqld.service
  /sbin/chkconfig mysqld on

  #
  # iptables off
  #
  /sbin/iptables -F
  /sbin/service iptables stop
  /sbin/chkconfig iptables off
  #
  setenforce 0

  #
  # project
  #
  ## hosts
  echo '127.0.0.1 mysql' >> /etc/hosts
  ## log
  mkdir -p $LOG_DIR
  chmod -R 777 $LOG_DIR
  cd $PROJECT_ROOT && \
    /usr/local/bin/composer install && \
    php oil refine migrate
SCRIPT

$start = <<SCRIPT
  #/sbin/service httpd restart
  #/sbin/service mysqld restart
  sudo /usr/bin/systemctl start mysqld.service
  sudo /usr/bin/systemctl start httpd
  setenforce 0
SCRIPT

参考

以下のサイトを参考にさせていただきました、ありがとうございます。