JETWAREでラクラクLAMP環境構築(AWS&ローカルPC)
JETWAREでラクラクLAMP環境構築(AWS&ローカルPC)
ローカルPC(MacやWindows)にLAMP環境を構築するのに、MAMPやScotch Boxを使っているという方は多いかと思います。 また、AWSに商用環境/ローカルPCに開発環境を作る場合などは、BitnamiのLAMP環境を使うという方もいらっしゃると思います。
上記の方法は色々と紹介されているようですので、今回はそれ以外の方法、ということで「JETWARE」アプライアンスを利用した環境構築方法をご紹介しようと思います。これを使うことで、本番環境と同様の構成で素早くローカルの開発環境を立ち上げることができます。こちらは最近仕事でまとめた手順を公開用に一部手直ししたものです。
症状と効能
特にこのような方によく効きます。
- 環境構築よりコーディングに集中したい人
- AWSと同じ環境をローカルPCに作るのが面倒と感じている人
- 開発チームで仮想コンテナ等を導入したいが、メンバーのスキルレベルと温度差で導入が進まず苦労している人
- DockerやECS(EC2 Container Service)の商用利用に不安を感じている人
仮想コンテナを個人の興味でお試し程度に触る分には、手間も学習コストもあまり関係ありませんが、会社の開発チームで導入となるとすんなりとはいかないことが多いと思います。案件の性質や、システム管理・運用の都合、メンバーの温度差など、色々な諸事情が絡んでしまい、導入が難しいこともままあるかと思います。
今回構築する環境は
- AWS商用環境は、普通のEC2+AMI
- ローカルPC開発環境はVirtualBox+Vagrantで構築(Vagrantが面倒なら、それも不要)
- 開発環境はVMイメージまたはVagrantFileで共有
ということで、構築も簡単で、複雑な手順や学習も不要であるため、チーム内でも拒絶反応は少ないのではないかと思います(少なくとも、Dockerでのデプロイよりは)。
注意事項
AWSは使わない、ということなら別にMAMPでもScotch Boxで十分だと思いますし、BitnamiのUbuntuベースのLAMP環境に満足されているのであれば、今回の方法を知る必要もないかと思いますので悪しからずご了承ください。
それでは早速環境構築手順に移りたいと思います。
EC2の環境構築
AMI「Optimized LAMP Stack PHP 5.6」を使ったインスタンス作成
今回はJetwareが提供するアプライアンスを使います。 awsmarketplaceで選択します(0円です).
今回選んだ「lamp_php56_optimized」の構成はこのような感じです。
その他、インストールディレクトリなど詳細情報はこちらを参照ください。
EC2上にも開発環境や動作確認環境を構築するのであれば、このAMIを選んでEC2のインスタンスを作成するだけで完了です(EC2インスタンスの起動方法は、AMIを選択するところ以外は通常の手順とまったく同じですので、割愛します)。必要なものは全て/jet以下に配置してあります。
バックエンドはRDSなんだけど、という場合には、mariadbのデーモンを停止して、そのままフロントエンドのWebサーバとして使うのが手間なく簡単です。
ミドルウェアの構成を変えたい方は、構成違いのアプライアンスをこちらから選ぶというのでも良いかと思います。今回は他社製組込モジュールの制約上、PHP5.6を選択しましたが、PHP7.xのアプライアンスも用意されてます。お好みでどうぞ。
以上で、EC2の環境構築は完了です(はや)。
ローカルPCの環境構築
まずは事前準備としてVirtualBoxを用意します。
VirtualBox本体のダウンロード:macOS版dmg(ver. 5.1.6)
ダウンロードしたdmgファイルをダブルクリックしてインストール完了です。
さて、上記のAWSと同じJETWAREのアプライアンス環境をローカルに構築するには、以下の3つの方法があります。
- VirtualBoxイメージをダウンロードして設定
- VagrantFileを用いて環境設定
- Linux環境から環境設定用のシェルスクリプトを実行。
お手軽なのは1です。違いはチームメンバー間で共有・配布する手段です。 1ならVMイメージを、2ならVagrantFileを共有すればOKです。各自の事情にあわせてお選びください。3の方法は、お好きなLinux OS上にJETWAREアプライアンスを再現する方法です。オンプレに開発サーバ等を別途立てる場合にはこの方法でも良いでしょう(今回はローカルPCに環境を構築するという主旨ですので、3の説明は割愛します)。 以下に、それぞれの手順を記します。
1.VirtualBoxイメージをダウンロードして設定
イメージファイル(ova)のダウンロード:centos7版ダウンロード
Virtual MachineのOSは、CentOS7,Debian8/Ubuntu14.04からお好きなものを選べます。AWS側がAmazon Linux(CentOSベース)であることを鑑み、今回はCentOS7を選びました(Cent6.5があれば尚良かったんですが)。
VirtualBoxを起動して、Finderメニュー>ファイル>「仮想アプライアンスのインポート」を選択。
画面の指示に従ってインストール完了したら、起動。これで完了です。/jet以下に、同じ構成でアプリケーションがインストールされています。ログインIDとパスワードは以下の通りです。
User | Password |
---|---|
jet | jet |
その他デフォルトのセッティングに関する詳細はこちらを参照してください。
デーモン(サービス)の起動・停止は、Upstart(start/stopコマンド)で制御できます。
$ start apache $ stop memcached $ restart mysqld
以上。とても簡単ですね。
2.VagrantFileを用いて環境設定
Vagrantで制御したい場合は、こちらの方法で環境を構築します。こちらも簡単です。
2-1. Vagrantインストール
dmgファイルをダブルクリックしてインストール完了。
Terminalを起動して、以下のコマンドが正常実行できればOKです。
$ vagrant -v Vagrant 1.8.6
2-2. Boxファイルを登録
記載のとおり、Terminalから以下のコマンドを実行して、Boxファイルのイメージをダウンロードしてaddします。
$ vagrant box add "http://jetware.org/appliances/aws/lamp_php56_optimized/download/image:base_image:vagrant?os=centos_7" --name "jetware/aws-lamp_php56_optimized-centos_7" ==> box: Box file was not detected as metadata. Adding it directly... ==> box: Adding box 'jetware/aws-lamp_php56_optimized-centos_7' (v0) for provider: box: Downloading: http://jetware.org/appliances/aws/lamp_php56_optimized/download/image:base_image:vagrant?os=centos_7 ==> box: Successfully added box 'jetware/aws-lamp_php56_optimized-centos_7' (v0) for 'virtualbox'!
ダウンロードしたBoxファイルが利用可能かを確認して起動します。
$ vagrant box list jetware/aws-lamp_php56_optimized-centos_7 (virtualbox, 0)
仮想サーバ初期化 (Vagrantfileが生成されます)
$ vagrant init jetware/aws-lamp_php56_optimized-centos_7
仮想サーバ起動
$ vagrant up
以上で、Vagrantを使った環境構築は完了です。 こちらも手順どおりやるだけで、とても簡単に構築できました。
Vagrantの詳しい使い方に関しては、別の参考文献を当たってください。以下に基本的な使い方だけ抜粋して紹介しておきます。
2-3. 仮想サーバ初期化、起動、停止
仮想サーバ初期化 (Vagrantfileが生成されます)
$ vagrant init jetware/aws-lamp_php56_optimized-centos_7 A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.
仮想サーバ起動 (以下の起動メッセージでは、SSHのポートは2200にマッピングされているのがわかります)
$ vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'jetware/aws-lamp_php56_optimized-centos_7'... ==> default: Matching MAC address for NAT networking... ==> default: Setting the name of the VM: sample_default_1475743729445_85292 ==> default: Fixed port collision for 22 => 2222\. Now on port 2200. ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat ==> default: Forwarding ports... default: 22 (guest) => 2200 (host) (adapter 1) ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2200 default: SSH username: vagrant default: SSH auth method: private key default: default: Vagrant insecure key detected. Vagrant will automatically replace default: this with a newly generated keypair for better security. default: default: Inserting generated public key within guest... default: Removing insecure key from the guest if it's present... default: Key inserted! Disconnecting and reconnecting using new SSH key... ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... default: The guest additions on this VM do not match the installed version of default: VirtualBox! In most cases this is fine, but in rare cases it can default: prevent things such as shared folders from working properly. If you see default: shared folder errors, please make sure the guest additions within the default: virtual machine match the version of VirtualBox you have installed on default: your host and reload your VM. default: default: Guest Additions Version: 5.0.16 default: VirtualBox Version: 5.1 ==> default: Mounting shared folders... default: /vagrant => /Users/tkikuchi/Documents/VirtualBox/sample
起動状態の確認
$ vagrant status Current machine states: default running (virtualbox) The VM is running. To stop this VM, you can run `vagrant halt` to shut it down forcefully, or you can run `vagrant suspend` to simply suspend the virtual machine. In either case, to restart it again, simply run `vagrant up`.
仮想サーバの再起動
$ vagrant reload ==> default: Attempting graceful shutdown of VM... ==> default: Clearing any previously set forwarded ports... ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat ==> default: Forwarding ports... default: 22 (guest) => 2200 (host) (adapter 1) ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2200 default: SSH username: vagrant default: SSH auth method: private key ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... default: The guest additions on this VM do not match the installed version of default: VirtualBox! In most cases this is fine, but in rare cases it can default: prevent things such as shared folders from working properly. If you see default: shared folder errors, please make sure the guest additions within the default: virtual machine match the version of VirtualBox you have installed on default: your host and reload your VM. default: default: Guest Additions Version: 5.0.16 default: VirtualBox Version: 5.1 ==> default: Mounting shared folders... default: /vagrant => /Users/tkikuchi/Documents/VirtualBox/sample ==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision` ==> default: flag to force provisioning. Provisioners marked to run always will still run.
2-4. 仮想サーバの設定変更
前述の$ vagrant init box名
を実行すると、カレントディレクトリに設定ファイル「Vagrantfile」が生成されています。
$ ls -la total 8 drwxr-xr-x 4 tkikuchi staff 136 10 6 17:48 . drwxr-xr-x 4 tkikuchi staff 136 10 6 17:16 .. drwxr-xr-x 3 tkikuchi staff 102 10 6 17:48 .vagrant -rw-r--r-- 1 tkikuchi staff 3045 10 6 17:47 Vagrantfile
「Vagrantfile」の編集
$ vi ./Vagrantfile
例) IPアドレスをスタティックに設定
# IPアドレス設定 サンプル config.vm.network "private_network", ip: "192.168.33.10"
例)ローカルPCのカレントディレクトリを、仮想サーバの /var/www/html に同期。
# フォルダ同期 サンプル config.vm.synced_folder ".", "/var/www/html", :owner => "vagrant", :group => "vagrant", :mount_options => ["dmode=775,fmode=775"]
config.vm.provision "shell", inline: <<-SHELL # Git yum install -y postfix SHELL
その他記法の詳細は、こちらを参照してください。
手動プロビジョニング
$ vagrant provision
2-5. 仮想サーバ基本操作コマンド
仮想サーバログイン
$ vagrant up ... 起動 $ vagrant ssh ... sshでログイン
$ ssh jet@127.0.0.1 -p 2200
その他 主要操作コマンド(詳細はvagrant -h)
box追加
$ vagrant box add {VM名} {boxファイルダウンロードURL}
利用可能box一覧
$ vagrant box list
boxの削除
$ vagrant box remove {box名}
初期化(Vagrantfile作成)
$ vagrant init
起動
$ vagrant up
SSH設定確認
$ vagrant ssh-config
仮想サーバにSSHログイン
$ vagrant ssh
シャットダウン
$ vagrant halt
再起動
$ vagrant reload
$ vagrant suspend
レジューム
$ vagrant resume
破棄
$ vagrant destroy
以上です。Vagrantを使っても、とても簡単に環境構築ができました。手順どおり行えば誰でもできますので、ぜひ皆さんの環境でもお試し頂ければと思います。
最後に
S3を介さず、EC2とローカルPC環境とのファイル同期をしたいとき、皆さんどうされているんでしょうか。今のところlsyncd、rsyncdやownCloudくらいしか思いつきません。他にベスト・プラクティスをご存知の方がいらっしゃいましたらぜひご教授ください。