LIMB
Вход Регистрация

тема

Сэтапим RocketChat для вашей темы!

TRAMP · · 8 ответов · 176 просмотров

Автор: @TRAMP
Статья написана для forum.LIMB,cc

За сервер спасибо @Qilin

Вступление

Общаться с командой с tox не совсем удобно, поскольку если выйти с клиента, новые сообщения можно пропустить. Также неудобно заходить с другого устройства, надо тащить за собой кучу файлов. Нельзя восстановить аккаунт в случае утери. Не понятно как поделиться контактом и т.д. Токс удобен если общаться 1 на 1, но не с командой. Касаемо матрикса неплохое решение, но тоже нужно поднимать на своем сервере. Если заниматься чем-то серьезным использовать matrix.org не вариант.

Мне нравится использовать корпоративные мессенджеры. По типу mattermost или RocketChat. Но у новичков могут возникнуть проблемы с настройкой. Поэтому я постараюсь расписать как можно настроить, чтобы нужный функционал работал корректно. Рокет это отличный вариант. Есть удобное API, можно создавать пользователей, выдавать права, добавлять в беседы и т.д. Если нужно, то можно все дропнуть быстро, т.к поднимать будем на докере.

Выбор сервера
Выбираем любого российского хостера, не ресейлера. Абузоустойчивые - это скам и переплата. Не добавляйте сомнительных людей в чат, иначе вам накинут абуз и хостер заблокирует сервер.

от 4 GB RAM, я предпочитаю debian 12.

Поднимаем RocketChat
apt update
apt list --upgradable

Code:
apt install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
Code:
echo   "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
Code:
 mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
File '/etc/apt/keyrings/docker.gpg' exists. Overwrite? (y/N) y
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/debian bookworm stable" \
> /etc/apt/sources.list.d/docker.list
apt update

apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

docker --version

Docker version 28.2.2, build e6534b4

docker compose version

Docker Compose version v2.36.2

mkdir ~/rocketchat && cd ~/rocketchat
nano docker-compose.yml

Содержимое docker-compose.yml
Code:
services:
  rocketchat:
    image: registry.rocket.chat/rocketchat/rocket.chat:latest
    restart: unless-stopped
    volumes:
      - rocketchat_data:/app/uploads
    environment:
      - PORT=3000
      - ROOT_URL=http://ip_vps:3000
      - MONGO_URL=mongodb://mongo:27017/rocketchat
      - MONGO_OPLOG_URL=mongodb://mongo:27017/local
    depends_on:
      - mongo
    ports:
      - 3000:3000


  mongo:
    image: mongo:6.0
    restart: unless-stopped
    command: ["mongod", "--replSet", "rs0", "--bind_ip_all"]
    volumes:
      - mongo_data:/data/db
      - mongo_config:/data/configdb


volumes:
  rocketchat_data:
  mongo_data:
  mongo_config:

docker run -it --rm --network container:rocketchat-mongo-1 mongo:6.0 mongosh

rs.initiate()

docker compose up -d

Проверяем что все контейнеры запустились.

docker compose ps

Переходим в браузере по http://ip_vps:3000 и настраиваем. Придумываем юзернейм админу, пароль, вводим рабочу почту куда пин-код придет (на нашем форуме есть список сервисов для создания почт относительно анонимно)

Создаем еще один аккаунт. Проверяем доходят ли сообщения в реальном времени без перезагрузки странички (проще говоря проверяем работает ли websocket). С аккаунта админа пробуем войти в админку, создавать чаты и т.д. Если у вас на этом этапе возникли ошибки, то смотрим логи, команду ниже я предоставил. Также смотрим логи в браузере (console)

docker compose logs --tail=20 rocketchat
logs --tail=20 rocketchat


На этом этапе мы настроили 90%, Осталось совсем немного.

Мы не будем настраивать доменное имя, это лишний геморой. А значит будем выпускать самоподписанный сертикафат, т.к Let’s Encrypt не поддерживает выдачу на ip адреса.

Решение некоторых возникших проблем

Если не приходит письмо для подтверждения верификации, то отправьте повторно и проверьте спам. Либо поменяйте провайдера. Если совсем не хотите вводить мыло настоящее, то ищите способы подтвердить мыло варварским путем, через бд. Попросите chatgpt.com он должен помочь.

Обновить докер контейнеры после внесения изменений.

Любые ваши вопросы должен помочь решить GPT. Просто предоставьте ему логи.

Проверим репликацию

docker run -it --rm --network container:rocketchat-mongo-1 mongo:6.0 mongosh
rs.status()

Если ошибка из разряда

MongoServerError[InvalidReplicaSetConfig]: Our replica set config is invalid or we are not a member of it

docker exec -it rocketchat-mongo-1 mongosh

rs.conf()

Обращаем внимание на поле host

host: '18f7769743b9:17027',

Это внутреннее имя контейнера, присвоенное Docker’ом автоматически. Но Rocket.Chat ищет MongoDB по имени mongo, как указано в MONGO_URL=mongodb://mongo:27017/rocketchat

фиксим

docker exec -it rocketchat-mongo-1 mongosh

cfg = rs.conf()
cfg.members[0].host = "mongo:27017"
rs.reconfig(cfg, { force: true })

rs.status()

Ты должен увидеть

"members": [
{
"name": "mongo:27017",
"stateStr": "PRIMARY",
...
}
]

Не удалось прогрузить медиа


Часть функционала может быть не доступно без TLS. Исправим это

Настройка TLS
генерируем сертификат

openssl req -x509 -newkey rsa:2048 -nodes -keyout rocketchat.key -out rocketchat.crt -days 365 -subj "/CN=123.123.123.123" -addext "subjectAltName=IP:123.123.123.123"

устанавливаем nginx

apt install nginx

удаляем дефолт конфиг

rm /etc/nginx/sites-available/*
rm /etc/nginx/sites-enable/*

создаем конфиг

nano /etc/nginx/sites-available/rocketchat

Code:
server {
    listen 443 ssl;
    server_name ip_vps


    ssl_certificate /root/rocketchat/rocketchat.crt;
    ssl_certificate_key /root/rocketchat/rocketchat.key;


    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;


    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;  # для WebSocket
        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 ip_vps;
    return 301 https://$host$request_uri;
}

создаем симлинк

ln -s /etc/nginx/sites-available/rocketchat /etc/nginx/sites-enabled/

проверяем корректность конфига

nginx -t

systemctl reload nginx

В конфиге RocketChat меняем на https://

- ROOT_URL=https://ip
- PORT=3000

Порт 3000 у Rocket.Chat остается таким же — nginx проксирует запросы с 443 на 3000.

И пускай будет будет жаловаться или показывать перечеркнутый https:// зато нам доступна теперь админа и траффик зашифрован.

Прячем RocketChat от ресерчеров

apt install apache2-utils
htpasswd -c /etc/nginx/.htpasswd slojniyloginblablabla

Code:
server {
    listen 443 ssl;
    server_name ip;


    ssl_certificate /root/rocketchat/rocketchat.crt;
    ssl_certificate_key /root/rocketchat/rocketchat.key;


    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;


    location / {
        auth_basic "Restricted Access";
        auth_basic_user_file /etc/nginx/.htpasswd;


        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 $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 ip;
    return 301 https://$host$request_uri;
}

systemctl reload nginx

Раз уж мы подключили nginx и проксируем на 443 порт, то нужно закрыть 3000 порт иначе нет смысла в basic auth.

Code:
services:


  rocketchat:
    image: registry.rocket.chat/rocketchat/rocket.chat:latest
    restart: unless-stopped
    volumes:
      - rocketchat_data:/app/uploads
    environment:
      - PORT=3000
      - ROOT_URL=https://ip
      - MONGO_URL=mongodb://mongo:27017/rocketchat
      - MONGO_OPLOG_URL=mongodb://mongo:27017/local
    depends_on:
      - mongo
    ports:
      - "127.0.0.1:3000:3000"


  mongo:
    image: mongo:6.0
    restart: unless-stopped
    command: ["mongod", "--replSet", "rs0", "--bind_ip_all"]
    volumes:
      - mongo_data:/data/db
      - mongo_config:/data/configdb


volumes:
  rocketchat_data:
  mongo_data:
  mongo_config:

Делаем регистрацию закрытой

/admin/settings/Accounts
Не удалось прогрузить медиа

Настраиваем права для юзера


/admin/permissions

Не удалось прогрузить медиа


Создаем пользователей вручную /admin/users

Не удалось прогрузить медиа


/admin/settings/Accounts запрещаем пользователям менять ник и логин.

Готово

Не удалось прогрузить медиа


Генерировать сложный логин и пароль можно тут:  https://www.eset.com/ua-ru/home/generator-paroley/

На этом все. Если вы повторите за мной, то проблем с установкой не должно возникнуть.
👍15 🔥3 👏4
Всегда рады помочь (y)
👍1
Отключить сообщения rocket.cat которое сообщает о невалидном URL

Переходим /admin/settings/Message

Не удалось прогрузить медиа


Еще можно отключить бота, чтобы он не был online или вообще удалить ему профиль. Делаете это через бд

docker run -it --rm --network container:rocketchat-mongo-1 mongo:6.0 mongosh

Code:
db.users.updateMany(
  { type: "bot" },
  {
    $set: {
      active: false,
      status: "offline",
      statusDefault: "offline",
      roles: []
    }
  }
)
Code:
db.users.updateMany(
  { type: "bot" },
  { $set: { roles: [] } }
)

docker restart rocketchat-rocketchat-1

Если вы забыли пароль от своей учетной записи админской, но осталась сессия

создайте новую учетную запись добавьте роли лидера и админа. Если вы к существующему пользователю захотите добавить роль, то не получится, запросит подтверждения пароля. А при создании можно указать.
👍1
Как рокет поставить за тор, чтобы с клира не достучаться?
Ответiikuyjhtrgf

Как рокет поставить за тор, чтобы с клира не достучаться?

Rocket.Chat — локально только localhost:3000


Tor Hidden Service пробрасывает 80 порт onion -> localhost:3000


Внешний доступ по clearnet закрыт фаерволом или слушанием только localhost.
👍1
ОтветArimka

Rocket.Chat — локально только localhost:3000 Tor Hidden Service пробрасывает 80 порт onion -> localhost:3000 Внешний доступ по clearnet закрыт фаерволом или слушанием только localhost.

а как быть тогда с tls, ведь без него некоторые функции рокета не работают + тор на хттп же к тому же
Ответiikuyjhtrgf

а как быть тогда с tls, ведь без него некоторые функции рокета не работают + тор на хттп же к тому же

общаться можно без TLS. Если нужно выпусти серт бесплатный летсэнкрипт или самоподписанный
👍3
коллеги!
был опыт в данной истории, первый раз встал без проблем, второй раз я обматерил все что вкдючено в розетку
ниже демонстрирую реализацию в докер

 
version: '3'
services:
  rocketchat:
    image: rocket.chat:latest
    restart: unless-stopped
    environment:
      - PORT=3000
      - ROOT_URL=https://****.onion 
      - MONGO_URL=mongodb://mongo:27017/rocketchat
      - MONGO_OPLOG_URL=mongodb://mongo:27017/local
      - ACCOUNTS_PASSWD_LOGIN_DISABLED=true
    ports:
      - "127.0.0.1:3000:3000"
    depends_on:
      - mongo

  mongo:
    image: mongo:5.0
    restart: unless-stopped
    volumes:
      - ./data/db:/data/db
      - ./data/dump:/dump
    command: mongod --bind_ip_all --oplogSize 128

  # Опционально: для бэкапов
  mongo-init-replica:
    image: mongo:5.0
    command: |
      sh -c "
        echo 'Setup MongoDB replica set';
        mongo mongo/rocketchat --eval '
          rs.initiate({
            _id: \"rs0\",
            members: [{_id: 0, host: \"mongo:27017\"}]
          })'
      "
    depends_on:
      - mongo
далее поднимаем службу, глядим /ver/lib/tor ... /hostname -> там лежит доменное имя онино которе получилось после запуска службы тор
👍2
Последнее время видал, что команды заказывают себе приватные самописные решения для общения
👍1

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.