2012년 9월 17일 월요일

cloud9ide remote access tip

웹브라우저만 있으면 파일 업로드까지 가능한 막강 웹IDE인 cloud9ide 가 드디어 node 0.8.x 를 지원한다.
하지만 engine.io 탑재와 함께 내부기작이 바뀌었는지
외부에서 사용하기 위해 -l 옵션을 줘서 0.0.0.0 을 지정하면 클라이언트쪽 자바스크립트에서도 0.0.0.0을 참조하는 구조로 바뀌었다.
그래서 로컬로만 사용가능하고 외부에서 사용시 클라이언트쪽 통신이 끊어질 수 밖에 없는데
이래서야 원격 협업툴이 되지 않지.
그렇다고 직접 공인 IP를 찌르면 EADDRNOTAVAIL 오류가 난다.

$ node cloud9/server.js -w ~/workspace -p 8123 -l 123.123.123.123
path.existsSync is now called `fs.existsSync`.
connect plugin start

events.js:66
        throw arguments[1]; // Unhandled 'error' event
                       ^
Error: listen EADDRNOTAVAIL
    at errnoException (net.js:768:11)
    at HTTPServer.Server._listen2 (net.js:891:19)
    at listen (net.js:935:10)
    at Server.listen (net.js:992:9)
    at dns.js:71:18
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)

엄청 오랫동안 이 문제로 헤맸는데
결국 클라이언트는 접속할 도메인을 사용하게 하고
서버 사이드에서만 0.0.0.0 을 사용하면 되는 문제이지 않을까 싶어서
/etc/hosts 를 열고

c9.mydomain.com    0.0.0.0

이부분을 추가. 물론 c9.mydomain.com 대신 자신이 사용하는 도메인을 쓰자.
다행스럽게도 잘 된다. 아아 다행이야 다행.

물론 기동은 -l 옵션 줄때 내 도메인을 주자

$ node cloud9/server.js -w ~/workspace -p 8123 -l c9.mydomain.com
이런 식.
-w 는 작업디렉토리
-p 는 포트번호
-l 이 접속 주소인데
/etc/hosts 설정에 따라 0.0.0.0 과 같은 것이 되어서 내부적으로는 -l 0.0.0.0 과 동일한 셈이다.
사악한 꼼수지만 크게 건들지 않아도 되는 간단한 해결책.