ピティナ開発者ブログ

全日本ピアノ指導者協会のIT担当者が気まぐれにつづる技術系中心のブログです


Ubuntu16.04+nginxでCloud9を動かすまで

はじめに

どうも、Hiroyuki Noguchiです。
開発環境のローカル依存リスクを下げたいなということは前々から考えており、クラウドIDEのCloud9っていいよなーと思っていました。

c9.io

Cloud9ってOSSなので、オンプレミスで入れてみようと思ったところ、あまりニーズがないのか情報が少なくてあまりまとめられていなかったので、以下に手順を残しておきます。

やること

  • Ubuntu16.04にNode.jsとCloud9をインストールする
  • nginxで受けてNode.jsサーバに投げる
  • foreverでNode.jsサーバをデーモン化する

Node.jsのインストール

やり方いろいろですが、この記事のやり方が一番手軽だと思います。 qiita.com

この、n packageという、ver.管理ツールを使ったやり方のようです。 github.com 顔が出てきてびっくりする。

$ sudo apt-get install -y nodejs npm
$ sudo npm cache clean
$ sudo npm install n -g
$ sudo n stable
$ sudo ln -sf /usr/local/bin/node /usr/bin/node

で、version確認。

$ node -v

問題ないようなら、最初にインストールしたver.を消しておく。

$ sudo apt-get purge -y nodejs

もう完全に上記記事の引用です。

あと、foreverをインストールしておきます。

www.npmjs.com

$ sudo npm install forever -g

Cloud9のインストール

Cloud9のGithubはこちらですね。 github.com

インストールしたいディレクトリに移動してから、git cloneします。

$ git clone https://github.com/c9/core.git cloud9

末尾のところ、 cloud9 でも c9sdk でも何でもいいです。
cloud9のディレクトリに移動した後、インストール用のシェルを実行。

$ ./scripts/install-sdk.sh

インストールが始まり、しばらく時間がかかります。
その後、無事にインストール完了すると、

run 'node server.js -p ****(port番号) -a :' to launch Cloud9

と出てきますので、その通り実行してあげればひとまずいけるようになります。
そのままやると、 Authentication is required when not running on localhost. とか出てきて怒られるので(ローカル以外で実行するなら認証かけろよ!という話)ベーシック認証のため末尾にuser:passをつけてあげるようにします。

$ node server.js -p ****(port番号) -w /var/workspace -a user:pass

ここでのport番号は任意に変更して構いません。
この時点でいったん、アクセスできるようになっているか確認しましょう。
アクセスできないとしたらファイアウォールまわりの設定が原因と思われます。
Ubuntuならufwでしょうか。
あと、今回の構築にはConoHaを使ったのですが、こういった上位のGUIコンソール画面でファイアウォールを設定できる場合、そこも要注意です。
たまにハマります……

それから、どこでもよいのですが、workspaceディレクトリを別に切って、 -w で指定してあげるのがオススメです。
デフォルトだと、そのままcloud9のディレクトリがIDE上で開かれるようになってしまって、よろしくない。

foreverで起動する

ただ、このままにしておくとあっさりサーバが落ちるので、forever使ってデーモン化します。
ということで、起動コマンドは以下の通りにて。

$ forever start server.js -p ****(port番号) -w /var/workspace -a user:pass

nginxの設定

あとちょっとです。
ポート番号付け続けるとかかっこわるいので、80番ポートで来たものをいったんnginx設定で受けてあげるようにします。

cloud9.confなど適当な名前つけて /etc/nginx/conf.d/ あたりに置いてあげます。 以下、一例として。

upstream cloud9 {
    ip_hash;
    server (ipaddress):(port);
}

server {
  listen 80 default;
  server_name  cloud9.hoge.hoge;
  
  location / {
    proxy_pass  http://cloud9;
    proxy_set_header X-Forwarded-Host $host;
  }
}

とりあえずここでは80番ポートで受けてますが、Let's Encryptでも入れて443番ポートにした方が良いですね。
これでnginx再起動すれば、 http://hoge.hoge でアクセスすると表示されるようになっています。
いやー、最近はインストールも楽になったものですね。

具体的に、Cloud9をオンプレで動かしてどうするのか、というのはちょっとこれから運用考えるのですが。
WEBサービスとして動いているCloud9なら、色んな環境が既に構築されていてすぐにプログラミングできる、というのがウリなのですが、オンプレだと結局このあと自分で構築していかないとならないのですよね。
じゃあ、サーバに直接Cloud9たちあげて動かすのではなくて、Docker上でCloud9動かした方がいいんじゃないか?というのがここまでやった感想です。
(ただ、個人的にDockerをはじめとするコンテナがあまり好きではないというのがあり) 悩ましい限りです。

いずれにせよ、最初に書いた通り、開発環境のローカル依存リスクを下げたいなと試行錯誤中です。
ローカル仮想に開発環境持つのは、インターネット回線に繋がっていなくてもいいというメリットがあるものの、実際、そんな環境で開発することってそんなにないよね、という……

(著: Hiroyuki Noguchi)
この記事は現在0人が閲覧中