Сценарий docker-compose для развертывания своего сервера Rocket.Chat

Обновлено и опубликовано Опубликовано:

В данной инструкции мы рассмотрим пример файла docker-compose для быстрой установки и настройки мессенджера Rocket.Chat. Все команды будут выполняться на Linux. Для работы у вас должны быть установлены Docker и docker-compose.

Файл docker-compose

Создаем каталог для хранения файлов приложения и сценария. Сразу переходим в него:

mkdir /opt/rocket.chat && cd /opt/rocket.chat

Создаем docker compose файл:

vi docker-compose.yml

  1. services:
  2.  
  3.   rocketchat:
  4.     image: rocket.chat:${RC_VER}
  5.     container_name: rocketchat
  6.     hostname: rocketchat
  7.     restart: unless-stopped
  8.     expose:
  9.       - 3000
  10.     depends_on:
  11.       mongodb:
  12.         condition: service_healthy
  13.     environment:
  14.       TZ: ${TZ}
  15.       HTTP_FORWARDED_COUNT: 1
  16.       ROOT_URL: https://${RC_URL}
  17.       MONGO_URL: mongodb://${MG_USER}:${MG_PASS}@${MG_HOST}:${MG_PORT}/${MG_DBNAME}?authSource=admin&replicaSet=rs0
  18.       MONGO_OPLOG_URL: mongodb://${MG_USER}:${MG_PASS}@${MG_HOST}:${MG_PORT}/local?authSource=admin&replicaSet=rs0
  19.     healthcheck:
  20.       test: ["CMD-SHELL", "node -e \"require('http').get('http://localhost:3000/api/info', (res) => { if (res.statusCode === 200) process.exit(0); else process.exit(1); })\""]
  21.       interval: 30s
  22.       timeout: 10s
  23.       retries: 3
  24.       start_period: 60s
  25.  
  26.   mongodb:
  27.     image: mongo:${MG_VER}
  28.     container_name: mongodb
  29.     hostname: mongodb
  30.     restart: unless-stopped
  31.     expose:
  32.       - ${MG_PORT}
  33.     environment:
  34.       TZ: ${TZ}
  35.       MONGO_INITDB_ROOT_USERNAME: ${MG_USER}
  36.       MONGO_INITDB_ROOT_PASSWORD: ${MG_PASS}
  37.       MONGO_INITDB_DATABASE: ${MG_DBNAME}
  38.     volumes:
  39.       - ./mongodb/data:/data/db
  40.       - ./mongodb/mongodb.key:/data/configdb/mongodb.key:ro
  41.     deploy:
  42.       resources:
  43.         limits:
  44.           memory: 1G
  45.     command: >
  46.       mongod --replSet rs0 
  47.       --bind_ip_all 
  48.       --port 27017 
  49.       --keyFile /data/configdb/mongodb.key
  50.       --wiredTigerCacheSizeGB 0.5
  51.     healthcheck:
  52.       test: ["CMD-SHELL", "mongosh --port ${MG_PORT} --quiet --eval \"db.runCommand('ping').ok\""]
  53.       interval: 10s
  54.       timeout: 5s
  55.       retries: 5
  56.  
  57.   caddy:
  58.     image: caddy:${CD_VER}
  59.     hostname: caddy
  60.     container_name: caddy
  61.     restart: unless-stopped
  62.     environment:
  63.       TZ: ${TZ}
  64.       RC_URL: ${RC_URL}
  65.     ports:
  66.       - 80:80
  67.       - 443:443
  68.     volumes:
  69.       - ./caddy/Caddyfile:/etc/caddy/Caddyfile
  70.       - ./caddy/ssl:/etc/caddy/ssl
  71.       - ./caddy/data:/data
  72.     healthcheck:
  73.       test: ["CMD-SHELL", "curl -fI http://127.0.0.1:2019/metrics"]
  74.       interval: 30s
  75.       timeout: 5s
  76.       retries: 3
  77.       start_period: 10s

Обратите внимание, что в данном docker-compose файле добавлен http прокси на базе Caddy. Он будет слушать на веб-портах 80 и 443. Если в вашей системе уже есть другой прокси, который занимает эти порты, caddy можно убрать из сценария.

Создаем файл конфигурации:

vi .env

RC_VER=8.1
RC_URL=chat.dmosk.ru

TZ=Europe/Moscow

MG_VER=8.0
MG_USER=rocketchat
MG_PASS=12345678
MG_HOST=mongodb
MG_PORT=27017
MG_DBNAME=rocketchat

CD_VER=2.11-alpine

* указываем свои значения:

  • RC_VER — версия Rocket.Chat, которая будет развернута.
  • RC_URL — доменное имя, на котором будет работать чат.
  • TZ — временная зона.
  • MG_VER — версия сервера баз данных MongoDB.
  • MG_USER — имя пользователя для подключения к базе MongoDB. Будет создан при первом запуске.
  • MG_PASS — пароль пользователя для подключения к базе MongoDB.
  • MG_HOST — имя сервиса для MongoDB.
  • MG_PORT — порт, на котором слушает MongoDB.
  • MG_DBNAME — имя базы данных в MongoDB. Будет создана при первом запуске.
  • CD_VER — версия Caddy.

Подготовка среды и запуск

Создадим конфигурационный файл для прокси Caddy:

mkdir caddy

vi caddy/Caddyfile

{$RC_URL} {
    encode zstd gzip

    request_body {
        max_size 100MB
    }

    reverse_proxy rocketchat:3000 {
        header_up X-Forwarded-Proto {scheme}
    }
}

* в данном случае мы просто переводим все запросы на порт 3000 контейнера rocketchat.

Теперь создадим каталог для данных mongodb:

mkdir -p mongodb/data

Сгенерируем секретный ключ для mongodb:

openssl rand -base64 756 > mongodb/mongodb.key

Зададим для него приватные права (доступ только владельцу):

chmod 400 ./mongodb/mongodb.key

И укажем владельца для папки данных mongodb:

chown -R 999:999 ./mongodb

* внутри контейнера сервис работает от пользователя и группы с идентификатором 999.

Запускаем базу данных:

docker-compose up -d mongodb

Читаем значения переменных для создания системных переменных:

source .env

Выполняем инициализацию Replica Set (набора реплик) внутри контейнера mongodb:

docker-compose exec mongodb mongosh -u "${MG_USER}" -p "${MG_PASS}" --eval "rs.initiate()"

Запускаем остальные контейнеры:

docker-compose up -d

Готово. Проверить состояние контейнеров можно командой:

docker-compose ps

Ждем, когда все контейнеры будут иметь статус healthy (на это, обычно, нужно около 40 секунд).

Переходим по ссылке, указанной в конфигурационном env файле, в нашем примере https://chat.dmosk.ru — должна открыться страница регистрации сервиса и создания первого пользователя.

# DevOps # Linux # Серверы
Дмитрий Моск — частный мастер
Был ли вам полезен этот скрипт?

Да            Нет

Дмитрий Моск
— IT-специалист.
Настройка серверов, услуги DevOps.

Заказать настройку контейнеризации

Нужна бесплатная консультация?

Скрипты

Сценарий в docker-compose для запуска Rocket.Chat

Запуск Nextcloud с помощью docker-compose со всем необходимым

Пример скрипта на Python для копирования пакетов NPM с одного репозитория Nexus в другой

Развертывание caddy прокси в docker с помощью docker-compose

Файл docker-compose для развертывания Nginx Proxy Manager

Пример файла docker-compose для запуска контейнеров с сервером Grafana Loki

Пример файла docker-compose.yml для запуска и настройки Portainer

Другие скрипты

Все статьи

Нужен скрипт? Опишите его назначение:





Реклама