鯖缶 #とは
*これはKCS AdventCalender2018 13日目の記事です*
はじめに
はいどうもこんにちは.
やり手の名ばかりサーバ管理担当(鯖缶),いくぴーです.
最近サーバー構築やってるんですけど,ありえんハマっているのでネタにします.
文章力皆無なのはゆるしてヒヤシンス…
やっていること
サーバをたくさんおっ立てなくてはならないのですが
- 個別で立てるのがダルい
- 個別で管理するのがダルい
- 開発環境と本番環境が違うとダルい
と3つのダルみが揃った結果,「docker compose使えばええやん」という安易な発想に至りました.
そういうことである.
今回はローカルでの開発用仮想サーバを立てることをメインにして書いていきますね.
実際にどうやってる?
必要なもの
サーバーに必要なのはDockerとDocker Composeだけです.
ローカルで本番と同じ構成のサーバを立てる際に必要なのは
- VirtualBox
- Vagrant
- Docker (Docker Compose)
こんなとこですね.
VirtualBoxとVagrantはローカルに仮想環境を簡単に立てるために使います.
Windows10からDockerを使えるようになったのですが,Home版では使えないので…
ホストOSの違いを気にしなくていいようにした結果こうなりました.やはりWindowsはクソ.
やりかた
1. VirtualBoxとVagrantをインストール
ここでは本筋ではないので省略します.ネット上に記事はたくさん転がってるので参考にしてください.
Vagrantの使い方もとっっっても簡単なのでググってみましょう.
vagrant up
(起動)vagrant ssh
(Vagrantで立ち上げたゲスト環境にSSHログイン)vagrant halt
(停止)vagrant reload --provision
(再起動する際にprovisionを実行)vagrant destory
(仮想環境を破棄)
とりあえずこれだけ知っていればどうにかなります.
2. Vagrantfileを編集
適当な作業ディレクトリをターミナル/コマンドプロンプトで開き,vagrant init "{BOX_NAME}"
します.
BOX_NAMEはここから引っ張ってきます.今回は例としてubuntu/bionic64を使用しますね.
vagrant init "ubuntu/bionic64"
を実行すると,Vagrantfileという以下のようなファイルができます.
ちなみに,このVagrantfileには設定上の様々なヒントがコメントとして記載されています.超親切ですね!
これをもとに,いい感じのオレオレVagrantfileを仕上げてみました.それとついでにdocker / docker-composeインストール用のシェルスクリプトも作りました.
ちなみに,Vagrantfile内のprovisionのところでshellの代わりにdockerを指定してconfig.vm.provision "docker", do |d|
とすることで自動的にインストールすることも出来るのですが,本番サーバで実際に動かすDockerとバージョンを統一したいので,わざわざ手動でインストールしています.
3. docker-compose.ymlとnginx.confを編集
Vagrantfileと同じディレクトリにdocker-compose.ymlとnginx.confいう名前でファイルをふたつ作っておきます.
docker-compose.ymlの中はご自由に…という感じなのですが,今回はNginxでHelllo Worldを表示させることを目標にしましょう.
ちなみにNginxはApacheとならぶwebサーバソフトウェアのひとつです.
このNginxの設定ファイルnginx.confの設定例も一緒に貼っておきます.
またVagrantfileと同じディレクトリにwwwディレクトリを作り,その中にhello worldを表示させるindex.htmlを置いておきます.
4. 仮想サーバ起動
ここまでできたら,あとは仮想環境を立ち上げるだけです.Vagrantfileのあるディレクトリでvagrant up
してみましょう.
初回はOSのイメージを引っ張ってくるので少し時間がかかります.気長に待ちましょう.
しばらくするとCreating Web...
と表示が出てくると思います(出てこないかもしれないですが).そうしたらブラウザでlocalhostを開いてみましょう.Hello Worldと表示されているはずです.
さいごに
今回,僕はさくらのVPSを借りているのですが,サーバーを本格的に運用するなら,これ以外にもやるべきことはたくさんあります.
最も面倒くさいのがセキュリティまわりの設定です.
ファイアウォールやSELinuxの設定も必要ですし,また多くのdockerコンテナは基本的にrootユーザーで実行されてしまうのでこれもまたセキュリティ上のリスクを抱えています.これを回避するための策も講じなければなりません.労力に見合わないんだよなぁ…
ただ,「今のローカルの環境を壊したくない,リモートデバッグ的に使いたい」というのであればちょうどいいかもですね!
というわけで,個人とか小規模なスタートアップ等でサービス開発するときはあらかじめ色々入ってくれてるやつ(Netlifyとか)を活用したほうがいいと思います.
つまりそういうことなんである.以上.