Self-host Owncast on a managed VPS: your live streams on your own server

When you self-host Owncast on a managed VPS, you broadcast your live video and run its chat from a machine of your own, which our teams keep up to date and monitor day and night. Owncast is free software under the MIT license. This guide follows its official documentation: the CPU and bandwidth to plan for, installing with Docker Compose, the stream key, HTTPS, video qualities, object storage, chat, backups and updates.

Simon Vasconcelos Lee By Published on 14 November 202615-minute read

All guides

In short

  1. The MIT license lets you use, modify and redistribute Owncast freely, at work or anywhere else, as long as you keep its copyright notice.
  2. The CPU does the transcoding, and its load does not depend on how many viewers you have; bandwidth grows with each one of them: bitrate × viewers.
  3. Install it with Docker Compose: the owncast/owncast image, which ships with ffmpeg, web port 8080 behind an HTTPS reverse proxy, and RTMP port 1935 for your broadcasting software.
  4. Change the admin password and the stream key at your first login: both default to abc123.
  5. Owncast backs up its database every hour; copy the whole data folder off the server for a full recovery, and update with docker compose pull.

What Owncast does

Owncast is an open source, self-hosted, single-user live video streaming and chat server: one instance carries the channel of one person or organization. Its README presents it as a way to run your own live streams, in the style of the large mainstream platforms, while keeping ownership of your content, interface, moderation and audience.

What the MIT license allows

Owncast is published under the MIT license. It grants, free of charge, the right to use, copy, modify, merge, publish, distribute, sublicense and sell copies of the software. You can therefore run it for your business, your community or your clients, with no license to buy.

The only condition is to keep the copyright notice and the license text in all copies or substantial portions of the software. The text provides the software “as is”, without warranty.

CPU and bandwidth: sizing the server

The documentation says it up front: requirements depend on your configuration. It does set out a clear rule to estimate them. The CPU transcodes the video into the qualities you offer; bandwidth delivers it to each viewer.

Server bandwidth

The documentation gives two formulas. The volume of a stream, in gigabytes: bitrate in kbps × duration in seconds × viewers ÷ 8,000,000. The peak outbound speed to sustain, in Mbps: bitrate in kbps × viewers ÷ 1,000. With several qualities, work out each one and add them up. Its estimates for a two-hour stream:

Stream bitrate10 viewers25 viewers50 viewers
2,000 kbps18 GB, 20 Mbps45 GB, 50 Mbps90 GB, 100 Mbps
4,000 kbps36 GB, 40 Mbps90 GB, 100 Mbps180 GB, 200 Mbps
6,000 kbps54 GB, 60 Mbps135 GB, 150 Mbps270 GB, 300 Mbps

On a Simafri VPS, traffic has no monthly meter: your streams are sized on their peak bitrate. As your audience grows, object storage, covered below, serves the video in place of the server.

The CPU

The documentation gives measured reference points, noting that they vary with codec, bitrate, resolution and encoder preset:

ConfigurationCPU load
A single passthrough quality, no re-encodingMinimal
A single transcoded qualityLight
Two qualities, high and lowModerate
Three qualities, or heavy compressionHeavy

The documentation gives no memory figure, and disk matters little: video segments are written and then removed as the stream goes on. Only the data folder grows over time. On a VPS, the CPU does the encoding: each transcoded quality is sized in vCPUs. On a managed VPS, tell us about your streams, their bitrate, their qualities and your audience, and we will recommend the right size.

Your broadcasting connection

Before it reaches the server, the stream leaves your own connection. The documentation asks for an upload speed of at least 1.5 times the stream bitrate: 7.5 Mbps for a 5,000 kbps stream. It recommends a wired connection over Wi-Fi.

Installing with Docker Compose

The documentation offers the owncast/owncast image on Docker Hub, which includes ffmpeg, the encoding tool Owncast needs. On a server with Docker installed, create a folder and put this compose.yaml in it, taken from the documentation:

compose.yaml
services:
  owncast:
    image: owncast/owncast:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:8080:8080"
      - "1935:1935"
    volumes:
      - ./data:/app/data
Terminal
docker compose up -d

Without Docker: the official installer

The documentation’s other route is a script that downloads the latest Owncast release for your platform, and ffmpeg if it is not already there. It installs everything in an owncast folder under the current one. The documentation advises against running it as root and recommends reading any remote script before running it:

Terminal, with a dedicated account
curl -s https://owncast.online/install.sh | bash

To have Owncast start with the server and restart on its own after a crash, the documentation provides a systemd service, to adapt to the folder and account you chose:

/etc/systemd/system/owncast.service
[Unit]
Description=Owncast
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/owncast
ExecStart=/opt/owncast/owncast
User=owncast
Group=owncast
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
Terminal
sudo systemctl daemon-reload
sudo systemctl enable --now owncast

Admin password and stream key

The admin lives at /admin. Owncast starts with credentials everyone knows, which the documentation asks you to change at your first login:

SettingDefault valueWhat it does
Admin usernameadminLogging in to /admin
Admin passwordabc123Logging in to /admin
Stream keyabc123Publishing the stream from your broadcasting software

To make this change before the interface is open to the public, go through an SSH tunnel: the server’s port 8080 shows up on your computer, at http://localhost:8080/admin. Add -p and the SSH port shown in your customer area.

Terminal, on your computer
ssh -L 8080:127.0.0.1:8080 user@live.example.com

The admin password and the stream key both start as abc123, but they are two separate settings: change both.

HTTPS: the reverse proxy

Owncast does not handle HTTPS itself. The documentation puts a reverse proxy in front of it, which listens on ports 80 and 443, gets the certificate, encrypts the traffic and forwards it in plain form to Owncast on port 8080. Without HTTPS, browsers flag the page as not secure, and a page served over HTTPS cannot embed your video or your chat.

With Caddy

The documentation suggests Caddy if you have no other preference: it gets a Let’s Encrypt certificate on its own and forwards WebSocket with no extra setting. Here is its Caddyfile example, where the tls line gives the email address of the Let’s Encrypt account:

Caddyfile
live.example.com {
  encode gzip
  reverse_proxy 127.0.0.1:8080
  tls contact@example.com
}

With Nginx

With Nginx, the documentation stresses WebSocket: forgetting it is what disables chat. Add this map block to the http section of /etc/nginx/nginx.conf:

nginx.conf, inside http
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

This site block follows the documentation’s, on port 80 so that Certbot can set up HTTPS:

Nginx block
server {
    listen 80;
    listen [::]:80;
    server_name live.example.com;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Authorization $http_authorization;
        proxy_pass_header Authorization;
        proxy_pass http://127.0.0.1:8080;
    }
}
Terminal
sudo nginx -t
sudo certbot --nginx

Streaming over RTMP from OBS

Owncast accepts any software that broadcasts over RTMP to a remote server. The key is only accepted on the /live path. In OBS:

  1. Open “Settings”, then “Stream”, and pick “Custom” as the service.
  2. Enter the address rtmp://live.example.com:1935/live.
  3. Enter your stream key, the one from Owncast’s “Stream Keys” tab.
  4. Start streaming.

Software with no field for the key accepts the full address, rtmp://live.example.com:1935/live/your-key.

On a Simafri VPS, the server’s IPv6 address can open any port you choose: your broadcasting software reaches port 1935 through that address, under a name that carries the AAAA record. On an IPv4 Docker network, as here, Docker maps the port on the server’s IPv6 address to the container. Open that port if ufw is active, then test from your computer:

Terminal
sudo ufw allow 1935/tcp
nc -6 -vz live.example.com 1935

For any other need, tell us what you have in mind and we will look at the addressing with you.

Your broadcasting software settings

ResolutionFrames per secondSuggested bitrate
1920 × 1080605,000 kbps
1920 × 1080304,500 kbps
1280 × 720604,000 kbps
1280 × 720303,000 kbps

Video qualities and latency

The qualities offered to viewers are set under “Configuration”, “Video”. Several qualities let the player pick the one its connection can sustain: the documentation recommends a second quality, from 1,000 to 2,000 kbps, next to a high quality of 4,000 to 6,000 kbps, once your first configuration has been tested.

Passthrough passes the incoming video along without re-encoding it: it saves nearly all of that quality’s CPU, and ignores its bitrate, resolution and frame rate settings. The documentation reserves it for advanced users: viewers receive exactly what your software sends, which some players cannot play, and latency goes up. Test playback on the devices that matter to you before relying on it.

Latency is set with the latency buffer, on the same page. Each level trades a little delay for stability, and a change applies from the next stream:

LevelSegment lengthSegments in playlistApproximate latency
0, lowest1 second25about 5 seconds
12 seconds15about 8 to 9 seconds
2, default3 seconds10about 10 seconds
34 seconds8about 15 seconds
4, highest5 seconds5about 18 seconds

Version 0.3.0 also adds, on the viewer side, the player’s “Minimize latency” option, which slightly speeds up playback to get closer to live, and an autoplay setting, off by default.

Object storage to serve more viewers

Owncast can send its video segments to S3-compatible storage, from which viewers download them. The server still serves the master playlist, the APIs and the chat; the video, which makes up almost all of the bandwidth, comes from the storage. Your server then sends only one copy of each quality: in the documentation’s example, 6.5 Mbps for two qualities at 5,000 and 1,500 kbps, whether you have zero viewers or a thousand. CPU load stays the same.

  1. Create a bucket with your object storage provider.
  2. Make it publicly readable, and set a CORS policy if the provider requires one: a CORS or Access-Control-Allow-Origin error in the browser console almost always comes from there.
  3. Under “Configuration”, “Server Setup”, “S3 Object Storage” tab, enable storage and enter the bucket name, access key, secret key, endpoint and region. All of these fields are required.

This storage serves the live stream, not an archive: Owncast deletes, as it goes, segments older than the playlist plus a buffer of about 20 segments. The bucket only holds the last few minutes of the stream.

For viewers spread around the world, the documentation also describes a content delivery network (CDN) placed in front of Owncast, with a separate origin hostname and the “Websocket host override” setting, which keeps the chat connected to the origin server.

Chat and moderation

Chat is set up under “Configuration”, “Chat”. By default there are no moderators: the documentation suggests at least making yourself one, from the “Users” page of the admin.

The documentation points out that IP blocking can be evaded, with a VPN for example: it keeps abuse down, and moderation remains each channel’s own work. Hence the value of named moderators for your most watched streams.

Backups

Owncast backs up its own database once an hour, to data/backup/owncastdb.bak. The --backupdir flag changes that folder. Here is what the data folder holds:

ItemWhat it holdsIn the hourly backup
owncast.dbConfiguration, users, chat history and access tokensYes
backup/The hourly database backupIt is the backup
Custom emoji, public/Files you have addedNo
PluginsInstalled plugins and their data, since 0.3.0No
GeoIP dataWhere viewers are connecting fromNo

For a full recovery, or to move the instance, the documentation asks you to back up the whole data folder: copying it to a new install carries everything over. With Docker, with the service stopped:

Terminal, in the compose.yaml folder
docker compose down
tar -czf owncast-$(date +%F).tar.gz data
docker compose up -d

Schedule this copy to match your streams, and send it off the server. Placed on its disk, these archives are also part of its nightly backups.

Restoring the database

A restore brings the database back to the time of the backup: anything changed since is lost. First copy the current database somewhere safe, then:

  1. Stop Owncast.
  2. Start Owncast with --restoreDatabase and the path of the backup file: it restores the database, then exits.
  3. Start Owncast as usual, then check your settings in the admin.
Terminal, with Docker
docker compose stop
docker compose run --rm owncast --restoreDatabase data/backup/owncastdb.bak
docker compose up -d

Updates

With Docker, the documentation gives two commands, run from the compose.yaml folder. The data folder stays in place:

Terminal
docker compose pull
docker compose up -d

With the installer, the 0.3.0 release notes describe the update: stop the service, set aside any web interface files you have customized, run the installer again as the account that runs Owncast, then restart. The script itself stores an archive of the data folder in owncast-install-backups before replacing the release.

Terminal, with the systemd service
sudo systemctl stop owncast
su -c "curl https://owncast.online/install.sh | bash" owncast
sudo systemctl start owncast

Version 0.3.0, released on 3 September 2026, brings plugins, Featured Streams, autoplay and the choice of the interface RTMP listens on. Its notes ask you to read the changes before updating, as they affect your instance: follow these notes with each release, and copy the data folder right before.

Who does what on a managed VPS

Self-hosting means running the server on top of the application. On a managed VPS, our teams take charge of the server and proactively monitor your instance; Owncast remains your software, with its settings and its data.

TopicOur teamsYou
The serverSystem and security updates, server interventions includedThe timing that suits your business
MonitoringServer monitored 24/7, with intervention without waiting for your callReading your instance’s logs
OwncastProactive monitoring: errors, slowdowns, CPU load and disk space spotted, fix recommendedIts installation, updates and settings, which you apply, yourself or through your AI assistant
Streams and chatThe server that carries them, monitored and backed upStream keys, video qualities, moderators and chat rules
BackupsEvery night, encrypted and kept off the machine; restores includedOwncast’s own copies, and the restore request, when you need one
MigrationYour current server migrated, free of chargeThe timing of the switch

If you would rather have our teams work inside the application itself, that service is billed by the hour or at a fixed rate, with an estimate shared before the work starts.

Owncast, on a server run for you

With a Simafri Managed VPS, our teams keep your Owncast instance’s server up to date, monitor it day and night and step in without waiting for your call; they also proactively monitor your instance and recommend useful fixes, which you apply, yourself or through your AI assistant. Backups are encrypted every night and kept off the machine, restores are included, and migrating your current server is complimentary.

Explore Managed VPS

Frequently asked questions

Is Owncast free for a business?

Yes. Owncast is under the MIT license: you can use, modify and redistribute it at work with no license to buy, as long as you keep its copyright notice. What remains is the cost of the server that runs it.

What CPU does Owncast need?

It depends on the qualities you offer. As a rough rule of thumb, the documentation counts one core per transcoded quality at 30 frames per second, and almost nothing for a passthrough quality. Viewer count does not change CPU load.

How much bandwidth does Owncast need?

Peak speed equals the stream bitrate times the number of viewers: 25 viewers at 5,000 kbps need 125 Mbps outbound. S3-compatible object storage can serve the video in place of the server, which then sends only one copy of each quality.

How do I install Owncast with Docker Compose?

Create a compose.yaml with the owncast/owncast image, port 8080 published on 127.0.0.1, port 1935 for RTMP and a data folder mounted on /app/data, then run docker compose up -d. Next, put an HTTPS reverse proxy in front of port 8080.

What are the default Owncast credentials?

The admin, at /admin, opens with the username admin and the password abc123, and the stream key is also abc123. These are two separate settings: change both at your first login, under Configuration, Server Setup.

How do I stream to Owncast from OBS?

In OBS, pick a custom service, enter rtmp://your-server:1935/live and your stream key. Send H.264 video and AAC audio, with a keyframe every 2 seconds.

How do I back up Owncast?

Owncast backs up its database every hour to data/backup/owncastdb.bak. That backup only covers the database: for a full recovery, copy the whole data folder off the server. Restores are done with the --restoreDatabase flag.

Does a managed VPS cover Owncast?

A managed VPS covers the server: system, security, monitoring and backups. Our teams also proactively monitor your instance and recommend useful fixes, which you apply. Work inside the application is billed by the hour or at a fixed rate.

Contact us