Как установить Rocket.Chat на Ubuntu 20.04 LTS с Let’s Encrypt SSL

Как установить Rocket.Chat на Ubuntu 20.04 LTS с Let’s Encrypt SSL

 

Rocket.Chat — это чат-платформа с открытым исходным кодом, которую можно использовать как альтернативу Slack. Он поставляется с множеством функций, которые вы хотели бы иметь в своей автономной среде, например, видеоконференцсвязь, групповые чаты и интеграция с другими платформами.

  • В этом руководстве мы обсудим, как установить сервер Rocket.Chat на Ubuntu 20.04 LTS с Let’s Encrypt.Для установки мы будем использовать следующее:
    • Сервер Ubuntu 20.04 LTS
    • Node.js
    • MongoDB
    • Веб-сервер Nginx
    • SSL-сертификат Let’s Encrypt
    • Доменное имя — в этом примере мы используем chat.infoit.com.ua

Шаг 1. Обновите систему Ubuntu

Обновите свою систему Ubuntu 20.04

sudo apt-get -y update

Шаг 2 — Установите необходимые зависимости пакета

Добавьте ключ подписи MongoDB GPG:

wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -

Добавить репозиторий MongoDB:

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

Настройте Node.js для установки через диспетчер пакетов Ubuntu:

sudo apt-get -y update && sudo apt-get install -y curl && curl -sL https://deb.nodesource.com/setup_12.x | sudo bash -

Установите Node.js, MongoDB, инструменты сборки и graphicsmagick:

sudo apt-get install -y build-essential mongodb-org nodejs graphicsmagick

Установка другой версии узла, отличной от установленной базовой версии, вызывает конфликт с Rocket.Chat в Ubuntu 20.04. Вам следует установить только ту версию, которая совпадает с базовой версией, или создать символическую ссылку на базовую версию. Чтобы проверить установленную версию:

$ node --version

Установите inherits і n.

sudo npm install -g inherits n

Создайте символическую ссылку для двоичного файла узла:

sudo ln -s /usr/bin/node /usr/local/bin/node

Шаг 3 — Установите Rocket.Chat в Ubuntu 20.04

Загрузите последнюю версию Rocket.Chat со следующими:

curl -L https://releases.rocket.chat/latest/download -o /tmp/rocket.chat.tgz

Распакуйте загруженный файл в /tmp папку:

tar -xzf /tmp/rocket.chat.tgz -C /tmp

Установите Rocket.Chat в каталог по вашему выбору. В этом руководстве мы установим его в /opt каталог

cd /tmp/bundle/programs/server && npm install
sudo mv /tmp/bundle /opt/Rocket.Chat

Шаг 4 — Создайте пользователя системы Rocketchat

Создайте пользователя rocketchat и назначьте право собственности на папку Rocket.Chat.

sudo useradd -M rocketchat && sudo usermod -L rocketchat
sudo chown -R rocketchat:rocketchat /opt/Rocket.Chat

После создания пользователя вы можете приступить к созданию службы.

Шаг 5 — Создайте сервис Rocket.Chat

Создайте файл служебной единицы Rocket.Chat.

cat << EOF |sudo tee /etc/systemd/system/rocketchat.service
[Unit]
Description=The Rocket.Chat server
After=network.target remote-fs.target nss-lookup.target nginx.target mongod.target
[Service]
ExecStart=/usr/local/bin/node /opt/Rocket.Chat/main.js
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=rocketchat
User=rocketchat
Environment=MONGO_URL=mongodb://localhost:27017/rocketchat?replicaSet=rs01 MONGO_OPLOG_URL=mongodb://localhost:27017/local?replicaSet=rs01 ROOT_URL=http://localhost:3000/ PORT=3000
[Install]
WantedBy=multi-user.target
EOF

Настройте механизм хранения и репликацию для MongoDB, затем запустите службу MongoDB.

sudo sed -i "s/^#  engine:/  engine: mmapv1/"  /etc/mongod.conf
sudo sed -i "s/^#replication:/replication:\n  replSetName: rs01/" /etc/mongod.conf

Запустить и включить службу MongoDB:

sudo systemctl enable mongod && sudo systemctl start mongod

Тест:

mongo --eval "printjson(rs.initiate())"

Запустите сервис Rocket.Chat:

sudo systemctl enable rocketchat && sudo systemctl start rocketchat

Проверьте, запущена ли служба:

$ systemctl status rocketchat
● rocketchat.service - The Rocket.Chat server
     Loaded: loaded (/lib/systemd/system/rocketchat.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-11-27 10:05:54 UTC; 31s ago
   Main PID: 28294 (node)
      Tasks: 11 (limit: 19076)
     Memory: 559.7M
     CGroup: /system.slice/rocketchat.service
             └─28294 /usr/local/bin/node /opt/Rocket.Chat/main.js

Nov 27 10:06:20 chat rocketchat[28294]: ➔ |      MongoDB Version: 4.0.21                      |
Nov 27 10:06:20 chat rocketchat[28294]: ➔ |       MongoDB Engine: mmapv1                      |
Nov 27 10:06:20 chat rocketchat[28294]: ➔ |             Platform: linux                       |
Nov 27 10:06:20 chat rocketchat[28294]: ➔ |         Process Port: 3000                        |
Nov 27 10:06:20 chat rocketchat[28294]: ➔ |             Site URL: http://0.0.0.0:3000/        |
Nov 27 10:06:20 chat rocketchat[28294]: ➔ |     ReplicaSet OpLog: Enabled                     |
Nov 27 10:06:20 chat rocketchat[28294]: ➔ |          Commit Hash: b471caf9c9                  |
Nov 27 10:06:20 chat rocketchat[28294]: ➔ |        Commit Branch: HEAD                        |
Nov 27 10:06:20 chat rocketchat[28294]: ➔ |                                                   |
Nov 27 10:06:20 chat rocketchat[28294]: ➔ +---------------------------------------------------+

Шаг 6 — Настройте обратный прокси Nginx

Настройте Nginx для работы в качестве обратного прокси. Мы также настроим Let’s Encrypt в том же файле конфигурации.

Установите веб-сервер Nginx:

sudo apt install nginx

Перед настройкой SSL используйте конфигурацию ниже для настройки обратного прокси.

sudo nano /etc/nginx/conf.d/rocketchat.conf

Файл будет иметь подобное содержимое:

upstream rocket_backend {
  server 127.0.0.1:3000;
}

server {
    listen 80;
    server_name chat.infoit.com.ua;
    access_log /var/log/nginx/rocketchat-access.log;
    error_log /var/log/nginx/rocketchat-error.log;

    location / {
        proxy_pass http://rocket_backend/;
        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;
    }
}

Где:

  • rocket.example.com необходимо заменить на доменное имя.

Убедитесь, что конфигурация 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
sudo systemctl enable nginx

Шаг 7 — Настройка Let’s Encrypt SSL

Скачайте и настройте Let’s Encrypt для SSL-сертификата.

sudo apt install certbot python3-certbot-nginx

Затем запустите certbot, чтобы получить сертификат SSL.

$ certbot --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: chat.infoit.com.ua
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for chat.infoit.com.ua
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/chat.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/chat.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled
https://chat.infoit.com.ua

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=chat.infoit.com.ua
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/chat.infoit.com.ua/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/chat.infoit.com.ua/privkey.pem
   Your cert will expire on 2021-02-26. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Окончательная конфигурация Nginx после SSL должна выглядеть так:

upstream rocket_backend {
  server 127.0.0.1:3000;
}

server {
    server_name chat.infoit.com.ua;
    access_log /var/log/nginx/rocketchat-access.log;
    error_log /var/log/nginx/rocketchat-error.log;

    location / {
        proxy_pass http://rocket_backend/;
        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;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/chat.infoit.com.ua/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/chat.infoit.com.ua/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}


server {
    if ($host = chat.infoit.com.ua) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    server_name chat.infoit.com.ua;
    return 404; # managed by Certbot
}

Убедитесь, что конфигурация 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

Теперь ваш чат-сервер должен быть доступен через ваше полное доменное имя с https.

Настройте свой сервер с помощью мастера настройки:

После успешной настройки сервера доступ к сайту можно получить, используя учетные данные администратора, которые вы создали на предыдущем шаге.

Мы успешно установили Rocket.Chat на сервер Ubuntu 20.04 и настроили его.