IDE
docker
cloud9
OSS
docker-compose

PCが重いのでクラウド上に開発環境を構築してみた

tl;dr

  1. VPS 上の docker-compose を利用して OSS の Web IDE(c9 core) を導入した。
  2. ローカル環境の CPU の負荷は軽くなった(体感)。
  3. ローカル環境の メモリ の負荷が高くなった(体感)。

実行環境

ローカル環境

  • Model: MacBook Air(11-inch, Early 2014)
  • CPU: 1.4 GHz Intel Core i5
  • Mem: 4 Gb 1600 MHz DDR3
  • OS: macOS Mojave ver10.14

クラウド環境

  • Model: さくらのVPS
  • CPU: 3コア
  • Mem: 2G
  • OS: CentOS 7.5

経緯

どうやら都会ではDockerやらコンテナやらが流行っていると聞く。
早速、試してみようと思ったが、私の MacBook Air が悲鳴を上げ始めた。

導入手順

クラウド環境入手

今回はさくらのVPSを利用しております。

他にも選択肢はあると思いますので、それぞれの状況に合わせてご検討ください。

クラウド環境へアクセス

SSHでVPSにログインする。

[user@local_env] ssh root@0.0.0.0

※ご自身の環境に合わせてIPアドレスを変更してください。

docker-composeのインストール

さくらのVPSの場合はパブリックスクリプトを利用して導入可能です。

OS毎にインストール方法の誤差があるかと思いますので、それぞれの環境に合わせてインストールを行ってください。

今回は本題から逸れるため他の方にお任せいたします。

[root@cloud_env] docker-compose -v
docker-compose version 1.14.0, build xxxxxx

Cloud9 Coreの導入

Cloud9 とは Web 上で実行できる開発環境になります。
本来はサービスに登録して、利用する必要があるのですが、
今回利用している Cloud9 CoreはIDE部分のみをOSSとして提供されているものになります。

# yumのアップデート
[root@cloud_env] yum update -y

# gitのインストール
[root@cloud_env] yum install -y git

# gitリポジトリからソースをcloneする
[root@cloud_env] git clone git://github.com/c9/core.git c9sdk
[root@cloud_env] cd c9sdk

# インストールのためのスクリプトを実行する
[root@cloud_env] scripts/install-sdk.sh

なんか失敗する

Error: please install make to proceed
To do so, log into your machine and type 'yum groupinstall -y development'
Error: please install gcc to proceed
To do so, log into your machine and type 'yum groupinstall -y development'
Error: please install glibc-static to proceed
To do so, log into your machine and type 'yum install glibc-static'

言われた通りにインストールする

[root@cloud_env] yum groupinstall -y development
[root@cloud_env] yum install -y glibc-static

# 再度インストールを試みる
[root@cloud_env] scripts/install-sdk.sh

無事インストールに成功するはず

次にアプリケーションを起動する

# server.js を実行する
[root@cloud_env] node server.js
-bash: node: command not found

なんでや。。。と思いつつ node をインストール

# 8系をインストールしたかったので下記手順を実行する
# nvm とか使いたい場合は別途実行する必要があります
[root@cloud_env] curl -sL https://rpm.nodesource.com/setup_8.x | bash -
[root@cloud_env] yum install -y nodejs
[root@cloud_env] node -v
v8.12.0

# 再度server.js を実行する
[root@cloud_env] node server.js

ここで動けば問題無し
しかし、docker上で動いているのでアクセスはできないはず

以下、手作業に疲れてきたのでDockerfileとdocker-compose.ymlを作成して実施します。

Dockerfile

FROM centos:latest

ENV APP_ROOT /var

WORKDIR $APP_ROOT

RUN yum update -y

RUN curl -sL https://rpm.nodesource.com/setup_8.x | bash -
RUN yum install -y nodejs

RUN yum install -y git
RUN git clone git://github.com/c9/core.git c9sdk

WORKDIR $APP_ROOT/c9sdk

RUN yum groupinstall -y development
RUN yum install -y glibc-static

RUN scripts/install-sdk.sh

docker-compose.yml

version: '3'

services:
  c9core:
    build: ${PWD}
    image: docker/c9:1.0.0
    container_name: c9core
    restart: always
    volumes:
      - /local_workspace:/cloud_workspace
    ports:
      - 8080:8080
    command: /bin/bash -c "node server.js --listen 0.0.0.0 -p 8080 -w /cloud_workspace -a USER:PASSWORD"
    tty: true
    privileged: true
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

以下、ご自身の環境に合わせて変更してください。

# ワークスペースの指定
-w クラウド上のワークスペース

# 認証情報の指定
# basic認証が必要なため
-a ユーザ名:パスワード

# IPアドレスとポートはそれぞれ指定
# 指定無しの場合はlocalhost:8080
--listen 0.0.0.0 -p 8080

docker-compose実行

ディレクトリ構成は以下を想定
root
  └ Dockerfile
  └ docker-compose.yml
[root@cloud_env] docker-compose build
[root@cloud_env] docker-compose up -d

指定したアドレスとポートにアクセスする
http://0.0.0.0:8080

たぶんできてる

追記(2018/10/10)

ポートの開放をお忘れなきよう

# 開放されているポート確認
[root@cloud_env] firewall-cmd --list-ports --zone=public

# 利用したいポートの開放
[root@cloud_env] firewall-cmd --add-port=8080/tcp --zone=public --permanent

# リロード
[root@cloud_env] firewall-cmd --reload

参考

https://github.com/c9/core
https://monopro.org/?p=338