はじめに
スマホのエンジニアを5年ほどしています。その前は10年くらいWebアプリケーションを作っていた私ですが
いまでもサーバ周リの設定をいじることがあります。
Android周りでいうと・・・
MIMEType
1 |
<span class="vg">application</span><span class="o">/</span><span class="vg">vnd</span><span class="o">.</span><span class="vg">android</span><span class="o">.</span><span class="vg">package</span><span class="o">-</span><span class="vg">archive</span> |
をapkとひもづけるところ。
サーバから、このapkってファイルはandroidのパッケージファイルなんだよーと伝える設定をしています。
が、いざかけるとなると、htaccessを使えない環境が昨今でてきました(といってもここ3、4年)
nginxってやつです。
動画をffmpegで変換して、HLSの動画配信とか特殊なことをしたくてやってみるより、通常運転的にやり方がわからない。
nginx版のXAMMPがない、と吐いていたら旧知からvagrantをお勧めされました。
(´・ω・`)コンテナ、Dockerとかもいる?
起動か、起動の差か。
(1)ネイティブアプリの中でWebViewで表示する構成をローカルだけで完結したい
→Webサーバ側の構築がまだ出来てない、ユーザ登録がまだみたいな時
(2)自分の開発環境のPATHやその他の環境変数に追加して汚したくない
→開発環境とはいえ、他の開発案件に影響が出そうな変数設定は回避したい
(3)できれば、他の人にもまったく同じサーバ環境を共有したい
→同じだけ環境構築に時間かけるの無駄じゃない?
こんな動機からVagrantでの環境共有を考えてみました。
仮想環境でのサーバ構築
VirtualBoxをいれて、Vagrantをいれて、OSを決める
文章にするととても簡単ですが、実際とても簡単です。
(1) VirtualBoxをダウンロード
https://www.virtualbox.org/wiki/Downloads
pkgファイルをクリックして、何事もなく完了。
(2)Vagrantをダウンロード
最新が1.7となっていますが、はまりどころが多いところが気になる方は1.6です。
Old Versions からのダウンロードします。
何事もなく完了。
1 |
$ vagrant init chef/centos-6.5 |
vagrant1.6からvagrant Cloudという名前で他の人が提供しているOSが使えるようになっています。
https://atlas.hashicorp.com/boxes/search?utm_source=vagrantcloud.com&vagrantcloud=1
ここからchef/centos-6.5を選びました。※ 使ってる人が多そうという理由
1 2 3 4 |
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. |
TerminalにはVagrantfileが出来たことが表示されています。コンテンツをブラウザ経由で表示させるようにVagrantfileを編集します。
1 |
$ vi Vagrantfile |
1 2 3 4 5 6 7 |
VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| ...(略)... config.vm.network "forwarded_port", guest: 80, host: 8080 ...(略)... config.vm.provision "shell", path: "bootstrap.sh" end |
bootstrap.shを記述します。
1 2 3 4 5 6 7 8 |
#!/usr/bin/env bash echo I am provisioning... sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm sudo yum install nginx -y sudo service nginx start mkdir -p /vagrant/nginx/html echo provisioing is finished... |
サーバを起動
1 |
$ vagrant up |
次のように表示され、コメントを外した設定も有効になっているようです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Bringing machine 'default' up with 'virtualbox' provider... ==> default: Checking if box 'chef/centos-6.5' is up to date... ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat ==> default: Forwarding ports... default: 80 => 8080 (adapter 1) default: 22 => 2222 (adapter 1) ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key default: Warning: Connection timeout. Retrying... ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... ==> default: Mounting shared folders... default: /vagrant => /Volumes/tmp one/work/vagrant/20150220 |
localhost:8080ポートからのリクエストはGuestOSのCentOSサーバ80ポートに転送されます
おー、何もせずにここまで出来る!
Webサーバのドキュメントルートを変更
sshで接続しましょう。
1 |
$ vagrant ssh |
共有フォルダはGuestOS側は次のところにあり、 host側はvagrant initを実行したフォルダになります。
1 |
/vagrant/ |
ここにドキュメントルートを作る(scpするの面倒
bootstrap.shに書いたサーバ別のフォルダそれぞれを指定します。
1 |
mkdir -p /vagrant/nginx/html |
/etc/nginx/conf.d/default.conf
1 2 3 4 5 |
location / { #root /usr/share/nginx/html; root /vagrant/nginx/html; index index.html index.htm; } |
ここまでやってから、共有フォルダに設定変更後の設定ファイルを置いて
bootstrap.shに設定ファイルを cp とか mvとか書いておけばよかった、と気づきました。
そうしていたら、ssh以降の作業も不要。
(補足)HostOSでのアンインストール
Vagrant、VirtualBoxのどちらもアンインストールするときには
それぞれのインストールに使ったdmgファイルをマウントし、uninstall.toolをCommandを押しつつ”右クリック開く”で実行です。
さいごに
・サーバとのAPIを介するデータIO
もそうなんですが、サーバ側がいらないアプリ作成って、ほぼない状態です。
アプリは入れ物、本体はサーバなところは基本的にずっとかわらないかも。
Macという環境でLinux的な使い方も多く、クライアントマシンでいろんなことをしているとSystemのディスク容量がとんでもなく圧迫されていることがあります。
共有するのと同じくらい、環境を捨てられるということも大事です。