Что потребуется
Для запуска SecureChat нужен минимальный набор ресурсов. Мессенджер намеренно спроектирован лёгким — он должен работать даже на самом бюджетном VPS.
- □ VPS с Ubuntu 22.04 — минимум 1 vCPU и 1 GB RAM. Подойдёт любой провайдер: DigitalOcean, Hetzner, Timeweb, REG.RU.
-
□
Домен или поддомен — для HTTPS. Например,
chat.yourcompany.ru. Без домена можно работать по IP, но без SSL. - □ Docker и Docker Compose — установщик проверит и при необходимости установит их сам.
- □ Открытые порты 80 и 443 — стандартные HTTP/HTTPS. Проверьте firewall провайдера.
Для начала хватит самого дешёвого VPS — 5–10$/месяц у большинства провайдеров. По мере роста аудитории систему легко вертикально или горизонтально масштабировать.
Шаг 1 — Подключение к серверу
Подключитесь по SSH от имени root или пользователя с sudo-правами:
ssh root@YOUR_SERVER_IP
# Или если используете ключ
ssh -i ~/.ssh/id_ed25519 root@YOUR_SERVER_IP
После входа убедитесь, что система обновлена:
apt update && apt upgrade -y
Шаг 2 — Запуск установщика
Скачайте и запустите установщик одной командой. Скрипт автоматически установит Docker, скачает образы и подготовит директорию проекта:
curl -fsSL https://securechat.example/install.sh | bash
Скрипт выведет прогресс в реальном времени. Обычно занимает 60–90 секунд в зависимости от скорости соединения. По завершении вы увидите:
[✓] Docker detected (version 24.0.7)
[✓] Docker Compose detected (version 2.21.0)
[✓] Images pulled successfully
[✓] Directory /opt/securechat created
[!] Edit /opt/securechat/.env before running deploy.sh
Шаг 3 — Настройка .env
Минимальная конфигурация — одна переменная. Откройте файл настроек:
nano /opt/securechat/.env
Содержимое файла:
# Обязательно — секретный ключ для JWT-токенов
# Сгенерируйте: openssl rand -hex 32
JWT_SECRET=ваш_секретный_ключ_минимум_32_символа
# Опционально — домен (для HTTPS)
DOMAIN=chat.yourcompany.ru
# Опционально — максимальный размер файла (по умолчанию 100MB)
MAX_FILE_SIZE=104857600
# Опционально — порт (по умолчанию 3000)
PORT=3000
Сгенерируйте надёжный JWT_SECRET одной командой:
openssl rand -hex 32
# Пример вывода: a3f8c2d1e9b4f7a2c6e0d8b5f3a1e7c9d4b2f6a8e0c3d5b7f9a1e3c5d7b9f1a3
JWT_SECRET — единственный секрет, который нужно защитить. Не коммитьте .env в git, не передавайте по незащищённым каналам. Все остальные настройки — опциональны.
Шаг 4 — Запуск и первый вход
Запустите деплой-скрипт:
cd /opt/securechat && ./deploy.sh
После запуска откройте браузер и перейдите на адрес вашего сервера. Если домен ещё не настроен — используйте IP и порт:
http://YOUR_SERVER_IP:3000
# или с доменом:
http://chat.yourcompany.ru:3000
Вы увидите экран регистрации. Первый зарегистрированный пользователь автоматически получает права администратора. Создайте аккаунт — и мессенджер готов к использованию.
Шаг 5 — HTTPS через Let's Encrypt
Для продакшн-использования необходим SSL. SecureChat включает встроенную интеграцию с Certbot:
# Убедитесь, что домен указывает на IP вашего сервера
# Запустите HTTPS-настройку
./deploy.sh --ssl
# Скрипт автоматически:
# 1. Установит Certbot
# 2. Выпустит сертификат для DOMAIN из .env
# 3. Настроит автообновление (cron)
# 4. Перезапустит сервис на 443 порту
После этого мессенджер доступен по https://chat.yourcompany.ru без указания порта. Сертификат обновляется автоматически каждые 60 дней.
HTTPS — обязательное условие для работы Web Crypto API в браузере. Без SSL E2E-шифрование не будет работать. Не используйте мессенджер в продакшне без SSL.
Частые проблемы
Порт занят
Если при запуске появляется ошибка address already in use, проверьте, что порт свободен:
ss -tulpn | grep :3000
# Если порт занят — найдите процесс и остановите его
# или смените PORT в .env
Docker не найден
Если установщик не смог поставить Docker автоматически, установите вручную:
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
Домен не резолвится
Перед запуском --ssl убедитесь, что DNS-запись типа A для вашего домена уже указывает на IP сервера. Проверить:
dig +short chat.yourcompany.ru
# Должен вернуть IP вашего сервера
DNS распространяется до 48 часов, но обычно за 15–30 минут.