Содержание

Установка Rocket.Chat на Ubuntu с Docker

1. Подготовка структуры проекта

# Создайте директорию для Rocket.Chat
mkdir -p /opt/rocketchat
cd /opt/rocketchat
 
# Создайте структуру папок
mkdir -p data/db data/uploads

2. Создание keyfile для MongoDB

MongoDB в режиме реплики требует keyfile для аутентификации между узлами:

# Создайте keyfile для репликации MongoDB
openssl rand -base64 756 > keyfile
chmod 400 keyfile
chown 999:999 keyfile

3. Создание файла окружения (.env)

Создайте файл .env с переменными окружения:

# URL вашего сайта
ROOT_URL=https://your-domain.com
 
# Пользователи MongoDB
MONGO_USER=rocketchatuser
MONGO_PASSWORD=your_strong_password_here
MONGO_OPLOG_USER=oplogger
MONGO_OPLOG_PASSWORD=your_oplog_password_here
 
# Администратор Rocket.Chat (только для первого запуска)
ADMIN_USERNAME=admin
ADMIN_NAME=Administrator
ADMIN_EMAIL=admin@your-domain.com
ADMIN_PASS=your_admin_password_here

<WRAP center round important 60%> Важно: Замените все пароли на надежные! Используйте генератор паролей. </WRAP>

4. Создание docker-compose.yml

services:
  rocketchat_mongodb:
    image: mongo:6.0
    container_name: rocketchat_mongodb
    restart: unless-stopped
    volumes:
      - ./data/db:/data/db
      - ./keyfile:/data/keyfile:ro
    command: >
      mongod --auth --replSet rs0 --storageEngine wiredTiger 
      --keyFile /data/keyfile --bind_ip_all
    networks:
      - webproxy
    healthcheck:
      test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 40s
 
  rocketchat:
    image: rocketchat/rocket.chat:latest
    container_name: rocketchat
    restart: unless-stopped
    environment:
      - PORT=3000
      - ROOT_URL=${ROOT_URL}
      - MONGO_URL=mongodb://${MONGO_USER}:${MONGO_PASSWORD}@rocketchat_mongodb:27017/rocketchat?authSource=admin&replicaSet=rs0&retryWrites=true&w=majority
      - MONGO_OPLOG_URL=mongodb://${MONGO_OPLOG_USER}:${MONGO_OPLOG_PASSWORD}@rocketchat_mongodb:27017/local?authSource=admin&replicaSet=rs0
      # Оптимизации для решения проблем с Moleculer
      - MOLECULER_LOG_LEVEL=warn
      - TRANSPORTER=TCP
      - MOLECULER_TRANSPORTER_PORT=0
      # Отключение некоторых функций для стабильности
      - Accounts_AvatarResize=false
      - FileUpload_Storage_Type=GridFS
      # Увеличение таймаутов для медленных систем
      - SETTINGS_BLOCKED_TIMEOUT=30000
      # Отключение телеметрии для уменьшения нагрузки
      - DISABLE_DB_WATCHERS=false
      - EXIT_UNHANDLEDPROMISEREJECTION=true
      # Отключение регистрации workspace и облачных функций
      - OVERWRITE_SETTING_Show_Setup_Wizard=pending
      - OVERWRITE_SETTING_Organization_Type=other
      - OVERWRITE_SETTING_Cloud_Service_Agree_PrivacyTerms=false
      - OVERWRITE_SETTING_Statistics_reporting=false
      - OVERWRITE_SETTING_Cloud_Workspace_Registration_Client_Uri=
      - OVERWRITE_SETTING_Cloud_Url=
      - OVERWRITE_SETTING_Cloud_Workspace_Id=
      - REG_TOKEN=
      # Дополнительные настройки для полного отключения cloud connectivity
      - OVERWRITE_SETTING_Cloud_Workspace_Connected=false
      - OVERWRITE_SETTING_Register_Server=false
      # Создание администратора (только при первом запуске)
      - ADMIN_USERNAME=${ADMIN_USERNAME}
      - ADMIN_NAME=${ADMIN_NAME}
      - ADMIN_EMAIL=${ADMIN_EMAIL}
      - ADMIN_PASS=${ADMIN_PASS}
    volumes:
      - ./data/uploads:/app/uploads
    depends_on:
      rocketchat_mongodb:
        condition: service_healthy
    networks:
      - webproxy
    # Ограничения ресурсов для предотвращения конфликтов
    deploy:
      resources:
        limits:
          memory: 2G
        reservations:
          memory: 1G
 
networks:
  webproxy:
    external: true

5. Инициализация MongoDB

Запустите только MongoDB для настройки пользователей:

# Запустите только MongoDB
docker-compose up -d rocketchat_mongodb
 
# Дождитесь готовности базы (проверьте статус)
docker-compose ps

6. Создание пользователей MongoDB

# Подключитесь к MongoDB без аутентификации
docker exec -it rocketchat_mongodb mongosh

В консоли MongoDB выполните:

// Переключитесь в базу admin
use admin
 
// Создайте root пользователя
db.createUser({
  user: "admin",
  pwd: "your_admin_password_here",
  roles: [{ role: "root", db: "admin" }]
})
 
// Создайте пользователя для Rocket.Chat
db.createUser({
  user: "rocketchatuser",
  pwd: "your_strong_password_here",
  roles: [
    { role: "readWrite", db: "rocketchat" },
    { role: "dbAdmin", db: "rocketchat" }
  ]
})
 
// Создайте пользователя для oplog
db.createUser({
  user: "oplogger", 
  pwd: "your_oplog_password_here",
  roles: [{ role: "read", db: "local" }]
})
 
// Инициализируйте реплику
rs.initiate()
 
// Выйдите
exit

7. Запуск Rocket.Chat

# Перезапустите все сервисы
docker-compose down
docker-compose up -d
 
# Проверьте статус контейнеров
docker-compose ps
 
# Следите за логами запуска
docker-compose logs -f rocketchat

8. Первоначальная настройка

  1. Откройте браузер и перейдите по адресу вашего домена
  2. Должен появиться Setup Wizard (Мастер настройки)
  3. Создайте администратора:
    • Username: admin (или другой)
    • Email: admin@your-domain.com
    • Password: надежный пароль
    • Name: Administrator
  4. Следуйте инструкциям мастера настройки
  5. Выберите тип организации: «Other»
  6. Откажитесь от регистрации в облаке Rocket.Chat

9. Настройка после установки

9.1. Отключение переменных ADMIN

После успешного создания администратора:

  1. Закомментируйте ADMIN переменные в .env:
# Администратор Rocket.Chat (отключено после создания)
#ADMIN_USERNAME=admin
#ADMIN_NAME=Administrator
#ADMIN_EMAIL=admin@your-domain.com
#ADMIN_PASS=your_admin_password_here
  1. Перезапустите контейнеры:
docker-compose down
docker-compose up -d

9.2. Настройка прокси (Nginx/Traefik)

Rocket.Chat работает на порту 3000. Настройте ваш веб-сервер для проксирования:

Пример для Nginx:

server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$server_name$request_uri;
}
 
server {
    listen 443 ssl http2;
    server_name your-domain.com;
 
    # SSL настройки здесь
 
    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 $scheme;
        proxy_set_header X-Nginx-Proxy true;
        proxy_redirect off;
    }
}

10. Полезные команды

# Просмотр логов
docker-compose logs -f rocketchat
docker-compose logs -f rocketchat_mongodb
 
# Перезапуск сервисов
docker-compose restart rocketchat
docker-compose restart rocketchat_mongodb
 
# Остановка всех сервисов
docker-compose down
 
# Полная остановка с удалением контейнеров
docker-compose down --volumes
 
# Обновление Rocket.Chat
docker-compose pull
docker-compose up -d
 
# Подключение к MongoDB
docker exec -it rocketchat_mongodb mongosh admin -u admin -p

11. Резервное копирование

# Создание бэкапа MongoDB
docker exec rocketchat_mongodb mongodump --username admin --password your_password --authenticationDatabase admin --out /backup
 
# Копирование из контейнера
docker cp rocketchat_mongodb:/backup ./backup
 
# Бэкап файлов загрузок
tar -czf uploads_backup.tar.gz ./data/uploads/

12. Устранение неполадок

Проблемы с подключением к MongoDB

"User not found" при входе

Высокое потребление памяти

<note tip>Совет: Всегда делайте резервную копию перед обновлением или изменением конфигурации!</note>