[2017年版] 軽量かつコンパクトな自分用開発&公開環境を考えてみた

最近サーバーの移転をしたり、新規でこのサイト用にGCPでサーバー立てたり、開発マシンのサブ機・VAIO Pro 13が起動できなくなったりと、いろんなものがごちゃごちゃしてきてうんざりしたので、自分用にコンパクトな環境を考えてみました。

目標

  1. サーバー移転などがあってもさくっとできるようにポータブルに
  2. サーバー側とローカル開発の環境の差異をほぼなしに
  3. ローカル側でもマシンを変えてもさくっと開発できるように
  4. OSの種類を問わずに運用できる
  5. 不足の事態のために、スマホとかでも処理ができるように

解決策 = Dockerを使う

そうです、Dockerです。最近のナウいやつですね。(年齢がバレる)

Dockerで環境を整えることで、1、2、3、4についてはクリアできます。

ただし、DockerもMac、Windows、Linuxで微妙な違いがあったり、サーバー側でもOSを何にするのかによって、微妙に違いが出てきてしまうことがあります。

例えば、Google Compute Engine上のDocker用OS「Container-Optimized OS」は、Googleが開発したオリジナルですし、ConoHaで提供されているアプリーケーションOSの場合は、ベースがUbuntu 16.04だったりします。

基本的には、「docker run、docker-compose、docker-swarm」あたりが使えてくれればいんですが、Docker Swarmでクラスタを組む際などに、OSが違うとネットワーク設定の場所が違ったりして調べるのに小1時間くらいかかるのがイラっとします。

候補1:Docker on Ubuntu 16.04 on Vagrant

OSの種類を問わずに運用できるという意味では、Vagrant BOXイメージで管理してしまえば同じ環境を構築できます。

ただし、

  • 仮想環境なので、マシンパワーをフル活用できない
  • BOXイメージがOSごとなので、1GBとかになる(5.の緊急時に1GBのダウンロードはきつい)
  • たまにVirtualBoxマシンが壊れる

というデメリットも。

候補2:シンプルにDocker + Gitlab

一番ポータブルなのはこのパターン。

いくらDockerといえど、ローカル上で開発をすれば、開発マシンの中身が結構汚れるのであまり好きではないんですが(いつの間にか、ふかーいディレクトリにゴミを大量に残したりするので)、軽量という点では大きなメリットがあります。

まあ、WindowsやMacだとバックエンドはdocker machine=仮想環境なので、実は1とほとんど同じなんですけどね。

管理するのは、docker-composeファイルとプログラム本体。それをgitでバージョン管理すれば、git pullして、docker-compose up -dでさくっと開発環境を構築できるのはうれしいですね。(都度、docker pullでデータ取ってくるのは微妙ですけど。)

さて、スマホからはどうやって処理しよう。。。。

候補3:開発用にサーバーを用意する

本番サーバーと同じものを2台用意して、常に開発用サーバーで作業をしましょうと。これだと、スマホとかでも作業できます。

ただし、

  • 作業の度にいちいちネットつなぐ面倒さ
  • サーバー費用

などを考えると微妙な気もします。

答え

Vagrant + Docker

これにしました。

本当はシンプルにDockerだけでやったほうがいいんですが、サーバーを複数台借りていることや、プロジェクトで参加する際にそれぞれの環境に合わせたものがあったほうがいいだろうということで。

5.については、オンラインIDEのCloud 9をインストールして、緊急時のみ、Cloud9をDockerから起動させてそこで作業することにします。iOSじゃなきゃスマホでもいけます。(iOSはタッチ操作が最適化されてないとか?)