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
参考
以下のサイトを参考にさせていただきました、ありがとうございます。