brunch

You can make anything
by writing

C.S.Lewis

by 한상훈 Apr 18. 2016

채팅 어플 만들어보자

Rocket.chat을 이용한 통합 어플리케이션

홈페이지: 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

매거진의 이전글 다중 언어 번역기 만들기
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari