• Skip to main content
  • Skip to primary sidebar
  • ホーム
  • お問い合わせ

ハイパー仕事し隊

思い立った吉日!イロイロ試してオンリーワンの起業家を目指してます!

現在の場所:ホーム / ウェブアプリ関連 / Vagrantfile で Linux, Apache, MySQL, PHP (LAMP) を一括構築!

Vagrantfile で Linux, Apache, MySQL, PHP (LAMP) を一括構築!

2018年5月5日

LAMP Stack

ウェブアプリ開発で必要な環境構築。

なんだかんだで一番面倒だったりします。

何度も使う環境は Vagranfile を作っておくと “vagrant up” だけで同一環境が作れるので、スゴイ便利です。

ぜひ Vagranfile の書き方を学んで環境構築にサク時間を短くしましょ!

今回利用した環境

  • Windows 7 SP1 x64
  • PowerShell: 3.0
  • Vagrant: 2.1.0
  • VirtualBox: 5.2

まだ Vagrant が使える環境でないかたは、「Vagrant を使うと仮想マシン構築がすごいラク!まずはインストールしよう!」を参照ください。

それでは LAMP スタックを構築していきましょ!

Vagrantfile とは

環境構築する際に “vagrant up” を使いますが、その時に参照されるファイルになります。

自分で編集することで、環境構築のカスタマイズができます。

メリット

「ローカル環境に依存せず、同一の開発環境をすぐに構築できる」になります。

新規に独立した仮想マシンを構築するため、OS が Mac OS だろうが Windows だろうが関係なく、またその環境に何がインストールされているか関係ありません。

“vagrant up” というコマンドだけで、

  1. 必要なモジュールをダウンロードし、
  2. 必要な環境設定を全て行います。

また、Vagrantfile というテキストファイルのやりとりだけで良いので、非常に ファイルハンドリングが楽 です。メールでチームメンバーに環境を共有し、受け取った側で “vagrant up” すれば自動的に同一環境が構築できます。

似たようなもので、XAMPP というものがありますが、オールインワンのモジュールなのでやはり重く、他環境で同一の開発環境の構築は結構シンドイです。

デメリット

Vagrantfile をの書き方を理解し、実際に書かなければいけないということでしょうか。

後述する Vagrantfile で使用する 5 つの項目の使い方を読むと分かりますが、内容はシンプルです。(正確には「慣れれば。」でしょうか?笑)

またたまにですが、vagrant up で環境構築を行っている途中で、ある環境 (例: Windows 10) では動いていたのにある環境 (Windows 7) ではエラーになることもあります。その際にデバッグできる知識が必要になります。

LAMP スタックとは

既にご存知かと思いますが、念のために確認です。

  • Linux: OS です。ここでは Ubuntu を利用しますが、お好きなディストリビューションをお使い下さい。
  • HTTP Apache Server: ウェブサーバーです。
  • MySQL: データベースです。
  • PHP: サーバーサイドのスクリプト言語です。

LAMP スタックは WordPress でよく使われているスタックですね。

WordPress の開発がしたい人やバックアップを取っておきたい方、プラグインを入れる前に仮想マシンで確認したいという方は環境がすぐに作れるようにしておいた方が、環境構築の手間が省けますね。

実際に Vagrantfile を作成しましょ!

Vagrantfile で覚えておく項目はたった 5 つです。

  1. config.vm.box: インストールする box 情報を指定します。
  2. config.vm.provider: 仮想マシンを構築するツール (例: VirtualBox) を指定します。
  3. config.vm.network: IP/port などのネットワーク関連の設定します。
  4. config.vm.synced_folder: ホスト PC と構築する仮想マシンで共有するフォルダの指定します。
    • 仮想マシンは独立した環境なので SSH などでリモートアクセスする必要があります。ファイルのやりとりをしたい場合、それでは面倒なので、ホストと仮想マシン (ゲスト) とで共有フォルダを作ってリモートアクセスせずにホスト側の環境にファイルを置けば仮想マシン (ゲスト) 側からもアクセスできるという状態にし手間を省くことができます。
  5. config.vm.provision: 上記ステップ 1 で OS を入れた後の必要な処理 (例: OS を update して HTTP Apache Server 入れる) を指定します。

例えば Ubuntu 14.04 LTS (Trusty Tahr) だけをインストールし、特に何も設定をしない場合は、このようになります。

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/trusty64"
end

このたった 3 行のテキスト情報だけで Ubuntu 14.04 LTS (Trusty Tahr) が構築できます。すごいですね!

それでは詳しく見ていきましょ。

ヒント: “vagrant init” を実行することで、カレントディレクトリに上記 5 つの項目を含んだテンプレート Vagrantfile が生成されますので、そちらを編集することをオススメします。

config.vm.box の設定

box 環境を提供している こちらのサイト からインストールする box を選びます。

config.vm.box = "ubuntu/trusty64"

本記事では “ubuntu/trusty64” を指定しますが、他にも CentOS や Debian を使うことももちろん可能です。

config.vm.provider の設定

特に指定ばなければ VirtualBox がデフォルトで指定されます。

仮想マシンの GUI を出す・ださない (vb.gui) や仮想マシンで利用するメモリ量を指定 (vb.memory) や仮想マシンで利用する CPU の数を指定 (vb.cpus) することができます。

config.vm.provider "virtualbox" do |vb|
  vb.gui = true
  vb.memory = "1024"
end

VMware など別のツールを使う場合や、ある決まったメモリー量を使いたい場合は指定しましょう。

また、仮想マシン起動後でも本項目は変更可能です。変更した値を起動中の環境に適用するには “vagrant reload” で反映できます。

念のためにですが、”vg.gui = true” で仮想マシンの GUI が表示されます。ログインするための ID/PWD の入力が求められますが、どちらも “vagrant” です。
“vg.gui = false” にした場合、コマンドプロンプト (or PowerShell) から “vagrant ssh” で仮想マシンに入れます。

config.vm.network の設定

こちらが少々ややこしいかもしれませんね。頑張っていきましょ!

いくつか設定方法がありますが、その内個人的によく使っている設定を紹介します。

config.vm.network "forwarded_port", guest: 80, host: 8080

“guest” 仮想マシンで、”host” は物理マシンです (私の環境では Windows 7)。

この設定をする事で、ゲスト OS のポート 80 番で動いているウェブアプリやウェブサイトにホスト側から http://localhost:8080 でアクセスできるようになります。

ちなみに、ポート 80 番は HTTP Apache Server のデフォルトで空いているポートです。

config.vm.network "private_network", ip: "192.168.33.10"

この設定を利用した場合、”localhost” ではなく “ip” で指定した “192.168.33.10” でアクセスできるようになります。

この IP 表示ではなく任意のドメイン名 (例: vagrant-sample-lamp.com) でアクセスしたい場合、hosts ファイルの変更で可能です。

こちらが hosts ファイルの場所です。

  • Windows: C:\Windows\System32\drivers\etc\hosts (Administrator 権限が必要です)
  • Mac/Linux: /etc/hosts

このファイルに

"192.168.33.10 vagrant-sample-lamp.com"

を追加すると、ホスト側から “vagrant-sample-lamp.com” でアクセスできるようになります。

他にもイロイロな設定ができます。こちらでは紹介できなかった部分は 本家サイト (英語) から確認出来ます。

config.vm.synced_folder の設定

上記の “config.vm.network” でホスト PC からゲスト側のウェブコンテンツを閲覧できましたが、ここではホストとゲストに共有のフォルダを準備し、ホスト PC からゲスト側のウェブコンテンツを編集できるようにします。

config.vm.synced_folder <ホスト側のフォルダ>、<ゲスト側のフォルダ> を指定します。

具体的には、このようになります。

config.vm.synced_folder "../data", "/vagrant_data"

ホスト側のディレクトリはカレントディレクトリ (Vagrantfile のあるディレクトリ) をベースに考えますので、”../data” はカレントディレクトリから 1階層上の “data” フォルダとゲスト側の “/vagrant_data” フォルダを共有させという意味になります。

ホスト側のカレントディレクトリと、ゲスト側の HTTP Apache Server がウェブ公開しているフォルダを共有する場合は、このようになります。

config.vm.synced_folder ".", "/var/www/html"

これで Linux に SSH アクセスし、慣れないコマンドやテキストエディター四苦八苦する必要はなくなりますね。

config.vm.provision の設定

こちらの設定では、”vagrant up” する際にゲスト OS 側で実行するコマンドを設定できます。(詳細は 本家サイト (英語) から)

少ないコマンドを実行する場合は、このように Vagrant ファイルに直接書き込めます。

config.vm.provision "shell", inline: <<-SHELL
  apt-get update
  apt-get install -y apache2
SHELL

ただ、LAMP スタックには他にも MySQL や PHP もインストールし、update/upgrade をしますので、一般的には別ファイルを準備します。

config.vm.provision "shell", path: "install.sh"

"path" に "install.sh" を設定することで、Vagrantfile ど同階層にある "install.sh" を実行します。

実際に "install.sh" の中ではこのように設定しています。

# Update Packages
apt-get update

# Upgrade Packages
apt-get upgrade

# Apache
apt-get install -y apache2

# Enable Apache mod_rewrite
a2enmod rewrite

#Add PHP repository from Ondřej
apt-add-repository ppa:ondrej/php
apt-get update

# Install PHP
apt-get install -y php7.2

# PHP Apache Module
apt-get install -y libapache2-mod-php7.2

# Restart Apache
service apache2 restart

# PHP Modules
apt-get install -y php-pear
apt-get install -y php7.2-common
apt-get install -y php7.2-mcrypt
apt-get install -y php7.2-zip
apt-get install -y php7.2-curl
apt-get install -y php7.2-dev
apt-get install -y php7.2-gd
apt-get install -y php7.2-mbstring
apt-get install -y php7.2-mysql
apt-get install -y php7.2-xml

# MySQL Pass
debconf-set-selections <<< 'mysql-server mysql-server/root_password password root'
debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password root'

# MySQL
apt-get install -y mysql-server

# Restart Apache
service apache2 restart

この "install.sh" は "root" 権限で実行されるので、"sudo" は必要ありません。

これでどの環境でも "vagrant up" をすれば、まったく同じ LAMP スタックが構築できるようになりました!

まとめ

ここまできて「大変!」という印象を持たれた方もいるでしょう。

ただ、LAMP 環境を構築する際にいずれにせよ手動で設定することですので「追記」という形でモジュールの追加を行った際に Vagrantfile に足していくのもありだと思います。私はそうしています。

今回は LAMP スタックの作成をしましたが、同じように LEMP (Linux, Nginx, MySQL, PHP) や MEAN (MongoDB, Express, AngularJS, NodeJS) スタックも簡単に構築できます。

こちらが、実際に利用した Vagrantfile です。ご自由にご利用下さい。

カテゴリー: ウェブアプリ関連
タグ: vagrant

最初のサイドバー

簡単な自己紹介

ごく普通の 30 代サラリーマンです。世界を旅しながらの生活が目標!!
IT 全般に興味あり: Python (Flask, Django) / PHP (Laravel, Wordpress) / Golang / AWS / Network Security.
Read More…

サイト内検索

最近の投稿

  • 【VS Code プラグイン】Postman より便利!? Rest Client をオススメする理由
  • MySQL と phpMyAdmin を Docker Compose で作って、Python から接続する
  • Windows10 上の Ubuntu から “curl localhost” を実行すると “Connection refused” になる原因
  • リダイレクトの仕組み知ってる?Flask で調べるてみるのだ。
  • Apple 独自の 検索エンジンで何が変わるのか

アーカイブ

  • 2021年3月
  • 2021年1月
  • 2020年10月
  • 2019年3月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年5月
  • 2018年4月

タグ

amazon cloudfront amazon s3 aws coursera css django docker flask fullstack gcp github hawaii life in USA linux mongodb mysql postgresql pwa python sqlite vagrant

Contact
Privacy Policy and Term of Use
Copyright © 2025 · All rights reserved.