開発環境構築を自動化してみた
経緯
開発環境構築を手動で作りたくない(めんどくさい) 開発環境を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をするとマウントが正常に動かなくなる問題
- これに関してはプロビジョニングファイル内で設定ファイルを書き換えて対応
感想
- めっちゃ楽になりました。
- コスパ最高すぎて震えた。
- これからもどんどん自動化していきたい。