Rocket.Chat 서버 설치 및 Nginx 리버스 프록시 구성 (Ubuntu 16.04)
개요
Rocket.Chat은 오픈 소스 팀 채팅 솔루션으로, 자체적으로 Slack과 유사한 채팅 서비스를 구축할 수 있습니다. JavaScript 기반이며 Meteor 전체 스택 프레임워크로 개발되었습니다. 이 가이드는 Ubuntu LTS 16.04 서버를 사용하고 Nginx를 Rocket.Chat의 리버스 프록시로 설정하는 과정을 단계별로 안내합니다.
중요: 프로덕션 환경에서는 방화벽 설정, SSL(권장: Let’s Encrypt), 자동화된 서비스 매니저(systemd)로의 서비스 등록 등을 추가로 적용해야 합니다. 이 문서의 예시는 이해를 돕기 위한 수동 실행 예제를 포함합니다.
대상 독자와 전제 조건
- 대상: 시스템 관리자, DevOps 엔지니어, 내부 인프라를 구축하려는 개발팀
- 전제 조건:
- Ubuntu 16.04 서버
- 루트 권한 또는 sudo 권한
- 공용 도메인(예: rocket-chat.co)을 사용하려면 해당 도메인의 DNS가 서버 IP를 가리켜야 함
목차
- 준비 작업
- 1단계: Rocket.Chat 의존성 설치
- 2단계: MongoDB 설치(3.2)
- 3단계: MongoDB ReplicaSet 구성
- 4단계: npm 및 Node.js 설치
- 5단계: Rocket.Chat 서버 설치
- 6단계: Nginx를 리버스 프록시로 설치 및 구성(SSL 포함)
- 7단계: 최종 테스트
- 보안 및 운영 권장사항
- 문제 해결(자주 발생하는 오류와 해결 방법)
- 대체 접근법
- 배포 체크리스트 및 역할별 점검표
- 테스트 케이스 및 수용 기준
- 1줄 용어집
- 요약
준비 작업
- 서버에 SSH로 접속하고 루트 권한을 얻습니다.
ssh [email protected]
sudo su참고: 이후 명령은 예제를 위해 루트로 실행한다고 가정합니다.
1단계 - Rocket.Chat 의존성 설치
Ubuntu 저장소를 업데이트한 후 필요한 패키지를 설치합니다.
apt-get update필요 패키지 설치:
apt-get install curl graphicsmagick build-essential중요: graphicsmagick은 이미지 썸네일, 이모지 등 이미지 처리를 위해 필요합니다.
2단계 - MongoDB 설치
Rocket.Chat은 MongoDB가 필요합니다. 이 예제에서는 MongoDB 3.2를 MongoDB 공식 레포지터리에서 설치합니다.
MongoDB 키를 추가합니다:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927레포지터리 추가(배포 코드명 자동 삽입):
echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list레포지터리 업데이트 및 MongoDB 설치:
apt-get update
apt-get install mongodb-org부팅 시 MongoDB가 자동 시작되도록 설정하고 서비스 시작:
systemctl enable mongod
systemctl start mongodMongoDB는 기본적으로 포트 27017에서 동작합니다.
3단계 - MongoDB ReplicaSet 구성
Rocket.Chat은 oplog를 사용해 성능을 향상시키므로 복제 세트(replSet)를 구성해야 합니다. 간단한 단일 노드 replicaSet을 구성하는 방법은 다음과 같습니다.
mongod 설정 파일을 편집합니다:
vim /etc/mongod.conf파일에서 로컬 바인딩을 비활성화하려면 24행 근처에 있는 bindIp를 주석 처리합니다(예제):
net:
port: 27017
#bindIp: 127.0.0.1그리고 34행 근처에 replicaSet 설정을 추가합니다:
#replication:
replication:
oplogSizeMB: 1
replSetName: rs0저장 후 MongoDB 재시작:
systemctl restart mongodMongoDB 셸을 열어 ReplicaSet을 초기화합니다:
export LC_ALL=C
mongo
rs.initiate()정상적으로 초기화되면 다음과 유사한 결과가 표시됩니다:
{
"info2" : "no configuration specified. Using a default configuration for the set",
"me" : "nyanko-sensei:27017",
"ok" : 1
}ok 값이 1인지 확인하세요. 그렇지 않으면 설정 문제입니다.

(이미지 설명: MongoDB ReplicaSet 초기화 결과를 보여주는 콘솔 스크린샷)
4단계 - npm 및 Node.js 설치
Rocket.Chat 최신 버전은 특정 Node.js 버전(예: 4.5)이 필요합니다. Ubuntu 저장소에서 nodejs와 npm을 설치한 후, npm으로 n 패키지를 사용해 원하는 Node.js 버전을 설치합니다.
apt-get install nodejs npm글로벌로 n 패키지를 설치합니다:
npm install -g nn으로 Node.js 4.5를 설치합니다:
sudo n 4.5버전 확인:
node --version
npm -v
(이미지 설명: n 도구로 Node.js 버전을 전환하는 터미널 화면)
중요: 프로덕션에서 사용 가능한 최신 Rocket.Chat 릴리스는 더 높은 Node.js 버전을 요구할 수 있으니 공식 문서를 확인하세요.
5단계 - Rocket.Chat 서버 설치
/var/www/ 아래에 Rocket.Chat을 설치합니다.
최신 Rocket.Chat을 다운로드하고 압축 해제합니다:
curl -L https://rocket.chat/releases/latest/download -o rocket.chat.tgz
tar -xzvf rocket.chat.tgz디렉터리를 만들고 bundle을 이동/이름 변경:
mkdir -p /var/www/
mv bundle Rocket.Chat
mv Rocket.Chat /var/www/Rocket.Chat 디렉터리로 이동해 서버에 필요한 환경 변수를 세팅하고 시작합니다:
cd /var/www/Rocket.Chat/
cd programs/server/
npm install
cd ../../
export ROOT_URL=http://192.168.1.110:3000/
export MONGO_URL=mongodb://nyanko-sensei:27017/rocketchat?replicaSet=rs0
export PORT=3000
node main.js환경 변수 예시 설명:
- ROOT_URL: 외부에서 접근할 수 있는 애플리케이션 URL
- MONGO_URL: MongoDB 연결 문자열(복제세트 이름 포함)
- PORT: 애플리케이션이 바인드할 포트

(이미지 설명: Rocket.Chat 설치 후 초기 웹 인터페이스 접속 화면)
브라우저에서 http://192.168.1.110:3000/ 로 접속하면 설치된 Rocket.Chat을 확인할 수 있습니다.

(이미지 설명: 설치 완료 후 표시되는 로그인/등록 화면)
6단계 - Nginx를 리버스 프록시로 설치 및 구성
프로덕션에서는 Rocket.Chat을 Nginx 뒤에서 HTTPS로 서비스하는 것이 일반적입니다.
Nginx 설치:
apt-get install nginxSSL 디렉터리 생성 및 인증서(자가 서명 예제) 생성:
mkdir -p /etc/nginx/ssl/
cd /etc/nginx/ssl/
openssl req -new -x509 -days 365 -nodes -out /etc/nginx/ssl/rocket-chat.crt -keyout /etc/nginx/ssl/rocket-chat.key
chmod 400 rocket-chat.key가상 호스트 파일 생성:
cd /etc/nginx/sites-available/
vim rocket-chat아래 가상 호스트 설정을 붙여넣습니다(예제):
# Upstreams
upstream backend {
server 127.0.0.1:3000;
}
# Redirect Options
server {
listen 80;
server_name rocket-chat.co;
# enforce https
return 301 https://$server_name$request_uri;
}
# HTTPS Server
server {
listen 443;
server_name rocket-chat.co;
error_log /var/log/nginx/rocketchat.access.log;
ssl on;
ssl_certificate /etc/nginx/ssl/rocket-chat.crt;
ssl_certificate_key /etc/nginx/ssl/rocket-chat.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # dont use SSLv3 ref: POODLE
location / {
proxy_pass http://192.168.1.110:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forward-Proto http;
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
}주의: 위 설정에서 server_name과 proxy_pass URL을 자신의 도메인 및 내부 IP로 변경하세요.
가상 호스트 활성화 및 설정 테스트:
ln -s /etc/nginx/sites-available/rocket-chat /etc/nginx/sites-enabled/rocket-chat
nginx -t오류가 없으면 Nginx 재시작:
systemctl restart nginx7단계 - Rocket.Chat을 Nginx 뒤에서 실행 및 테스트
환경 변수를 도메인(HTTPS)으로 변경하고 Rocket.Chat을 다시 실행합니다:
cd /var/www/Rocket.Chat/
export ROOT_URL=https://rocket-chat.co
export MONGO_URL=mongodb://nyanko-sensei:27017/rocketchat?replicaSet=rs0
export PORT=3000
node main.js브라우저에서 https://rocket-chat.co 로 접속하면 HTTPS로 리디렉션되어 접속됩니다.

(이미지 설명: Nginx 뒤에서 동작하는 Rocket.Chat의 브라우저 화면)
관리자 계정 생성: ‘Register a new account’ 링크를 클릭해 이름, 이메일, 비밀번호를 입력하고 등록합니다. 사이트 URL 사용 확인 절차에서 도메인을 확인하고 진행합니다.

(이미지 설명: SSL로 보호된 Rocket.Chat의 등록 화면)
관리자 대시보드가 표시되면 채널 생성 및 테스트 메시지 전송으로 기능을 검증합니다.

(이미지 설명: Rocket.Chat의 관리자 대시보드 화면)
환경 변수 업데이트 후 결과 예시:

(이미지 설명: 변경된 ROOT_URL이 반영된 설정 화면)
보안 및 운영 권장사항
- SSL: 운영에서는 Let’s Encrypt(무료)로 인증서를 발급받아 자동 갱신을 구성하세요.
- 서비스 관리: node main.js를 직접 실행하는 대신 systemd 유닛 파일로 등록해 자동 재시작/로그 관리를 하세요.
- 방화벽: 외부에서 직접 MongoDB 포트(27017)에 접근하지 못하도록 방화벽 규칙(ufw, iptables)을 설정하세요.
- 인증/인증서 검증: reverse proxy에서 X-Forwarded-* 헤더가 정확히 전달되는지 확인하세요.
- 로그와 모니터링: ELK, Prometheus 등으로 애플리케이션 로그/메트릭을 수집하세요.
- 정기 업데이트: Ubuntu 보안 업데이트 및 Rocket.Chat/Node.js/MongoDB 패치 적용 정책을 수립하세요.
중요: MongoDB를 공개적으로 노출하면 데이터 손상/탈취 위험이 있으므로, 반드시 내부 네트워크 또는 VPN 뒤에 두십시오.
문제 해결 — 자주 발생하는 오류와 해결 방법
MongoDB 연결 오류
- 증상: Rocket.Chat이 mongodb에 연결하지 못함
- 점검 항목: MONGO_URL의 호스트/포트/DB명/replicaSet 이름이 정확한지 확인, mongod 서비스 상태(systemctl status mongod), 방화벽이 포트를 차단하는지 확인
oplog 관련 문제
- 증상: 실시간 업데이트가 동작하지 않음
- 원인: MongoDB가 replSet으로 구성되지 않았거나 Rocket.Chat이 올바른 MONGO_URL(복제셋 포함)을 사용하지 않음
- 해결: rs.status()로 replSet 상태 확인, replSetName 일치 여부 확인
Nginx에서 WebSocket이 동작하지 않음
- 증상: 메시지 수신/전송이 일시적으로 동작하지 않거나 연결이 끊어짐
- 점검: proxy_set_header Upgrade/Connection 헤더가 정확히 설정되었는지 확인, proxy_http_version 1.1 사용 여부 확인
Node.js 버전 문제
- 증상: Rocket.Chat이 실행 중 에러를 내며 종료됨
- 해결: Rocket.Chat 요구 버전과 현재 node –version을 비교, 필요 시 n으로 올바른 버전 설치
추가 디버깅 팁: Rocket.Chat 로그(콘솔 출력 및 로그 파일) 확인, 브라우저 개발자 도구의 네트워크 탭으로 WebSocket 연결 상태 점검
대체 접근법
Docker 기반 배포
- 장점: 격리된 환경, 이미지 버전 관리, 재현 가능한 배포
- 요약: 공식 Rocket.Chat Docker 이미지를 사용하면 MongoDB와 Rocket.Chat 컨테이너를 함께 docker-compose로 구성해 빠르게 배포 가능
패키지/스냅(snap) 설치
- 장점: 간단한 설치, 자동 업데이트
- 단점: 커스터마이징이 필요한 경우 제약이 있을 수 있음
매니지드 호스팅
- 장점: 운영 부담 감소
- 단점: 비용 발생, 데이터 통제 범위 제한
선택 가이드: 작은 팀/테스트 환경은 수동 설치 또는 스냅, 운영/대규모 환경은 Docker + 오케스트레이션 또는 VM 기반 수동 구성 중 요구 사항에 따라 결정
배포 소규모 SOP(미니 방법론)
- 준비: 서버 프로비저닝(네트워크, DNS, 방화벽)
- 의존성 설치: curl, graphicsmagick, build-essential
- DB 설치: MongoDB 설치 및 replSet 구성, 보안 설정
- 런타임: Node.js 설치(요구 버전), npm 의존성 설치
- 애플리케이션: Rocket.Chat 배포, 환경 변수 구성
- 프록시: Nginx 설정 및 SSL 적용
- 테스트: 브라우저 접속, 관리자 생성, 메시지 전송 테스트
- 운영: systemd 유닛 생성, 로그/모니터링 구성, 백업 정책 수립
역할 기반 체크리스트
시스템 관리자
- Ubuntu 패키지 보안 업데이트 자동화
- 방화벽 규칙 설정(SSH 제외한 불필요 포트 차단)
- systemd로 Rocket.Chat 서비스화
데이터베이스 관리자
- MongoDB 복제(또는 백업) 전략 수립
- mongod.conf 보안옵션 검토(인증 여부, 바인드 주소)
DevOps 엔지니어
- CI/CD로 Rocket.Chat 버전/설정 배포 자동화
- 모니터링/알림 구성
애플리케이션 관리자
- Rocket.Chat 설정(인증, SMTP, 외부 통합) 적용
- 사용자/권한 정책 관리
테스트 케이스 및 수용 기준
설치 검증
- 항목: Rocket.Chat 웹 UI에 접속 가능
- 기준: https://<도메인> 접속 시 200 응답 및 로그인/등록 페이지 로드
메시지 송수신
- 항목: 동일 서버 내 사용자 간 메시지 전송
- 기준: 메시지 전송 후 수신자가 즉시(실시간) 수신
WebSocket 작동
- 항목: DevTools의 WebSocket 연결이 성공적으로 유지
- 기준: Upgrade 응답 101, 연결 끊김 없이 유지
SSL 검증
- 항목: 브라우저에서 SSL 인증서 경고 없음
- 기준: 인증서 신뢰 체인 유효 또는 Let’s Encrypt로 발급
1줄 용어집
- Rocket.Chat: 오픈 소스 팀 채팅 서버 소프트웨어
- ReplicaSet: MongoDB의 복제 그룹, oplog를 통해 실시간 동기화 지원
- ROOT_URL: 애플리케이션의 공개 루트 URL
- MONGO_URL: MongoDB 연결 문자열
- Nginx: 고성능 웹 서버/리버스 프록시
대시보드 스크린샷 및 참고 자료
참조: 공식 설치 문서 — https://rocket.chat/docs/installation/manual-installation/ubuntu/
요약
- 이 가이드는 Ubuntu 16.04에서 Rocket.Chat을 수동 설치하고 MongoDB 복제셋과 Nginx 리버스 프록시(HTTPS)를 구성하는 전체 과정을 다룹니다.
- 핵심 포인트: MongoDB 복제셋 설정과 Nginx의 WebSocket 프록시 헤더(proxy_set_header Upgrade/Connection)가 정상 동작해야 실시간 채팅 기능이 정상화됩니다.
- 권장 운영 추가 작업: systemd 서비스 등록, Let’s Encrypt로 인증서 자동 갱신, 방화벽 및 백업 정책 수립.
추가 도움이나 Docker/Let’s Encrypt 예제 systemd 유닛 파일이 필요하면 알려주십시오.