MAATRIX / Блог / Как установить и настроить Owncast на VPS

Как установить и настроить Owncast на VPS

MAATRIX

Twitch банит по геопризнаку, YouTube-стрим может улететь под страйк за случайный звук в фоне, а Kick или другие платформы не дают гарантий, что канал не исчезнет вместе с архивом. Owncast решает это радикально: вы владеете сервером, вы владеете видео, никто кроме вас не может отключить трансляцию. Ниже — рабочая установка с нуля: от чистого VPS до работающего RTMP-приёма и веб-страницы стрима с своим доменом и HTTPS.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Owncast и зачем он нужен

Owncast — открытый проект на Go, который принимает RTMP-поток (тот же протокол, что использует OBS для отправки на Twitch) и раздаёт его зрителям через HLS прямо с вашего сервера. Никакого стороннего рантайма, никакой рекламы, никакой модерации извне — весь стек умещается в один бинарник или один Docker-контейнер.

Что вы получаете:

  • Собственную страницу трансляции с чатом (встроенный WebSocket-чат, без внешних сервисов);
  • Полный контроль над записями — VOD хранится на вашем диске, вы решаете, когда удалить;
  • Никаких региональных блокировок и правил площадки — только законы вашей страны и провайдера;
  • Гибкую кастомизацию: свой логотип, цвета, описание, кастомные страницы.

Для кого это имеет смысл: технические стримы, закрытые трансляции для команды или подписчиков, резервный канал на случай бана основного аккаунта, стриминг с полным контролем над контентом (образовательные курсы, вебинары, DAO-созвоны).

Минус тоже нужно проговорить честно: у вас нет чужой аудитории и алгоритмов рекомендаций — трафик на канал вы приводите сами. Owncast — это инфраструктура, а не маркетинговая площадка.

Требования к серверу и выбор VPS

Owncast лёгкий по потреблению CPU/RAM в режиме приёма и раздачи, но узкое место — исходящий трафик и загрузка CPU при транскодировании в несколько качеств.

Ориентировочные требования (без гарантии точных цифр — зависит от битрейта и числа зрителей):

СценарийvCPURAMДискКанал
Личный стрим, до 10 зрителей, 1 качество22 ГБ20 ГБ SSD100 Мбит/с
Регулярные стримы, до 50 зрителей, 2-3 качества44 ГБ40 ГБ SSD500 Мбит/с+
Публичный канал, транскодирование в 3+ качества6-88 ГБ80 ГБ SSD1 Гбит/с

Диск важен отдельно: если вы храните VOD-записи, каждый час стрима в 1080p — это несколько гигабайт. Планируйте место с запасом или настройте автоочистку старых записей.

Локацию сервера выбирайте по географии аудитории: если зрители в основном в России и СНГ — берите RU-сервер, для международной аудитории лучше US или UK — там же обычно ниже цена трафика на исходящий поток. Для российского зрителя с оплатой картой или криптой это тоже удобнее — не нужно возиться с международными платёжными системами.

Дальше вся установка — на чистой Ubuntu 24.04, команды от root или через sudo.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Установка Docker и подготовка окружения

Owncast официально поддерживает установку через Docker и через отдельный бинарник. Docker удобнее для апгрейдов и изоляции, поэтому идём этим путём.

apt update && apt upgrade -y
apt install -y ca-certificates curl gnupg

install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  tee /etc/apt/sources.list.d/docker.list > /dev/null

apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

Проверка:

docker --version
docker compose version

Если Docker уже стоит — можно пропустить этот блок. Подробный разбор развёртывания Docker на чистом сервере разбирали в статье про установку Docker на Ubuntu.

Развёртывание Owncast через docker-compose

Создаём рабочую директорию и файл конфигурации:

mkdir -p /opt/owncast/data
cd /opt/owncast

docker-compose.yml:

services:
  owncast:
    image: owncast/owncast:latest
    container_name: owncast
    restart: unless-stopped
    ports:
      - "8080:8080"   # веб-интерфейс
      - "1935:1935"   # RTMP-приём для OBS
    volumes:
      - ./data:/app/data

Запуск:

docker compose up -d
docker compose ps

Проверьте, что контейнер поднялся и порты открыты:

docker compose logs -f owncast

В логе должна появиться строка о старте RTMP-сервера на порту 1935 и веб-сервера на 8080. По умолчанию Owncast генерирует случайный стрим-ключ при первом запуске — его нужно сменить сразу же, до открытия сервера наружу.

Зайдите на http://IP-сервера:8080/admin — логин по умолчанию admin, пароль генерируется случайно и печатается в логах контейнера при первом запуске (docker compose logs owncast | grep -i password). Смените пароль администратора сразу в разделе Config → Server Setup.

Настройка домена, Nginx и SSL

Открывать зрителям порт 8080 напрямую — плохая практика: без HTTPS браузеры будут ругаться, а WebSocket-чат может резаться некоторыми провайдерами. Ставим reverse proxy с автоматическим SSL.

Направьте A-запись домена (например stream.example.com) на IP вашего VPS, затем установите Nginx и Certbot:

apt install -y nginx certbot python3-certbot-nginx

Конфиг /etc/nginx/sites-available/owncast:

server {
    listen 80;
    server_name stream.example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        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_read_timeout 3600s;
    }
}

Активируем и получаем сертификат:

ln -s /etc/nginx/sites-available/owncast /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
certbot --nginx -d stream.example.com

Certbot сам пропишет редирект на HTTPS и настроит автопродление. Если вы предпочитаете Caddy вместо Nginx — он получает SSL ещё проще, без отдельного шага с certbot; сравнение подходов есть в статье Caddy или Nginx — что выбрать для сервера.

Важный момент: порт 1935 (RTMP) для приёма потока от OBS через Nginx не проксируют — он должен быть открыт напрямую на IP сервера, HTTPS тут не нужен, поток от вас к серверу идёт как RTMP-сессия, а не HTTP.

Настройка файрвола

Открываем только нужные порты: SSH, HTTP/HTTPS для сайта, RTMP для приёма потока. Веб-порт 8080 наружу закрываем — он теперь доступен только локально через Nginx.

ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 1935/tcp
ufw enable
ufw status verbose

Если 8080 уже был открыт правилом — уберите его:

ufw delete allow 8080/tcp

Подробный разбор настройки UFW с типичными граблями (например, порядок правил и Docker, который сам открывает порты в iptables в обход UFW) — в статье про firewall UFW на VPS. Отдельно стоит проверить: Docker по умолчанию модифицирует iptables напрямую и может открыть порт контейнера в обход правил UFW — для порта 1935, который и так должен быть открыт, это не проблема, но для приватных сервисов на других портах это частая причина утечки доступа.

Настройка OBS и параметров стрима

В Owncast зайдите в админку https://stream.example.com/admin → Config → Server Setup и скопируйте Stream Key.

В OBS Studio: Settings → Stream → Service: Custom...

  • Server: rtmp://IP-сервера-или-домен:1935/live
  • Stream Key: ключ из админки Owncast

В Settings → Output настройте битрейт под ваш канал: для 1080p30 разумный ориентир — 4000-6000 Кбит/с (это именно ориентир, точное значение зависит от контента и стабильности вашего аплинка — тестируйте и подстраивайте).

В админке Owncast (Config → Video) можно включить несколько исходящих качеств одновременно — Owncast сам транскодирует входящий поток в 2-3 более лёгких варианта, и зрители с медленным интернетом получат нижнее качество автоматически через адаптивный HLS. Это заметно грузит CPU, поэтому включайте многопоточное транскодирование только если ресурсов сервера хватает с запасом — иначе может начать проседать основной поток.

Проверка перед первым публичным стримом:

docker compose logs -f owncast

При старте вещания из OBS в логе появится запись о новом входящем RTMP-соединении. Откройте https://stream.example.com в браузере — трансляция должна появиться с небольшой задержкой в несколько секунд (это нормально для HLS, задержка ниже, чем у классического HLS, но выше, чем у WebRTC-решений).

Резервное копирование и обновление

Owncast хранит всю конфигурацию и записи в директории ./data — её и нужно бэкапить.

Простой скрипт резервного копирования:

#!/bin/bash
DATE=$(date +%Y%m%d)
tar -czf /root/backups/owncast-$DATE.tar.gz -C /opt/owncast data
find /root/backups -name "owncast-*.tar.gz" -mtime +14 -delete

Добавьте в cron:

crontab -e
# 0 4 * * * /root/backup-owncast.sh

Для более надёжного решения с версионированием и дедупликацией подойдёт BorgBackup — разбор установки есть в статье про BorgBackup на Ubuntu.

Обновление Owncast до новой версии:

cd /opt/owncast
docker compose pull
docker compose up -d

Перед крупным обновлением стоит сверяться с release notes проекта — иногда меняется формат конфигурации, и стоит сделать бэкап data перед апдейтом на всякий случай.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Можно ли смотреть стрим Owncast с телефона?

Да, страница адаптивна и работает в любом мобильном браузере через HLS — отдельное приложение не нужно.

Сколько зрителей выдержит VPS на 4 vCPU / 4 ГБ RAM?

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

Нужен ли CDN?

Для небольшой и средней аудитории — нет, сервер справляется сам. Для аудитории в сотни одновременных зрителей стоит вынести раздачу HLS-сегментов через CDN или увеличить исходящий канал сервера.

Что будет, если оборвётся связь во время стрима?

Owncast завершит трансляцию и сохранит запись до момента обрыва (если включён VOD), зрители увидят офлайн-страницу. При переподключении OBS новый сеанс стартует как новая трансляция.

Можно ли встроить чат на внешний сайт?

Да, у Owncast есть embed-виджеты для плеера и чата, которые можно вставить iframe-ом на любую другую страницу.

Безопасно ли открывать RTMP-порт наружу?

Сам по себе RTMP не шифруется, но поток защищён секретным ключом — без него подключиться и вещать на ваш сервер нельзя. Для дополнительной защиты меняйте ключ регулярно и не публикуйте его.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →