웹사이트 검색

Rocky Linux 8에 Rocket.Chat 서버를 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. 1단계 - 방화벽 구성\n
  3. 2단계 - Docker 및 Docker Compose 설치
  4. 3단계 - Docker Compose 설치
  5. 4단계 - RocketChat 설치
  6. 5단계 - SSL 설치
  7. 6단계 - Nginx 설치 및 구성
  8. 7단계 - RocketChat 액세스 및 구성
    1. SMTP 설정 구성
    2. Rocket.Chat 클라우드에 로그인
    3. Rocket.Chat 클라우드 앱 설치 및 사용

    Rocket.Chat은 Meteor.js 프레임워크를 사용하여 JavaScript로 개발된 오픈 소스 채팅 서버입니다. 여러 장치에서 실시간으로 안전하게 통신할 수 있습니다. 이를 통해 회사 및 조직은 직원과의 내부 커뮤니케이션을 위한 채팅 서버를 구축할 수 있습니다. 소셜 채널, 챗봇, 소셜 미디어 및 생산성 앱과 통합됩니다. Bitbucket, Jira, GitLab, Confluence, Bamboo 등을 통한 통합으로 DevOps 워크플로를 모니터링할 수 있습니다. 여러 데스크톱 및 모바일 플랫폼에서 사용할 수 있습니다. Rocket.Chat에는 두 가지 에디션이 있습니다. 하나는 무료 커뮤니티 에디션이고 다른 하나는 엔터프라이즈 에디션입니다.

    이 튜토리얼에서는 Rocky Linux 시스템에 Rocket.Chat 서버의 무료 커뮤니티 버전을 설치합니다.

    전제 조건

    • A Server running Rocky Linux with a minimum of 1GB of RAM for a server for up to 200 users, and up to 50 concurrently active users. If you want to accommodate more than 200 users, you should opt for a server with a minimum of 2GB of RAM.

    • A domain name pointing to the server. For our tutorial, we will use the rocketchat.example.com domain.

    • A non-sudo user with root privileges.

    • SELinux is disabled.

    • Everything is updated.

      $ sudo dnf update
      
    • Install basic utility packages. Some of them may already be installed.

      $ sudo dnf install wget curl nano unzip yum-utils -y
      

    1단계 - 방화벽 구성

    첫 번째 단계는 방화벽을 구성하는 것입니다. Rocky Linux는 Firewalld Firewall을 사용합니다. 방화벽 상태를 확인하십시오.

    $ sudo firewall-cmd --state
    running
    

    방화벽은 다른 영역에서 작동하며 공개 영역은 우리가 사용할 기본 영역입니다. 방화벽에서 활성화된 모든 서비스와 포트를 나열합니다.

    $ sudo firewall-cmd --permanent --list-services
    

    다음 출력이 표시되어야 합니다.

    cockpit dhcpv6-client ssh
    

    Moodle이 작동하려면 HTTP 및 HTTPS 포트가 필요합니다. 열어보세요.

    $ sudo firewall-cmd --add-service=http --permanent
    $ sudo firewall-cmd --add-service=https --permanent
    

    변경 사항을 적용하려면 방화벽을 다시 로드하십시오.

    $ sudo firewall-cmd --reload
    

    2단계 - Docker 및 Docker Compose 설치

    Rocky Linux는 이전 버전의 Docker와 함께 제공됩니다. 최신 버전을 설치하려면 먼저 공식 Docker 리포지토리를 설치합니다.

    $ sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    

    최신 버전의 Docker를 설치합니다.

    $ sudo dnf install docker-ce docker-ce-cli containerd.io
    

    Docker 데몬을 활성화하고 실행합니다.

    $ sudo systemctl enable docker --now
    

    실행 중인지 확인합니다.

     docker.service - Docker Application Container Engine
       Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
       Active: active (running) since Sat 2022-08-20 22:35:19 UTC; 1s ago
         Docs: https://docs.docker.com
     Main PID: 82575 (dockerd)
        Tasks: 7
       Memory: 31.1M
       CGroup: /system.slice/docker.service
               ??82575 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    ...
    

    기본적으로 Docker에는 루트 권한이 필요합니다. sudo 명령을 실행할 때마다 sudo를 사용하지 않으려면 docker 명령에 사용자 이름을 추가하세요. > 그룹.

    $ sudo usermod -aG docker $(whoami)
    

    이 변경 사항을 활성화하려면 서버에서 로그아웃하고 동일한 사용자로 다시 로그인하거나 다음 명령을 사용해야 합니다.

    $ su - ${USER}
    

    사용자가 Docker 그룹에 추가되었는지 확인합니다.

    $ groups
    navjot wheel docker
    

    3단계 - Docker Compose 설치

    Docker Compose는 플러그인으로 사용할 수 있습니다. Github 릴리스 페이지에서 최신 버전의 Docker Compose를 확인하십시오. 이 튜토리얼을 작성할 당시 사용 가능한 최신 버전은 2.10.0입니다.

    Docker 플러그인용 디렉터리를 만듭니다.

    $ mkdir ~/.docker/cli-plugins -p
    

    Docker Compose 플러그인을 디렉터리에 다운로드합니다.

    $ curl -SL https://github.com/docker/compose/releases/download/v2.10.0/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
    

    플러그인을 실행 가능하도록 권한을 설정하십시오.

    $ chmod +x ~/.docker/cli-plugins/docker-compose
    

    설치를 확인하십시오.

    $ docker compose version
    

    다음 출력을 받게 됩니다.

    Docker Compose version v2.10.0
    

    4단계 - RocketChat 설치

    Docker 파일을 저장할 디렉터리를 만듭니다.

    $ mkdir ~/rocketchat
    

    디렉터리로 전환합니다.

    $ cd ~/rocketchat
    

    편집을 위해 Rocketchat Docker 작성 파일을 만들고 엽니다.

    $ nano docker-compose.yml
    

    다음 코드를 붙여넣습니다.

    volumes:
      mongodb_data:
      rocketchat-uploads:
    
    services:
      rocketchat:
        image: registry.rocket.chat/rocketchat/rocket.chat:5.0.4
        restart: on-failure
        volumes:
          - rocketchat-uploads:/app/uploads
        environment:
          MONGO_URL: mongodb://mongodb:27017/rocketchat?replicaSet=rs0
          MONGO_OPLOG_URL: mongodb://mongodb:27017/local?replicaSet=rs0
          ROOT_URL: https://rocketchat.example.com
          PORT: 3000
          DEPLOY_METHOD: docker
          Accounts_UseDNSDomainCheck: 'false'
          MAIL_URL: 'smtps://AmazonSESuser::587'
        depends_on:
          - mongodb
        expose:
          - 3000
        ports:
          - 3000:3000
        healthcheck:
          test: >
             /usr/local/bin/node -e '
             const http = require("http");
             const options = {
               host: "localhost",
               port: 3000,
               path: "/api/info",
               timeout: 2000
             };
             const healthCheck = http.request(options, (res) => {
               console.log(`HEALTHCHECK STATUS: $${res.statusCode}`);
               if (res.statusCode == 200) {
                 process.exit(0);
               } else {
                 process.exit(1);
               }
             });
             healthCheck.on("error", function (err) {
               console.error("ERROR");
               process.exit(1);
             });
             healthCheck.end();'
          interval: 10s
          timeout: 5s
          retries: 3
          start_period: 60s
    
      mongodb:
        image: bitnami/mongodb:4.4
        restart: on-failure
        volumes:
          - mongodb_data:/bitnami/mongodb
        environment:
          MONGODB_REPLICA_SET_MODE: primary
          MONGODB_REPLICA_SET_NAME: rs0
          MONGODB_PORT_NUMBER: 27017
          MONGODB_INITIAL_PRIMARY_HOST: mongodb
          MONGODB_INITIAL_PRIMARY_PORT_NUMBER: 27017
          MONGODB_ADVERTISED_HOSTNAME: mongodb
          MONGODB_ENABLE_JOURNAL: 'true'
          ALLOW_EMPTY_PASSWORD: 'yes'
        healthcheck:
          test: echo 'db.runCommand("ping").ok' | mongo mongodb:27017/test --quiet
          interval: 10s
          timeout: 5s
          retries: 3
          start_period: 60s
    

    Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

    Docker 컨테이너를 시작합니다.

    $ docker compose up -d
    

    컨테이너가 제대로 실행되고 있는지 확인하려면 컨테이너의 상태를 확인하십시오.

    CONTAINER ID   IMAGE                                               COMMAND                  CREATED         STATUS                   PORTS                                       NAMES
    59cd748e684f   registry.rocket.chat/rocketchat/rocket.chat:5.0.4   "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes (healthy)   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   rocketchat-rocketchat-1
    1fdabedf8681   bitnami/mongodb:4.4                                 "/opt/bitnami/script…"   2 minutes ago   Up 2 minutes (healthy)   27017/tcp                                   rocketchat-mongodb-1
    

    다음 명령을 사용하여 상태를 확인할 수도 있습니다.

    $ docker compose ps
    NAME                      COMMAND                  SERVICE             STATUS              PORTS
    rocketchat-mongodb-1      "/opt/bitnami/script…"   mongodb             running (healthy)   27017/tcp
    rocketchat-rocketchat-1   "docker-entrypoint.s…"   rocketchat          running (healthy)   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp
    

    이 시점에서 URL http://rocketchat.example.com:3000 또는 http://:3000을 실행하여 설치를 확인할 수 있습니다. 브라우저에서. 다음 단계는 SSL을 구성하고 프록시 서버 뒤에 설치하는 것입니다.

    5단계 - SSL 설치

    Lets Encrypt를 사용하여 SSL 인증서를 설치하려면 Certbot 도구를 설치해야 합니다.

    먼저 EPEL 저장소를 다운로드하여 설치해야 합니다.

    $ sudo dnf install epel-release
    

    다음 명령을 실행하여 Certbot을 설치합니다.

    $ sudo dnf install certbot
    

    SSL 인증서를 생성합니다.

    $ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d rocketchat.example.com
    

    위의 명령은 서버의 /etc/letsencrypt/live/rocketchat.example.com 디렉토리에 인증서를 다운로드합니다.

    Diffie-Hellman 그룹 인증서를 생성합니다.

    $ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
    

    Lets Encrypt 자동 갱신을 위한 챌린지 웹 루트 디렉터리를 만듭니다.

    $ sudo mkdir -p /var/lib/letsencrypt
    

    SSL을 갱신하기 위해 Cron 작업을 생성합니다. 인증서를 확인하고 필요한 경우 갱신하기 위해 매일 실행됩니다. 이를 위해 먼저 /etc/cron.daily/certbot-renew 파일을 생성하고 편집을 위해 엽니다.

    $ sudo nano /etc/cron.daily/certbot-renew
    

    다음 코드를 붙여넣습니다.

    #!/bin/sh
    certbot renew --cert-name rocketchat.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
    

    Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

    실행 가능하도록 태스크 파일에 대한 권한을 변경하십시오.

    $ sudo chmod +x /etc/cron.daily/certbot-renew
    

    6단계 - Nginx 설치 및 구성

    최신 버전의 Nginx를 설치합니다. 편집을 위해 /etc/yum.repos.d/nginx.repo 파일을 만들고 엽니다.

    $ sudo nano /etc/yum.repos.d/nginx.repo
    

    다음 줄을 붙여넣습니다.

    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    
    [nginx-mainline]
    name=nginx mainline repo
    baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    

    Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

    Nginx를 설치합니다.

    $ sudo dnf install nginx
    

    설치를 확인하십시오.

    $ nginx -v
    nginx version: nginx/1.22.0
    

    Nginx 서비스를 활성화하고 시작합니다.

    $ sudo systemctl enable nginx --now
    

    편집을 위해 /etc/nginx/conf.d/rocket.conf 파일을 만들고 엽니다.

    $ sudo nano /etc/nginx/conf.d/rocket.conf
    

    다음 코드를 붙여넣습니다.

    # Redirect all non-encrypted to encrypted
        server {
            listen 80;
            listen [::]:80;
            server_name rocketchat.example.com;
            return 301 https://$host$request_uri;
        }
    
    # HTTPS Server
        server {
            listen 443 ssl http2;
            listen [::]:443 ssl http2;
            server_name rocketchat.example.com;
    
            access_log /var/log/nginx/rocketchat_access.log main;
            error_log /var/log/nginx/rocketchat_error.log;
    
            ssl_certificate /etc/letsencrypt/live/rocketchat.example.com/fullchain.pem;
            ssl_certificate_key /etc/letsencrypt/live/rocketchat.example.com/privkey.pem;
            ssl_trusted_certificate /etc/letsencrypt/live/rocketchat.example.com/chain.pem;
            ssl_dhparam /etc/ssl/certs/dhparam.pem;
            ssl_protocols TLSv1.2 TLSv1.3;
            ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
            ssl_prefer_server_ciphers on;
            ssl_session_cache shared:SSL:20m;
            ssl_session_tickets off;
            ssl_session_timeout 180m;
            ssl_stapling on;
            ssl_stapling_verify on;
    
            location / {
                proxy_pass http://rocketchat.example.com: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-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto https;
                proxy_set_header X-Nginx-Proxy true;
                proxy_redirect off;
            }
        }
    

    완료되면 Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다. 위의 구성을 통해 Nginx는 프록시 서버로 작동하고 localhost의 포트 3000에 바인딩할 수 있습니다.

    편집을 위해 /etc/nginx/nginx.conf 파일을 엽니다.

    $ sudo nano /etc/nginx/nginx.conf
    

    include /etc/nginx/conf.d/*.conf; 줄 앞에 다음 줄을 추가합니다.

    server_names_hash_bucket_size  64;
    

    Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

    Nginx 구성 파일 구문을 확인합니다.

    $ sudo nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    

    새 구성을 활성화하려면 Nginx 서비스를 다시 시작하십시오.

    $ sudo systemctl restart nginx
    

    7단계 - RocketChat 액세스 및 구성

    브라우저에서 URL https://rocketchat.example.com을 실행하면 다음 설정 화면이 표시됩니다.

    관리자 세부 정보를 입력하고 다음 버튼을 클릭하여 계속 진행합니다. 다음으로 조직 세부 정보를 입력하라는 메시지가 표시됩니다.

    조직 세부 정보를 입력하고 다음 버튼을 클릭하여 계속 진행합니다. Marketplace 앱 및 더 많은 기능에 액세스하려면 Rocket Cloud에 채팅 서버를 등록하라는 메시지가 표시됩니다.

    세부 정보를 입력하고 관심이 있으면 등록을 클릭하십시오. 그렇지 않으면 계속하려면 독립형으로 계속 링크를 클릭하십시오. Cloud에 등록한 경우 인증 메일이 전송됩니다.

    확인 메일의 링크를 클릭하여 등록을 확인하십시오.

    확인 시 Rocket Chat 대시보드로 이동합니다.

    SMTP 설정 구성

    페이지 왼쪽 상단을 클릭하고 관리 링크를 클릭하여 프로필 이미지를 클릭하여 관리 페이지를 방문하십시오.

    왼쪽 사이드바에서 설정 링크를 클릭합니다.

    설정 페이지에서 검색 상자에 이메일을 입력하면 이메일 버튼이 나타납니다.

    이메일 섹션에서 열기 버튼을 클릭하여 이메일 설정 페이지를 엽니다. 다음 페이지에서 페이지의 SMTP 섹션을 확장합니다.

    SMTP 세부 정보를 입력하고 오른쪽 상단의 변경 사항 저장 버튼을 클릭하여 내 사용자에게 테스트 메일 보내기 버튼을 활성화합니다. SMTP 설정을 저장하려면 비밀번호를 입력하라는 메시지가 표시됩니다.

    자습서에서는 587을 포트로 사용하여 Amazon SES를 메일러로 사용하고 있습니다. 풀 버튼 위의 버튼을 선택 취소합니다. 버튼 기능은 TLS를 무시하는 것이지만 레이블이 올바르게 지정되지 않았습니다.

    모든 것이 올바르게 설정되었다면 유사한 테스트 메일을 받았을 것입니다.

    Rocket.Chat 클라우드에 로그인

    Rocket.Chat Cloud 기능을 사용하려면 로그인해야 합니다. 관리 >> 연결 서비스 메뉴를 방문하면 다음 페이지가 표시됩니다.

    Rocket.Chat Cloud에 로그인 버튼을 클릭하여 프로세스를 시작합니다. 설정 과정에서 등록한 이메일 ID를 입력하라는 로그인 페이지로 이동합니다.

    계속하려면 로그인 보내기 링크를 클릭하십시오. 로그인 링크가 포함된 메일을 받게 됩니다.

    로그인 링크를 클릭하여 프로세스를 완료하십시오. 클라우드 계정으로 로그인하려면 서버를 인증하라는 메시지가 표시됩니다.

    연결 서비스 페이지로 돌아가려면 인증 버튼을 클릭하십시오. 이제 클라우드에 로그인되었습니다.

    Rocket.Chat 클라우드 앱 설치 및 사용

    이제 관리 >> 앱 페이지를 통해 클라우드 앱을 설치할 수 있습니다. 서버에 GIPHY 앱을 설치하고 있습니다. Get 버튼을 클릭하여 설치를 진행합니다.

    앱을 구성하려면 앱 페이지에서 앱 이름을 클릭하면 애플리케이션에 대한 세부 정보 페이지가 표시됩니다. 여기에서 설정을 구성하고 앱 사용을 시작할 수 있습니다.

    설정을 입력하고 변경 사항 저장 버튼을 클릭하여 애플리케이션 설정을 완료합니다.

    Rocket Chat 대시보드로 돌아가 메시지 게시판을 방문하십시오. GIPHY 앱을 사용하려면 /giphy <검색어>를 입력하면 쿼리와 관련된 많은 GIF가 표시됩니다.

    Enter 버튼을 누르면 GIF가 메시지 화면으로 전송됩니다.

    8단계 - 로켓 채팅 백업 및 복원

    Rocket Chat을 백업하려면 MongoDB 데이터베이스를 백업해야 합니다.

    Docker 컨테이너를 중지합니다.

    $ docker compose down
    

    다음 명령을 실행하여 MongoDB 도커 이미지의 레이블을 나열합니다.

    $ docker ps -a
    

    자습서에서 MongoDB 이미지의 레이블은 rocketchat_mongo_1입니다. 다음 명령을 실행하여 데이터베이스를 파일로 내보냅니다.

    $ docker exec rocketchat_mongo_1 sh -c 'mongodump --archive' > db.dump
    

    데이터베이스를 복원하려면 다음 명령을 사용하십시오.

    $ docker exec -i <database_name> sh -c 'mongorestore --archive' < db.dump
    

    9단계 - Rocket Chat 업그레이드

    Rocket Chat을 업그레이드하려면 몇 가지 명령을 따라야 합니다. 데이터는 업그레이드 프로세스를 통해 영향을 받지 않습니다. Rocket Chat 이미지의 최신 버전을 가져옵니다.

    $ docker pull registry.rocket.chat/rocketchat/rocket.chat:latest
    

    기존 버킷을 중지합니다.

    $ docker compose stop rocketchat
    

    기존 컨테이너를 제거합니다.

    $ docker compose rm rocketchat
    

    새 컨테이너를 만들어 Rocket Chat을 시작합니다.

    $ docker compose up -d rocketchat
    

    결론

    이것으로 Rocky Linux 8 머신에 Rocket.Chat 서버를 설치하는 방법에 대한 자습서를 마칩니다. 질문이 있으시면 아래 의견에 게시하십시오.