Автор: @TRAMP
Статья написана для forum.LIMB,cc
За сервер спасибо @Qilin
Вступление
Общаться с командой с tox не совсем удобно, поскольку если выйти с клиента, новые сообщения можно пропустить. Также неудобно заходить с другого устройства, надо тащить за собой кучу файлов. Нельзя восстановить аккаунт в случае утери. Не понятно как поделиться контактом и т.д. Токс удобен если общаться 1 на 1, но не с командой. Касаемо матрикса неплохое решение, но тоже нужно поднимать на своем сервере. Если заниматься чем-то серьезным использовать matrix.org не вариант.
Мне нравится использовать корпоративные мессенджеры. По типу mattermost или RocketChat. Но у новичков могут возникнуть проблемы с настройкой. Поэтому я постараюсь расписать как можно настроить, чтобы нужный функционал работал корректно. Рокет это отличный вариант. Есть удобное API, можно создавать пользователей, выдавать права, добавлять в беседы и т.д. Если нужно, то можно все дропнуть быстро, т.к поднимать будем на докере.
Выбор сервера
Выбираем любого российского хостера, не ресейлера. Абузоустойчивые - это скам и переплата. Не добавляйте сомнительных людей в чат, иначе вам накинут абуз и хостер заблокирует сервер.
от 4 GB RAM, я предпочитаю debian 12.
Поднимаем RocketChat
Docker version 28.2.2, build e6534b4
Docker Compose version v2.36.2
Содержимое docker-compose.yml
Проверяем что все контейнеры запустились.
Переходим в браузере по http://ip_vps:3000 и настраиваем. Придумываем юзернейм админу, пароль, вводим рабочу почту куда пин-код придет (на нашем форуме есть список сервисов для создания почт относительно анонимно)
Создаем еще один аккаунт. Проверяем доходят ли сообщения в реальном времени без перезагрузки странички (проще говоря проверяем работает ли websocket). С аккаунта админа пробуем войти в админку, создавать чаты и т.д. Если у вас на этом этапе возникли ошибки, то смотрим логи, команду ниже я предоставил. Также смотрим логи в браузере (console)
На этом этапе мы настроили 90%, Осталось совсем немного.
Мы не будем настраивать доменное имя, это лишний геморой. А значит будем выпускать самоподписанный сертикафат, т.к Let’s Encrypt не поддерживает выдачу на ip адреса.
Решение некоторых возникших проблем
Если не приходит письмо для подтверждения верификации, то отправьте повторно и проверьте спам. Либо поменяйте провайдера. Если совсем не хотите вводить мыло настоящее, то ищите способы подтвердить мыло варварским путем, через бд. Попросите chatgpt.com он должен помочь.
Обновить докер контейнеры после внесения изменений.
Любые ваши вопросы должен помочь решить GPT. Просто предоставьте ему логи.
Проверим репликацию
Если ошибка из разряда
MongoServerError[InvalidReplicaSetConfig]: Our replica set config is invalid or we are not a member of it
Обращаем внимание на поле host
Это внутреннее имя контейнера, присвоенное Docker’ом автоматически. Но Rocket.Chat ищет MongoDB по имени mongo, как указано в MONGO_URL=mongodb://mongo:27017/rocketchat
фиксим
Ты должен увидеть
Часть функционала может быть не доступно без TLS. Исправим это
Настройка TLS
генерируем сертификат
устанавливаем nginx
удаляем дефолт конфиг
создаем конфиг
создаем симлинк
проверяем корректность конфига
В конфиге RocketChat меняем на https://
Порт 3000 у Rocket.Chat остается таким же — nginx проксирует запросы с 443 на 3000.
И пускай будет будет жаловаться или показывать перечеркнутый https:// зато нам доступна теперь админа и траффик зашифрован.
Прячем RocketChat от ресерчеров
Раз уж мы подключили nginx и проксируем на 443 порт, то нужно закрыть 3000 порт иначе нет смысла в basic auth.
Делаем регистрацию закрытой
/admin/settings/Accounts
Настраиваем права для юзера
/admin/permissions
Создаем пользователей вручную /admin/users
/admin/settings/Accounts запрещаем пользователям менять ник и логин.
Готово
Генерировать сложный логин и пароль можно тут: https://www.eset.com/ua-ru/home/generator-paroley/
На этом все. Если вы повторите за мной, то проблем с установкой не должно возникнуть.
Статья написана для forum.LIMB,cc
За сервер спасибо @Qilin
Вступление
Общаться с командой с tox не совсем удобно, поскольку если выйти с клиента, новые сообщения можно пропустить. Также неудобно заходить с другого устройства, надо тащить за собой кучу файлов. Нельзя восстановить аккаунт в случае утери. Не понятно как поделиться контактом и т.д. Токс удобен если общаться 1 на 1, но не с командой. Касаемо матрикса неплохое решение, но тоже нужно поднимать на своем сервере. Если заниматься чем-то серьезным использовать matrix.org не вариант.
Мне нравится использовать корпоративные мессенджеры. По типу mattermost или RocketChat. Но у новичков могут возникнуть проблемы с настройкой. Поэтому я постараюсь расписать как можно настроить, чтобы нужный функционал работал корректно. Рокет это отличный вариант. Есть удобное API, можно создавать пользователей, выдавать права, добавлять в беседы и т.д. Если нужно, то можно все дропнуть быстро, т.к поднимать будем на докере.
Выбор сервера
Выбираем любого российского хостера, не ресейлера. Абузоустойчивые - это скам и переплата. Не добавляйте сомнительных людей в чат, иначе вам накинут абуз и хостер заблокирует сервер.
от 4 GB RAM, я предпочитаю debian 12.
Поднимаем RocketChat
apt updateapt 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-plugindocker --versionDocker version 28.2.2, build e6534b4
docker compose versionDocker Compose version v2.36.2
mkdir ~/rocketchat && cd ~/rocketchatnano 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 mongoshrs.initiate()docker compose up -dПроверяем что все контейнеры запустились.
docker compose psПереходим в браузере по http://ip_vps:3000 и настраиваем. Придумываем юзернейм админу, пароль, вводим рабочу почту куда пин-код придет (на нашем форуме есть список сервисов для создания почт относительно анонимно)
Создаем еще один аккаунт. Проверяем доходят ли сообщения в реальном времени без перезагрузки странички (проще говоря проверяем работает ли websocket). С аккаунта админа пробуем войти в админку, создавать чаты и т.д. Если у вас на этом этапе возникли ошибки, то смотрим логи, команду ниже я предоставил. Также смотрим логи в браузере (console)
docker compose logs --tail=20 rocketchatlogs --tail=20 rocketchatНа этом этапе мы настроили 90%, Осталось совсем немного.
Мы не будем настраивать доменное имя, это лишний геморой. А значит будем выпускать самоподписанный сертикафат, т.к Let’s Encrypt не поддерживает выдачу на ip адреса.
Решение некоторых возникших проблем
Если не приходит письмо для подтверждения верификации, то отправьте повторно и проверьте спам. Либо поменяйте провайдера. Если совсем не хотите вводить мыло настоящее, то ищите способы подтвердить мыло варварским путем, через бд. Попросите chatgpt.com он должен помочь.
Обновить докер контейнеры после внесения изменений.
Любые ваши вопросы должен помочь решить GPT. Просто предоставьте ему логи.
Проверим репликацию
docker run -it --rm --network container:rocketchat-mongo-1 mongo:6.0 mongoshrs.status()Если ошибка из разряда
MongoServerError[InvalidReplicaSetConfig]: Our replica set config is invalid or we are not a member of it
docker exec -it rocketchat-mongo-1 mongoshrs.conf()Обращаем внимание на поле host
host: '18f7769743b9:17027',Это внутреннее имя контейнера, присвоенное Docker’ом автоматически. Но Rocket.Chat ищет MongoDB по имени mongo, как указано в MONGO_URL=mongodb://mongo:27017/rocketchat
фиксим
docker exec -it rocketchat-mongo-1 mongoshcfg = 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 -tsystemctl reload nginxВ конфиге RocketChat меняем на https://
- ROOT_URL=https://ip- PORT=3000Порт 3000 у Rocket.Chat остается таким же — nginx проксирует запросы с 443 на 3000.
И пускай будет будет жаловаться или показывать перечеркнутый https:// зато нам доступна теперь админа и траффик зашифрован.
Прячем RocketChat от ресерчеров
apt install apache2-utilshtpasswd -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
LIMB