Установка и настройка сервера Rocket.Chat на Ubuntu


В данной инструкции мы рассмотрим установку и настройку сервиса Rocket.Chat на своем собственном сервере с Ubuntu.
Необходимые для Rocket.Chat компоненты
Установка пакетов
Установка MongoDB
Rocket.Chat
Установка
Настройка
Клиент для подключения к серверу
Создание пользователя
Настройка языка
Настройка для пользователя
Настройка языка по умолчанию
Настройка SSL
Установка как snap пакета
Установка компонентов
Выполним установку компонентов, необходимых для работы Rocket.Chat в несколько этапов.
Установка необходимых пакетов
Выполняем команды:
curl -sL https://deb.nodesource.com/setup_12.x | sudo bash -
apt-get install curl build-essential graphicsmagick nodejs
* где:
- curl — служебная программа для взаимодействия с сервисами по различным протоколам с синтаксисом URL. Нам понадобиться для скачивания файлов.
- build-essential — пакет, необходимый для сборки других пакетов.
- graphicsmagick — набор программ для чтения и редактирования файлов различных графических форматов.
- nodejs — программная платформа, которая делает код javascript в язык общего назначения.
Устанавливаем inherits и node версии 12.14.0:
npm install -g inherits n && sudo n 12.14.0
Установка MongoDB
Конфигурируем репозиторий для MongoDB:
vi /etc/apt/sources.list.d/mongodb-org.list
deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse
Импортируем ключ из репозитория для проверки пакетов от подделки:
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
Обновляем список пакетов:
apt-get update
И устанавливаем mongodb-org:
apt-get install mongodb-org
Вносим изменения в конфигурационный файл:
sed -i "s/^# engine:/ engine: mmapv1/" /etc/mongod.conf
sed -i "s/^#replication:/replication:\n replSetName: rs01/" /etc/mongod.conf
Разрешаем автозапуск mongodb и стартуем его:
systemctl enable mongod
systemctl start mongod
Инициализируем базу данных:
mongo --eval "printjson(rs.initiate())"
Установка и настройка Rocket.Chat
Установка
Для установки скачиваем пакет:
curl -L https://releases.rocket.chat/latest/download -o /tmp/rocket.chat.tgz
* обязательно сохраняем архив в каталог /tmp.
Распаковываем скачанный пакет:
tar zxf /tmp/rocket.chat.tgz -C /tmp
Переходим в распакованный каталог:
cd /tmp/bundle/programs/server
Выполним установку rocket.chat:
npm install
... и переносим его в каталог /opt:
mv /tmp/bundle /opt/Rocket.Chat
Настройка
Создаем пользователя для rocketchat:
useradd -M rocketchat
usermod -L rocketchat
* где первая команда создаст пользователя rocketchat без домашнего каталога; вторая — блокирует пароль пользователя.
Задаем владельца для каталога с rocketchat:
chown -R rocketchat:rocketchat /opt/Rocket.Chat
Создаем файл для нового юнита в systemd:
vi /lib/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
* в данном примере сервис будет запущен на порту 3000.
Применяем изменения в systemd:
systemctl daemon-reload
Разрешаем сервис для rocketchat и запускаем сервер для чата:
systemctl enable rocketchat
systemctl start rocketchat
Ждем около 20 секунд — запуск выполняется не сразу.
Если используется брандмауэр, открываем порт:
iptables -A INPUT -p tcp --dport 3000 -j ACCEPT
... и сохраняем настройки:
apt-get install iptables-persistent
netfilter-persistent save
Установка и настройка клиента
Переходим на страницу загрузки Rocket.Chat и скачиваем клиента для нужной операционной системы:
* клиент может быть установлен на Windows, Mac OS, Linux. В данном примере скачиваем для Windows.
Устанавливаем и запускаем программу — откроется окно для подключения. Вводим IP-адрес и порт нашего сервера:
... система проверит подключение к серверу и предложит подключиться к серверу.
При первом входе клиент потребует зарегистрировать учетную запись администратора. Заполняем поля и регистрируемся.
Можно пользоваться.
Создание нового пользователя
Переходим к администрированию сервера. Кликаем по иконки меню (с тремя точками) и выбираем Administration:
Переходим в раздел Users:
Кликаем по «плюсику» для создания нового пользователя:
Заполняем поля и кликаем по Save.
Настройка языка
Выбор языка в клиенте
Открываем клиентскую программу - кликаем по значку пользователя - выбираем My Account:
Кликаем по Preferences:
Выбираем язык и сохраняем настройки:
Настройка языка по умолчанию
Переходим к администрированию сервера. Кликаем по иконки меню (с тремя точками) и выбираем Administration:
Выбираем пункт меню General:
Выбираем язык по умолчанию:
... и сохраняем настройки.
Настройка SSL (Let's Encrypt)
Настройка подключения по шифрованному каналу выполняется с помощью веб-прокси. Рассмотрим процесс его установки и настройки, а также получение бесплатного сертификата у Let's Encrypt.
Установка NGINX и получение сертификата
В качестве веб-сервера удобнее всего использовать NGINX. Установим его командой:
apt-get install nginx
Сразу разрешим автозапуск nginx:
systemctl enable nginx
Если мы не планируем использовать сертификат от Let's Encrypt, то переходим к настройке nginx для Rocket.Chat.
Игаче, создадим конфигурационный файл с настройками для домена:
vi /etc/nginx/sites-enabled/rocket.dmosk.ru.conf
server {
listen 80;
server_name rocket.dmosk.ru;
root /usr/share/nginx/html;
}
* в данном примере мы создали виртуальный домен для rocket.dmosk.ru, который слушает запросы только по http. Это нужно, чтобы получить сертификат.
Перезапускаем nginx:
systemctl restart nginx
Если мы используем брандмауэр, создаем правила:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
netfilter-persistent save
Устанавливаем certbot:
apt-get install certbot
Получаем сертификат командой:
certbot certonly --webroot --agree-tos --email postmaster@dmosk.ru --webroot-path /usr/share/nginx/html/ -d rocket.dmosk.ru
* данной командой мы создаем запрос на получение сертификата для узла rocket.dmosk.ru, который вы должны заменить своим. Подробнее, процесс описан в инструкции Получение бесплатного SSL сертификата Let's Encrypt.
Если все сделано правильно, мы увидим:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
...
Создаем задание для автоматического обновления сертификата:
crontab -e
И добавляем строку:
0 0 * * 1,4 /usr/bin/certbot renew && systemctl reload nginx
Настройка NGINX для Rocket.Chat
Открываем наш конфигурационный файл для nginx:
vi /etc/nginx/sites-enabled/rocket.dmosk.ru.conf
... и добавляем:
...
server {
listen 443;
server_name rocket.dmosk.ru;
client_max_body_size 200M;
error_log /var/log/nginx/rocketchat.access.log;
ssl on;
ssl_certificate /etc/letsencrypt/live/rocket.dmosk.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/rocket.dmosk.ru/privkey.pem;
ssl_protocols TLSv1.2;
location / {
proxy_pass http://127.0.0.1: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-Forward-Proto http;
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
}
* в данном примере мы добавляем настройку для прослушивания 443 порта; в качестве сертификата мы используем /etc/letsencrypt/live/rocket.dmosk.ru/fullchain.pem, которые вы должны заменить своими. Все запросы перенаправляются на локальный сервер порт 3000 (Rocket.Chat).
Перезапускаем nginx:
systemctl restart nginx
Пробуем подключиться к серверу по адресу https:<наш домен>.
Установка как snap пакета
Rocket.Chat поддерживает установку через пакеты snap. Ставим сам snap:
apt-get install snapd
Устанавливаем rocketchat-server:
snap install rocketchat-server
Сервер установлен и запрещен, статус можно посмотреть командой:
systemctl status snap.rocketchat-server.rocketchat-server
В каталог с установленным сервером можно перейти командой:
cd /snap/rocketchat-server/current