채팅 어플 만들어보자

홈페이지: https://www.startwithup.com

Rocket.chat

채팅을 구현하기 위해 최근 주목받는 오픈소스인 Rocket.chat을 활용하였다. Rocket.Chat은 웹 채팅 플렛폼으로 최근 주목받는 오픈소스이다. 여러 링크를 참조해 Rocket.chat을 우분투 서버에 올리는 일을 진행하였다. 대부분의 글의 정보가 불충분하거나 설치가 제대로 진행되지 않아 여러 자료를 참고해서 직접 테스트해보았다.

Rocket.chat got many features!


서버 준비

Security group inbound setting

아마존 EC2를 이용해 우분투 서버를 만들었다. Security group은 보편적인 웹 어플리케이션에 적용되는 방식을 따랐으나, 공식 메뉴얼에도 추천하는 방식이라 위의 설정이 default라고 볼 수 있다

사이트 연결

원활한 테스트를 위해 도메인을 연결해 본다. 도메인을 구입해도 되지만 무료로 획득하기로 했다. 무료 도메인은 http://www.freenom.com/ 에서 얻을 수 있다. 그 후 My Domains - Manage DNS - Manage Freenom DNS로 들어간다. 인스턴스는 Elastic IP에 연결하여 타겟 부분에 입력해준다. CNAME 부분은 반드시 넣어야 한다. Rocket.chat 공식 메뉴얼을 따르면 DNS 주소 형태로 넣으라고 해서 Public DNS를 넣었지만 IP를 넣어도 될 것 같다.

Let's Encrypt

Let's Encrypt를 통해 SSL certificate를 받는다.

sudo apt-get install -y git;

sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt;

netstat -na | grep ':80.*LISTEN';

프로세스가 나타나면 kill한다. 내 경우엔 아무 메세지도 뜨지 않았다.

./letsencrypt-auto certonly --standalone --email 연결할이메일 -d 도메인주소 -d 서브도메인주소**;**

예> 도메인주소: example.com, 서브도메인주소: www.example.com

서브도메인은 옵션으로 없으면 지워도 된다.

cd etc/letsencrypt/live/도메인주소;

이동하면 4개의 파일(.pem)이 생성된 것을 확인할 수 있다.

nginx설치 및 설정

sudo apt-get install -y nginx;

config 파일의 백업을 생성한다.

cd /etc/nginx/sites-available;

sudo mv default default.reference;

편집기를 사용하여 아래의 내용을 입력한다. 도메인 주소를 수정한다.

sudo nano /etc/nginx/sites-available/default;


server {

listen 443 ssl; server_name 도메인주소**;**

ssl_certificate /etc/letsencrypt/live/도메인주소/fullchain.pem;

ssl_certificate_key /etc/letsencrypt/live/도메인주소/privkey.pem;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; root /usr/share/nginx/html;

index index.html index.htm; # Make site accessible from http://localhost/ server_name localhost; location / { proxy_pass http://도메인주소: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 { listen 80; server_name 도메인주소**; return 301 https://$host$request_uri;}**


sudo service nginx stop;

sudo nginx -t;

sudo service nginx start;

Docker & Docker Compose

docker를 설치한다.

sudo wget -qO- https://get.docker.com/ | sh;

sudo usermod -aG docker ubuntu;

sudo -i;

curl -L https://github.com/docker/compose/releases/download/1.4.2/docker-compose-Linux-x86\_64 > /usr/local/bin/docker-compose;

chmod +x /usr/local/bin/docker-compose;

exit;

로그아웃후 다시 접속한다.

Docker Container 셋업

sudo mkdir -p /var/www/rocket.chat/data/runtime/db;

sudo mkdir -p /var/www/rocket.chat/data/dump;

sudo nano /var/www/rocket.chat/docker-compose.yml;

편집기를 통해 다음의 내용을 입력해준다.


db: image: mongo volumes: - ./data/runtime/db:/data/db - ./data/dump:/dump command: mongod --smallfilesrocketchat: image: rocketchat/rocket.chat:latest environment: - MONGO_URL=mongodb://db:27017/rocketchat - ROOT_URL=https://<ABC.DOMAIN.COM> links: - db:db ports: - 3000:3000


자동 시작 설정 & 업데이트 후 재부팅 설정

sudo nano /etc/init/rocketchat_mongo.conf;


description "MongoDB service manager for rocketchat"# Start MongoDB after docker is runningstart on (started docker)stop on runlevel [!2345]# Automatically Respawn with finite limitsrespawnrespawn limit 99 5# Path to our appchdir /var/www/rocket.chatscript # Showtime exec /usr/local/bin/docker-compose up dbend script


sudo nano /etc/init/rocketchat_app.conf;


description "Rocketchat service manager"# Start Rocketchat only after mongo job is runningstart on (started rocketchat_mongo)stop on runlevel [!2345]# Automatically Respawn with finite limitsrespawnrespawn limit 99 5# Path to our appchdir /var/www/rocket.chatscript # Bring up rocketchat app exec /usr/local/bin/docker-compose up rocketchatend script


재시작 & 테스트

sudo reboot;

sudo docker ps -a;

위와 같이 이미지 파일 두 개를 찾을 수 있다.

완성

도메인 주소를 들어가면 반가운 로그인 창을 만날 수 있다.


참고링크:

https://github.com/RocketChat/Deploy.to.Cloud/tree/master/AWS

https://www.digitalocean.com/community/tutorials/how-to-install-configure-and-deploy-rocket-chat-on-ubuntu-14-04

Comments

    More from Howdy의 블로그

    See all posts

    특별한 법칙은 아니지만 자주 생각하려는 법칙이 있다. 향기의 법칙이라고 명명한 이 법칙은 무척이나 간단하다. 어떠한 상황에서든 상대를 유혹하라는 것이다. 원하는 것이 있다면 상대방이 원하도록 유혹하는 것이다. 이는 아주 간단한 원칙인데 동시에 매우 달성하기 어려운 법칙이기도 하다. 향…

    Sanghoon Han

    향기의 법칙

    Hearts 1Comments 110/07/2026

    하루가 멀다하고 사고가 터지는 것이 인간사. 인간이 만든 것 중 무엇이 대단하다 말할 수 있을까. 무엇이 완전하다 말할 수 있을까. 무엇이 영원하다 말할 수 있을까. 영원한 것은 단 하나도 없고 먼지가 쌓이지 않는 것도 단 하나도 없다. 기회 역시 영원하지 않아서 영원할 것 같은 젊음…

    Sanghoon Han

    영원하지 않다

    Hearts 0Comments 010/07/2026

    이카루스는 태양에 가까이 가면 안된다는 것을 알았으나 높게 날았다. 깃을 붙인 밀납이 녹아 깃이 떨어져 나가고 나서야 그는 자신의 미래를 보았다. 자유로 향하는 날개를 얻었을 때 태양을 향해서도 바다를 향해서도 안됐다. 고도를 유지하며, 섬세하게 바람을 타지 않는다면 어디로든 날아갈…

    Sanghoon Han

    자유의 날개

    Hearts 0Comments 010/07/2026

    인간이 보편적으로 누리는 권리는 대부분 거래를 통해 획득했다. 참정권은 군복무, 참전으로 얻었고, 링컨의 노예제 해방을 위해선 산업화된 사회에서의 흑인 인권이 필요했다. 반면 노예를 사용하는 것이 경제적 이득이 되는 남부군의 입장에서는 당시 기준으로 재산권 침해에 해당한다고 보았기에…

    Sanghoon Han

    민주주의 붕괴

    Hearts 0Comments 010/07/2026