Что потребуется

Для запуска 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-правами:

// terminal
ssh root@YOUR_SERVER_IP

# Или если используете ключ
ssh -i ~/.ssh/id_ed25519 root@YOUR_SERVER_IP

После входа убедитесь, что система обновлена:

// ubuntu 22.04
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

Содержимое файла:

// /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 автоматически, установите вручную:

// ручная установка Docker
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker

Домен не резолвится

Перед запуском --ssl убедитесь, что DNS-запись типа A для вашего домена уже указывает на IP сервера. Проверить:

// проверка DNS
dig +short chat.yourcompany.ru
# Должен вернуть IP вашего сервера

DNS распространяется до 48 часов, но обычно за 15–30 минут.