Как установить и настроить Owncast на VPS
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 при транскодировании в несколько качеств.
Ориентировочные требования (без гарантии точных цифр — зависит от битрейта и числа зрителей):
| Сценарий | vCPU | RAM | Диск | Канал |
|---|---|---|---|---|
| Личный стрим, до 10 зрителей, 1 качество | 2 | 2 ГБ | 20 ГБ SSD | 100 Мбит/с |
| Регулярные стримы, до 50 зрителей, 2-3 качества | 4 | 4 ГБ | 40 ГБ SSD | 500 Мбит/с+ |
| Публичный канал, транскодирование в 3+ качества | 6-8 | 8 ГБ | 80 ГБ SSD | 1 Гбит/с |
Диск важен отдельно: если вы храните 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 ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →