Развёртывание Чат Ракета с помощью Docker и Docker Compose — один из наиболее рекомендуемых способов запуска благодаря простоте и гибкости.
Перед развёртыванием Чат Ракета через Docker необходимо выполнить вход в реестр образов. Без авторизации Docker не сможет скачать образ приложения, и контейнеры не запустятся.
Команду для входа в реестр и логин / пароль можно получить на клиентском портале в разделе Документация после создания клиентского аккаунта.
В этом руководстве вы узнаете, как:
Что получится в результате:
Совет.
- Организациям, которым нужна совместимость с FIPS, см. FIPS Compliance Guide.
- Если вы используете встроенные образы Bitnami MongoDB, см. сообщение на форуме о переходе на официальный образ MongoDB 8.0, необходимый для Чат Ракета 8.0.
Перед началом убедитесь, что выполнены следующие условия:
Это руководство рассчитано на пользователей Linux. Для других ОС и альтернативных способов установки см. официальную документацию Docker и документацию Git.
curl -L https://get.docker.com | sh # Install Docker
sudo apt install git # Install Git
sudo, добавьте текущего пользователя в группу Docker.
whoami
$USER:sudo usermod -aG docker $USER
sudo reboot
Когда Docker и Git установлены, можно получить файлы конфигурации Чат Ракета.
Официальный репозиторий rocketchat-compose содержит все файлы конфигурации, необходимые для развёртывания Чат Ракета через Docker Compose.
git clone --depth 1 https://rce-gitlab.fgts.ru/rce/rce-compose-files.git
В репозитории есть:
compose.yml — основной файл конфигурации Docker Compose для развёртывания Чат Ракета..env.example — пример файла окружения для настройки развёртывания.Не редактируйте файлы compose напрямую. Всю конфигурацию развёртывания можно задать в одном файле .env, который вы создадите на следующем шаге.
Все параметры развёртывания — версия, домен, обратный прокси, учётные данные мониторинга — задаются переменными в файле .env.
cp .env.example .env
Команда создаёт файл .env, в котором можно задать переменные развёртывания: нужную версию Чат Ракета и URL рабочего пространства.
nano .env
Пройдите разделы конфигурации ниже, прежде чем сохранять файл. Каждый раздел относится к отдельной области развёртывания.
Найдите переменную RELEASE и укажите точную версию Чат Ракета, которую хотите развернуть. Полный список стабильных релизов — в Тэги и информация. Например, для Чат Ракета 8.8.1:
RELEASE=8.8.1-rce
Примечание. В продакшене настоятельно рекомендуется указывать фиксированный номер версии (например, 8.8.1), а не
latest. Это защищает от неожиданных проблем из‑за автоматических ломающих обновлений.
Предупреждение. MongoDB 8.x может не запуститься на Ubuntu 26.04 из‑за проблемы совместимости со стороны MongoDB. Пока используйте Ubuntu 24.04 LTS или другой поддерживаемый выпуск Ubuntu. Подробности — в примечании MongoDB.
В репозитории есть готовый стек мониторинга: Prometheus собирает метрики, Loki агрегирует журналы, Grafana даёт дашборд для визуализации и того и другого. Это позволяет видеть ключевые метрики, отслеживать производительность и состояние экземпляра Чат Ракета.
Grafana можно открывать либо по URL (например, https://your-domain.com/grafana), либо по поддомену (например, https://grafana.your-domain.com).
Этот вариант удобен для локальной разработки или схем с одним доменом: дашборд Grafana доступен как подкаталог (например, https://your-domain.com/grafana).
Чтобы настроить это, в файле .env:
GRAFANA_DOMAIN: оставьте пустой.GRAFANA_PATH: укажите нужный путь без завершающего слэша (например, /grafana).GRAFANA_DOMAIN=
GRAFANA_PATH=/grafana
admin Grafana в переменной GRAFANA_ADMIN_PASSWORD:GRAFANA_ADMIN_PASSWORD=your_secure_password
После развёртывания Grafana будет доступна по адресу https://your-domain.com/grafana.
Доступ к дашборду Grafana через отдельный поддомен рекомендуется для продакшена: точка входа чище и безопаснее.
Чтобы настроить это:
grafana.your-domain.com) и укажите публичный IP сервера..env:
GRAFANA_DOMAIN: поддомен дашборда Grafana (например, grafana.your-domain.com).GRAFANA_PATH: оставьте пустой.GRAFANA_DOMAIN=grafana.your-domain.com
GRAFANA_PATH=
admin Grafana:GRAFANA_ADMIN_PASSWORD=your_secure_password
После развёртывания Grafana будет доступна по адресу https://grafana.your-domain.com.
Обратный прокси определяет, как пользователи входят в рабочее пространство и защищены ли соединения HTTPS. В репозитории по умолчанию и в качестве рекомендуемого варианта идёт Traefik. Nginx можно использовать как альтернативу, если команда уже работает с ним или есть особые инфраструктурные требования. Выберите один вариант и следуйте только ему.
Traefik интегрируется напрямую с Docker и автоматически выпускает TLS-сертификаты через Let's Encrypt — для большинства развёртываний это более простой выбор.
Если вы только тестируете Чат Ракета локально и внешний доступ или HTTPS не нужны, оставьте в .env значения по умолчанию:
DOMAIN=localhost
ROOT_URL=http://localhost
После успешного развёртывания рабочее пространство будет доступно по адресу http://localhost:3000.
Примечание. Перед продолжением убедитесь, что запись A домена (или необязательная CNAME) указывает на публичный IP сервера, где запущен Docker. Traefik не сможет выпустить сертификат для домена, до которого не достучаться.
Для публичного и защищённого продакшен-развёртывания обновите в .env следующие переменные:
| Поле | Описание | Пример |
|---|---|---|
| DOMAIN | Публичный домен. Без https:// и без завершающего слэша. |
example.com |
| ROOT_URL | Полный URL, по которому пользователи заходят на сервер, включая защищённый протокол (https://). |
https://example.com |
| LETSENCRYPT_ENABLED | Значение true включает автоматическое получение и продление сертификатов Traefik. |
true |
| LETSENCRYPT_EMAIL | Действующий адрес электронной почты для продления сертификатов и уведомлений безопасности Let's Encrypt. | demo@email.com |
| TRAEFIK_PROTOCOL | Значение https заставляет прокси требовать защищённые соединения. |
https |
Пример конфигурации:
DOMAIN=example.com
ROOT_URL=https://example.com
LETSENCRYPT_ENABLED=true
LETSENCRYPT_EMAIL=demo@email.com
TRAEFIK_PROTOCOL=https
После задания этих переменных можно переходить к необязательным настройкам.
С Nginx Чат Ракета работает локально на порту 3000, а Nginx выступает публичным обратным прокси: обрабатывает HTTPS и перенаправляет трафик на локальный сервис. По сравнению с Traefik здесь больше ручных шагов.
Примечание. Перед продолжением убедитесь, что запись A домена (или необязательная CNAME) указывает на публичный IP сервера, где запущен Docker.
.env задайте значения по умолчанию, чтобы Чат Ракета работал локально и Nginx мог проксировать к нему запросы:DOMAIN=localhost
ROOT_URL=http://localhost
LETSENCRYPT_ENABLED=false
LETSENCRYPT_EMAIL=demo@email.com
TRAEFIK_PROTOCOL=http
.env.Чтобы получить бесплатный TLS-сертификат Let's Encrypt:
Для дистрибутивов на базе Debian (Debian, Ubuntu):
sudo apt update
sudo apt install certbot
Для дистрибутивов на базе RPM (Red Hat, CentOS):
sudo yum install yum-utils
sudo yum install certbot
Команды установки могут отличаться в зависимости от дистрибутива и версии Linux.
sudo certbot certonly --standalone --email <emailaddress@email.com> -d <domain.com> -d <subdomain.com>
При успехе файлы сертификата окажутся в /etc/letsencrypt/live/<your.domain.com>/. Эти пути вы укажете в конфигурации Nginx ниже.
<emailaddress@email.com> и <domain.com> свой адрес электронной почты и домен Чат Ракета.<subdomain.com> укажите поддомен Grafana (например, grafana.your-domain.com); иначе уберите этот параметр.Теперь свяжите домен с сервисом Чат Ракета на локальном порту 3000. Nginx станет защищённой публичной точкой входа: будет принимать HTTPS на порту 443 и направлять запросы к локальным сервисам Чат Ракета и Grafana.
sudo apt-get install nginx
cd /etc/nginx/sites-available
sudo mv default default.reference
sudo nano /etc/nginx/sites-available/default
Если Grafana настроена по пути URL (например, https://your-domain.com/grafana), вставьте следующее:
server {
listen 443 ssl;
server_name <ABC.DOMAIN.COM>;
ssl_certificate /etc/letsencrypt/live/<ABC.DOMAIN.COM>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<ABC.DOMAIN.COM>/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://localhost: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 http;
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
# Grafana Reverse Proxy
location /grafana {
proxy_pass http://localhost:5050/grafana;
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; # Crucial for secure path access
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
}
server {
listen 80;
server_name <ABC.DOMAIN.COM>;
return 301 https://$host$request_uri;
}
Если Grafana настроена по поддомену (например, https://grafana.your-domain.com), вставьте следующее:
server {
listen 443 ssl;
server_name <ABC.DOMAIN.COM>;
ssl_certificate /etc/letsencrypt/live/<ABC.DOMAIN.COM>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<ABC.DOMAIN.COM>/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://localhost: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 http;
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
}
server {
listen 443 ssl;
server_name <GRAFANA.ABC.DOMAIN.COM>;
ssl_certificate /etc/letsencrypt/live/<ABC.DOMAIN.COM>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<ABC.DOMAIN.COM>/privkey.pem;
location / {
proxy_pass http://localhost:5050/; # Note the change here (no /grafana suffix)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $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;
}
}
server {
listen 80;
server_name <ABC.DOMAIN.COM>;
return 301 https://$host$request_uri;
}
Замените <ABC.DOMAIN.COM> на имя своего домена.
Замените <GRAFANA.ABC.DOMAIN.COM> на имя поддомена Grafana.
Проверьте синтаксис конфигурации, прежде чем продолжать:
sudo nginx -t
Сообщения «syntax is ok» и «test is successful» подтверждают, что конфигурация корректна. Пока не перезапускайте Nginx — это нужно будет сделать после запуска развёртывания Чат Ракета на шаге 4.
Предупреждение. Если действуют ограничения security group, разрешите TCP/22 с вашего текущего IP для SSH и TCP/443 с того IP, с которого планируете доступ.
Ниже дополнительные параметры, которые не обязательны для запуска, но могут понадобиться в зависимости от инфраструктуры. Их можно добавить в .env до запуска Чат Ракета.
MONGO_URL в .env так:MONGO_URL=mongodb://<user>:<pass>@host1:27017,host2:27017,host3:27017/<databaseName>?replicaSet=<replicaSet>&ssl=true&authSource=admin
Предупреждение. При использовании внешней MongoDB не включайте
compose.database.ymlв команду Docker Compose — этот файл запускает встроенный контейнер MongoDB. Добавьте в командуcompose.nats.yml, чтобы отдельно запустить NATS.Полные шаги настройки, включая требования к набору реплик, примеры строк подключения и корректировку команды Compose, см. в Configure External MongoDB for Rocket.Chat.
Перед развёртыванием Чат Ракета через Docker необходимо выполнить вход в реестр образов. Без авторизации Docker не сможет скачать образ приложения, и контейнеры не запустятся.
Команду для входа в реестр и логин / пароль можно получить на клиентском портале в разделе Документация после создания клиентского аккаунта.
Когда файл .env сохранён, запустите развёртывание по инструкциям для того обратного прокси, который вы настроили на шаге 3.
docker compose \
-f compose.monitoring.yml \
-f compose.traefik.yml \
-f compose.database.yml \
-f compose.yml \
-f compose.nats.yml \
-f docker.yml \
up -d
Кратко, что делает каждый файл в команде:
compose.yml — запускает приложение Чат Ракета.compose.database.yml — запускает и сопровождает встроенную базу MongoDB, на которую Чат Ракета опирается по умолчанию.compose.monitoring.yml — включает мониторинг: Prometheus собирает метрики, Loki — журналы, Grafana визуализирует их на дашбордах.compose.traefik.yml — управляет обратным прокси Traefik: маршрутизация и автоматический выпуск HTTPS-сертификатов Let's Encrypt.compose.nats.yml — запускает NATS, внутренний брокер сообщений для связи сервисов Чат Ракета.docker.yml — конфигурация, специфичная для запуска развёртывания через Docker Compose.compose.traefik.yml):docker compose \
-f compose.monitoring.yml \
-f compose.database.yml \
-f compose.yml \
-f compose.nats.yml \
-f docker.yml \
up -d
Кратко, что делает каждый файл в команде:
compose.yml — запускает приложение Чат Ракета.compose.database.yml — запускает и сопровождает встроенную базу MongoDB, на которую Чат Ракета опирается по умолчанию.compose.monitoring.yml — включает мониторинг: Prometheus собирает метрики, Loki — журналы, Grafana визуализирует их на дашбордах.compose.nats.yml — запускает NATS, внутренний брокер сообщений для связи сервисов Чат Ракета.docker.yml — конфигурация, специфичная для запуска развёртывания через Docker Compose.sudo systemctl restart nginx
Развёртывание можно упростить, подключая только нужные сервисы. Например, если мониторинг или Traefik не настраивали, эти .yml можно не указывать:
docker compose -f compose.database.yml -f compose.yml -f compose.nats.yml up -d
Чтобы проверить, что все сервисы успешно запустились, выведите список контейнеров:
docker ps -a
У всех сервисов должен быть статус Up. У части вспомогательных сервисов MongoDB статус может быть Exited (0).
Если при развёртывании возникли проблемы, см. ресурсы по журналам и устранению неисправностей:
http://localhost:3000.Дашборд Grafana доступен по URL, соответствующему выбранному способу доступа:
https://your-domain.com/grafanahttps://grafana.your-domain.comВойдите с учётными данными:
adminGRAFANA_ADMIN_PASSWORD в файле .env.Предупреждение. Пароль
GRAFANA_ADMIN_PASSWORDиз.envприменяется только один раз — при первой настройке контейнера. Чтобы сменить пароль позже, меняйте его непосредственно в настройках пользователя Grafana.
Подробнее о мониторинге метрик и журналов рабочего пространства — в руководстве Monitor Workspace Logs and Metrics.
По умолчанию Чат Ракета хранит загрузки файлов в GridFS. Дополнительная настройка не нужна, но для продакшена это не лучший вариант: растёт нагрузка на базу и снижается масштабируемость. Настоятельно рекомендуется выделенное объектное хранилище: Amazon S3, Google Cloud Storage (GCS) или MinIO. Подробные инструкции — в руководстве File Uploads.
Предупреждение. Обновление образа Чат Ракета не затрагивает данные: они хранятся отдельно в сервисе MongoDB.
Чтобы обновить версию Чат Ракета:
RELEASE в файле .env, указав тег релиза новой версии:RELEASE=<desired version>
Например, RELEASE=8.8.1-rce.
.env) выполните тот же набор файлов compose, с которым изначально поднимали стек, чтобы скачать новый образ и перезапустить контейнер Чат Ракета. Например:docker compose -f compose.database.yml -f compose.yml up -d
Включите каждый файл compose из исходной команды развёртывания (например, мониторинг или Traefik), иначе эти сервисы выпадут из определения проекта.
Примечание. Подробнее об образах Docker Чат Ракета — в разделе Образы Docker Чат Ракета.
docker ps
Должен быть виден новый контейнер Чат Ракета с обновлённым тегом версии.
Совет. Если вы используете встроенные образы Bitnami MongoDB, см. сообщение на форуме о переходе на официальный образ MongoDB 8.0, необходимый для Чат Ракета 8.0.
Повышение или понижение версии MongoDB может понадобиться при переходе между мажорными релизами Чат Ракета. Данные рабочего пространства хранятся в отдельном сервисе MongoDB. Обновление контейнера Чат Ракета не меняет сохранённые данные, пока том MongoDB остаётся целым.
В этом разделе описано, как безопасно сменить версию MongoDB для Чат Ракета в Docker — и при обновлении, и при откате.
Предупреждение. Перед продолжением ознакомьтесь с общими рекомендациями по обновлению MongoDB.
Если вы переходите на более высокую версию MongoDB:
<version>-ubi8.MONGODB_VERSION в .env:MONGODB_VERSION=<version>
Например, MONGODB_VERSION=8.0.
docker compose -f compose.database.yml up -d
Примечание. Подробнее об образах Docker Чат Ракета — в разделе Образы Docker Чат Ракета.
docker ps
Должен быть виден новый контейнер MongoDB с обновлённым тегом версии.
MongoDB не поддерживает прямой откат двоичных файлов, если файлы данных созданы более новой версией. Чтобы безопасно понизить версию, сначала уменьшите Feature Compatibility Version (FCV), и только потом меняйте образ MongoDB. Если не задать FCV до смены двоичных файлов, MongoDB завершится с ошибкой, и контейнер будет постоянно перезапускаться.
Примечание. Перед продолжением убедитесь, что образ целевой версии есть на Docker Hub в репозитории mongodb-community-server. Ищите образ с тегом
<version>-ubi8.
Чтобы понизить версию MongoDB в Чат Ракета:
docker exec <mongo-container_name> sh -c 'mongodump --archive' > db.dump
Замените <mongo-container_name> на текущее имя контейнера MongoDB.
docker exec -it <mongo-container_name> bash
mongosh
use rocketchat
db.adminCommand({ getParameter: 1, featureCompatibilityVersion: 1 })
Возвращённая версия должна совпадать с текущим двоичным файлом MongoDB (например, 8.2).
db.adminCommand({
setFeatureCompatibilityVersion: "<version>",
confirm: true
})
db.adminCommand({ getParameter: 1, featureCompatibilityVersion: 1 })
docker compose -f compose.database.yml down
MONGODB_VERSION в .env:MONGODB_VERSION=<version>
Например, MONGODB_VERSION=8.0.
docker compose -f compose.database.yml up -d
docker ps
Теперь работает новый контейнер MongoDB с обновлённым тегом версии.
Версию MongoDB в контейнере можно дополнительно проверить командой:
docker exec -it <mongo-container_name> mongosh --eval "db.version()"
Переменные окружения — дополнительные параметры, влияющие на развёртывание и конфигурацию рабочего пространства. Подробнее — в официальной документации.
Чтобы задать переменную окружения в Docker:
compose.yml:nano compose.yml
environment сервиса rocketchat. Например, чтобы переопределить настройку SMTP Host, добавьте:services:
rocketchat:
...
environment:
...
OVERWRITE_SETTING_SMTP_Host: "my.smtp.server.com"
Примечание. Подсказка. Это та же секция, где задаются
ROOT_URL,MONGO_URLи другие переменные.
docker compose stop rocketchat
docker compose rm rocketchat
docker compose up -d rocketchat
Полный список доступных переменных окружения — в статье Deployment Environment Variables.
Чат Ракета хранит все данные рабочего пространства в MongoDB. Следуйте командам ниже, чтобы сделать резервную копию и восстановить базу при работе в Docker.
docker ps -a
Предупреждение. Запомните имя контейнера mongo (например,
rocketchat-mongodb-1).
db.dump:docker exec <container_name> sh -c 'mongodump --archive' > db.dump
При успехе в текущем каталоге появится файл db.dump.
Чтобы восстановить данные, используйте mongorestore внутри контейнера MongoDB, передавая данные из локального файла db.dump.
docker exec -i <container_name> sh -c 'mongorestore --archive' < db.dump
При миграции данных или автономном восстановлении локальный файл db.dump можно использовать напрямую со строкой подключения внешней MongoDB.
mongorestore --uri mongodb+srv://<user>:<password>@cluster0.w2btl.mongodb.net --archive=db.dump
Эффективное журналирование помогает следить за состоянием развёртывания Чат Ракета. В этом разделе — журналы Чат Ракета, MongoDB и обратных прокси Traefik или Nginx.
Чтобы проверить статус и журналы контейнеров:
docker ps # Shows currently running containers with details like ID, status, and ports
docker ps -a # Lists all containers, including stopped ones
docker compose ps # Lists services managed by Docker Compose
Эти команды помогают найти контейнеры Чат Ракета, MongoDB, Traefik и связанных сервисов.
docker compose logs -f <service_name> # Shows realtime logs for a service managed by Docker Compose
docker logs <container_name> # Displays logs for the specific container
docker logs -f <container_name> # Shows real-time logs for a container
docker logs --tail 10 <container_name> # Displays the last 10 lines of logs
Примечание.
- Подставьте вместо
<container_name>и<service_name>соответствующие значения.- Чат Ракета пишет журналы в stdout, отдельного лог-файла внутри контейнера нет. Система журналирования Docker перехватывает эти записи stdout, и они доступны через команду
docker logs.
docker exec -it <mongodb_container_name> mongosh --eval "db.runCommand({ serverStatus: 1 })"
Команда возвращает подробные сведения о состоянии сервера MongoDB.
Примечание. Замените
<mongodb_container_name>на имя контейнера MongoDB.
/var/log/nginx/. Чтобы их посмотреть:sudo tail -f /var/log/nginx/access.log # Access logs
sudo tail -f /var/log/nginx/error.log # Error logs