tl;dr
- VPS 上の docker-compose を利用して OSS の Web IDE(c9 core) を導入した。
- ローカル環境の CPU の負荷は軽くなった(体感)。
- ローカル環境の メモリ の負荷が高くなった(体感)。
実行環境
ローカル環境
- 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