Eclipse CheによるクラウドIDE環境をCentOS7 + nginxで構築する

  • 20
    Like
  • 0
    Comment
More than 1 year has passed since last update.

はじめに

こちらの記事にあるように「次世代のEclipse IDE」と謳われるEclise Cheがリリースされたらしいので使えるようにしました。
とても苦労したのでメモを残しておきます。

環境

構築した環境

ConoHaVPS 1GB(Cheビルド時のみ4GB) SSD50GB CentOS7
nginx 1.9.12

動かすのに必要なもの

java1.8
maven 3.3.1以上
docker 1.8以上

必要なもののインストール

java

yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel

maven

yumで入れられるmavenは3.0.5でjdk1.7bundleになっているためバイナリを持ってくる。

wget http://apache-mirror.rbc.ru/pub/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar -xvzf apache-maven-3.3.9-bin.tar.gz
mv apache-maven-3.3.9/* /usr/bin

docker

docker公式で詳細な手順が公開されているので適当に入れる。

Eclipse Cheのインストール

公式リポジトリからソースを入手してmvnでビルド。一時的にメモリを4GBに増やしました。
※ masterを使うのが不安なら4.0.0RC-Xのタグを利用すれば大丈夫だと思います。

git clone https://github.com/eclipse/che.git
cd che/assembly
mvn clean install
cp -r assembly-main/target/eclipse-che-<che-ver>/eclipse-che-<che-ver>/ /usr/local/share/eclipse-che

mavenのビルドが正常に終了していればche/assembly内の各ディレクトリにtarget/ができていると思います。
Eclipse Cheの本体はche/assembly/assembly-main/target/eclipse-che-<バージョン>/eclipse-che-<バージョン>/以下になります。これを/usr/local/share/なんかにコピーします。

Eclipse Cheの設定

Eclipse Cheの構成はいくつかパターンが有るようですが、今回は公式ドキュメントのConfiguration: Networkingの項を参考に"Native Process for Che, Native Docker for Workspaces"に沿った環境を構築しました。

Che configファイルの編集

dockerとche間の通信がどうなっているのかわからず色々試しましたが、endpointにサーバのpublic IPを設定して起動時に-r:を付ければ良いみたいです。cheのコミッターの人もそう言ってました。

CHE_HOME/conf/che.properties
()

# When the workspace master launches a new workspace, Che performs checks of the internal Web
# services. When Che gets a valid response, we know that the workspace agent is ready for use.
# machine.ws_agent.max_start_time_ms=60000
machine.ws_agent.max_start_time_ms=600000 # workspaceを作るときに失敗しないように0を増やしておく
machine.ws_agent.ping_delay_ms=2000
machine.ws_agent.ping_conn_timeout_ms=2000

()

# Size of the machine by default.  What is used if RAM parameter not provided by user or API.
machine.default_mem_size_mb=1024
machine.supported_docker_version=1.6.0,1.6.1,1.6.2,1.7.1,1.8.1,<docker-ver> # 一応使っているdockerのバージョンを追加しておく

()

# URL path to api service.
# Browser clients use this to initiate REST communications with workspace master
# api.endpoint=http://localhost:${SERVER_PORT}/ide/api
machine.docker.che_api.endpoint=http://<public IP>:${SERVER_PORT}/ide/api

Eclipse Che実行ユーザの作成

cheをそのままrootなどで実行するとdockerの関係なんかでエラーになります。コマンドライン引数で無視することも出来ますがProject作成の時にエラーが出たので素直に実行ユーザを作成します。
既にuid:1000のユーザがいる場合は自前に変更する必要があります。

cat /etc/password | grep 1000 # uid:1000のユーザを探す
usermod -u <uid> -U <user>
find / -user 1000 -print | xargs -t chown <uid>

uid:1000が空いたら実行ユーザcheをdockerグループで作成します。
ちゃんと確認していないですが、dockerグループをパスなしsudoerに設定する必要があるかもしれません。

useradd -s /sbin/nologin -u 1000 -g docker che
chown -R che:docker <CHE_HOME>

Eclipse Cheの自動起動設定

コマンドラインから起動するのはとても面倒なのでsystemctlから操作することを検討しましょう。
詳しくは「CentOS7 での Tomcat8 の自動起動設定」や「Systemdを使ってさくっと自作コマンドをサービス化してみる」などを御覧ください。

/etc/systemd/system/にeclipse-che.serviceを作成します。
また、<CHE_HOME>/conf/にenvを作成します。

env
JAVA_HOME="/path/to/java/jre"
eclipse-che.service
[Unit]
Description=eclipse-che luncher
After=syslog.target network.target

[Service]
Type=forking
EnvironmentFile=<CHE_HOME>/conf/env
ExecStart=<CHE_HOME>/bin/che.sh -r:<public IP> start
ExecStop=<CHE_HOME>/bin/che.sh stop
KillMode=none
User=1000

[Install]
WantedBy=multi-user.target

サービスを作成したら自動起動を有効にしてサービスを起動します。

chmod +x /etc/systemd/system/`にeclipse-che.service
systemctl daemon-reload
systemctl enable eclipse-che
systemctl start eclipse-che

nginxの設定

cheは起動時に-pを指定すると指定したポートで、指定しなければ8080番でtomcatが走るので、そのポートにproxy_passを設定してあげればOKです。
ただ、WebSocketに対応する必要が必要があるようなのでそこでかなりハマりました。
502 Bad Gate Wayになることがありますがcheを再起動してからnginxを再起動すれば治るはずです。

che.conf
server {
  ()

  location / {
    client_max_body_size 0;
    gzip off;

    proxy_read_timeout      300;
    proxy_connect_timeout   300;
    proxy_redirect          off;

    proxy_http_version 1.1;

    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    # WebSocket対応用
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    proxy_pass http://localhost:<port>;
  }
}

この段階でhttp://<yourdomain>/にアクセスすればたぶん下のようなDashboardが表示されると思います。

名称未設定.png

終わりに

mavenを使ったbuildとrunを少し試してみましたが初回起動に少し時間がかかる点を除けばなかなかいいのではないかと思います。
まだHello Worldしか試してないのでもう少し色々試そうかと思います。