魔法使いの卵

WEBエンジニアの卵の成長記録

開発環境構築を自動化してみた

経緯

開発環境構築を手動で作りたくない(めんどくさい) 開発環境を1から作るのって何回やってもめんどくさい。 手順さえ作ってしまえば人間がやる必要ないとおもったので 規模はともかく簡単に楽できることからはじめようとおもった。

プロビジョニング使うんでしょ? プロビジョニングを利用して楽をしたいとおもいます。 ご存知の通り世の中にはChefやAnsibleなど便利ツールがあります。 ただ、個人的にそのへんを勉強したいのではなくて楽をしたいのです。 なので、今回はシェルスクリプトで簡単なプロトタイプ作りました。

環境

ホスト

  • OSX Yosemite v10.10.5
  • VirtualBox v5.0.16 r105871
  • Vagrant 1.8.1

ゲスト

実際にやったこと

ディレクトリの作成

mkdir ~/Vagrant/develop && cd ~/Vagrant/develop

vagrantにboxの追加

vagrant add box CentOS7.1 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.1/vagrant-centos-7.1.box

vagrantのプラグインの追加

sudo vagrant plugin install vagrant-hostsupdater

設定ファイルの作成

vagrant init CentOS7.1

設定ファイルの変更

  • vim Vagrantfile
Vagrant.configure(2) do |config|
  config.vm.box = "CentOS7.1"
  config.vm.hostname = "centos71"
  config.vm.provision :shell, :path => "./shell/provision.sh"
  config.hostsupdater.aliases = ["vagrant.dev"]
  config.vm.synced_folder "./workspace", "/vagrant", mount_options: ['dmode=777','fmode=777']
  config.vm.network "private_network", ip: "192.168.33.10"
end

プロビジョニングファイルの作成

  • vim ~/Vagrant/develop/shell/provision.sh
# SELinuxの停止
sudo setenforce 0
sed -e "s/enforcing/disabled/g" /etc/selinux/config

# カーネルのアップデートを抑止
sudo sed -i -e "13i exclude=kernel*" /etc/yum.conf

# パッケージ管理システムの更新
sudo yum update -y

# 便利ツールの導入
sudo yum install -y git tmux vim

# Nginxの導入
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
sudo yum -y install nginx

# PHP7の導入
sudo yum install epel-release.noarch
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
sudo yum install -y --enablerepo=remi --enablerepo=remi-php70 php php-opcache php-devel php-fpm php-gd php-pdo php-dom php-mbstring php-mcrypt php-mysqlnd php-mssql php-pecl-xdebug php-openssl php-json php-pecl-apcu php-pdo_sqlite php-pdo_mysql php-pecl-memcached php-bcmath php-msgpack php-ldap php-pecl-imagick php-pgsql php-pecl-pthreads php-pecl-msgpack

# nginx.confのコピー
sudo cp /vagrant/conf/vagrant.conf /etc/nginx/conf.d/vagrant.conf

# サーバの起動
sudo systemctl start nginx
sudo systemctl start php-fpm

# サーバ自動起動の設定
sudo chkconfig nginx on
sudo chkconfig php-fpm on

# ファイヤーウォールの設定
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --permanent --zone=public --add-service=ssh

# ファイヤーウォール設定をリロード
sudo firewall-cmd --reload

# mariadbの削除
sudo yum -y remove mariadb-libs

# mysqlの導入
wget http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
sudo rpm -Uvh mysql-community-release-el6-5.noarch.rpm
sudo yum install -y mysql mysql-devel mysql-server mysql-libs
sudo systemctl start mysqld.service

# mysql起動
sudo systemctl start mysqld.service

# mysqlを自動起動
sudo chkconfig mysqld on

# mysqlの圧縮ファイルの削除
rm mysql-community-release-el6-5.noarch.rpm

# commposer導入
curl -sS https://getcomposer.org/installer | php

# commposerにパスを通す
sudo mv composer.phar /usr/local/bin/composer

confファイルの作成

  • PHP動作確認用のconf作成
    • vim ~/vagrant/develop/workspace/conf/vagrant.conf
server {
    # listenするポート番号を記述する
    listen       80;
    # バーチャルホスト名を記述する
    server_name  vagrant.dev;
    # ドキュメントパスを記述する
    root /vagrant/vagrant.dev;
    # デフォルト要求ファイル名を記述する
    index index.php;

    # 末尾が.phpの要求を対象とする設定
    location ~* \.php$ {
        # /usr/local/php7/etc/php-fpm.d/www.confに設定しているIPとポートを指定する
        # (例)listen = 127.0.0.1:9000
        fastcgi_pass 127.0.0.1:9000;

        # FastCGIサーバは自動index付与をサポートしていない
        # その為、Nginx側が末尾が"/"だった場合fastcgi_indexの値を末尾に付与する
        fastcgi_index  index.php;

        # PHP-FPMに渡されるドキュメントパス
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

        # その他のFastCGI関連の設定は以下に追加
        include         fastcgi_params;
    }
}

起動

vagrant up

ハマったところ

  • カーネルのupdateをするとマウントが正常に動かなくなる問題
  • これに関してはプロビジョニングファイル内で設定ファイルを書き換えて対応

感想

  • めっちゃ楽になりました。
  • コスパ最高すぎて震えた。
  • これからもどんどん自動化していきたい。