freo.live

A new server. Your first broadcast.

How to
install Freo.

From an empty Ubuntu server to a station you can hear.

Start with your server’s IP address, or choose a domain and HTTPS. Both paths use the same installer and verified GitHub release. You do not need a Freo Live account to install.

Ubuntu 24.04x86_64 / AMD64Fresh server only

The short route

Quick Install

No domain, DNS setup or certificate email needed.

  1. Create a fresh Ubuntu 24.04 x86_64 server. Allow your SSH port and inbound TCP 80 in your provider’s firewall and any host firewall.
  2. Connect with SSH as root or a sudo-capable user. Run this one line on the new server:
On the new server · install using its public IP
curl -fsS https://freo.live/install | sudo bash

Confirm the server details when asked. The installer detects the public IPv4 address; if detection is uncertain, enter the address from your hosting dashboard. Approve installation of verification tools if prompted. It then downloads and verifies the latest stable signed release and installs Freo.

Open the printed login address, such as http://YOUR_SERVER_IP/admin/login. Complete first-time account setup, then add your station and music. First login still requires an admin email and a new password; no email is needed to request a certificate on this path.

IP-only access uses unencrypted HTTP. For a secure admin connection and remote browser microphones, choose a domain and HTTPS before installing.

Need help connecting or missing a command?

Follow Connect and prepare for SSH instructions and missing curl, Python or certificate tools, then return here. If you are root and sudo is unavailable, use curl -fsS https://freo.live/install | bash. Keep your SSH session open until installation finishes; the detailed guide also explains tmux for unreliable connections.

If installation fails, stop and consult troubleshooting. Do not rerun a fresh installer over a partial or existing Freo installation.

Installation confirmed

Operator testing confirmed that one command brought Freo on air: the signed package was verified, music played successfully, the station recovered after a reboot, and Freo Live reported Current. You can also follow the official signed-release instructions.

Instructions checked against Freo 0.3.0 and installer 0.1.0 · 24 September 2026. The installer selects the latest stable release from GitHub; check its release notes if it selects a newer version.

Install with a domain and HTTPS

Choose this path for a secure web address from the start. If you already completed Quick Install, skip to first login and your first station. These are alternative installation paths; do not install twice.

How to use this walkthrough

Each command says where to run it. Copy one block at a time, replace the example values, and wait for it to finish. A command prompt returning means the command finished; an error means stop and check the troubleshooting section before continuing. Copy buttons only copy text. They never run commands.

Step 01

Choose a fresh server

A virtual private server (VPS) is a computer you rent from a hosting provider. It stays online so your station can broadcast when your own computer is off. In your provider’s dashboard, create a new Ubuntu 24.04 LTS server with an x86_64/AMD64 processor. Choose a plain operating-system image, not a web-hosting panel, Docker image, or ARM server.

  • Use an empty server dedicated to Freo. An existing Freo installation or PostgreSQL database is not a fresh target.
  • You need administrator access: a root login or a user allowed to run sudo.
  • Allow storage for the application, downloaded and extracted packages, your music, and backups. CPU and memory needs grow with stations and audio processing; no universal minimum size is published with this release. Your provider can help size the server.
  • Check the provider’s data-transfer allowance. As an example, a 128 kbps stream uses about 58 MB per listener-hour before overhead; ten listeners for a month can use roughly 415 GB.
  • Have some MP3, WAV, M4A or FLAC music you have permission to broadcast.

Write down these details before continuing:

Your installation details
DetailWhere to get it
Server’s public IPv4 addressYour hosting dashboard. Use your real address wherever this guide says YOUR_SERVER_IP.
SSH username and login methodYour provider, often ubuntu or root. Keep the password or private key private.
Radio hostnameA name you control, such as radio.example.com. The examples are placeholders, not working Freo servers.
Certificate emailAn email address you monitor. Replace you@example.com with yours.

Ready: You have a fresh supported server, its login details, and access to your domain’s DNS settings.

Step 02

Connect and prepare

On Windows, open Windows Terminal or PowerShell. On macOS or Linux, open Terminal. SSH opens a command line on the remote server. Replace both uppercase placeholders:

On your computer · connect with SSH
ssh YOUR_SSH_USER@YOUR_SERVER_IP

If your provider requires a key file, use ssh -i /path/to/your/private-key YOUR_SSH_USER@YOUR_SERVER_IP with the actual local key path. If it uses a different SSH port, add -p PORT. Compare a first-connection host fingerprint with your provider’s console before accepting it. Passwords are not shown while you type; that is normal.

You are now typing on the server. Confirm its name matches the server you just created:

On the new server · confirm the target
hostname
cat /etc/os-release
uname -m
sudo -v

Look for Ubuntu, VERSION_ID="24.04", and x86_64. sudo grants administrator privileges for a command. If you are already logged in as root and sudo is unavailable, omit that word; otherwise obtain a sudo-capable account from your provider.

Install the small tools used below. This does not install Freo yet:

On the new server · install preparation tools
sudo apt-get update
sudo apt-get install -y ca-certificates curl python3 dnsutils ufw tmux less

Check the clock and available disk space:

On the new server · check clock and storage
timedatectl status
df -h /

The clock should show the correct date/time and be synchronized. If not, fix time synchronization with your provider before certificate or download checks. Make sure there is free space for your packages and music.

Ready: You are on the intended Ubuntu 24.04 x86_64 server, commands complete without errors, and you have administrator access.

Step 03

Give your station a secure address

HTTPS protects your admin login and is required for a remote browser microphone. Set it up during installation. You need a domain or subdomain that belongs to you.

  1. Open the DNS settings for your domain. Add an A record named radio, pointing to your new server’s public IPv4 address. For a domain such as example.com, this creates radio.example.com.
  2. Use ordinary DNS routing during setup. If your DNS service offers a proxy or CDN mode, choose DNS-only for this hostname.
  3. For this IPv4 walkthrough, remove a stale AAAA record for that radio hostname unless IPv6 is correctly configured on the same server. Do not change unrelated records for your domain.
  4. Wait for DNS to update, then check your actual radio hostname:
On the new server · check your radio hostname
dig +short A radio.example.com
dig +short AAAA radio.example.com

The A answer must be your new server’s public IPv4 address. With IPv4-only setup, the AAAA answer should be empty. A matching result is a useful check, but DNS caches elsewhere may still need time.

In the hosting dashboard’s firewall (sometimes called a security group), allow:

Inbound access for a basic station
PortWho can connectPurpose
TCP 22, or your SSH portYour administrator IPServer administration
TCP 80EveryoneHTTP and certificate validation
TCP 443EveryoneHTTPS website and streams

Allow outbound DNS, HTTPS and package-repository access. The installer needs GitHub, Ubuntu/Xiph repositories and Freo Live. Database and internal audio ports do not need public access. Live Mic has separate network requirements; get basic music playback working first.

Set up Ubuntu’s firewall too

The following assumes SSH uses TCP 22. If your connection uses another port, add an allow rule for that actual port before enabling the firewall. Keep this session open and your provider’s recovery console available.

On the new server · allow access before enabling UFW
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw show added

Check that your SSH port is listed, then enable the firewall:

On the new server · enable and check UFW
sudo ufw enable
sudo ufw status

Confirm the warning only after allowing SSH. Open a second terminal on your computer and verify that you can still SSH in before closing the original session. Do not reset an existing firewall configuration.

Ready: DNS points at your server, SSH still works, and inbound 80/443 are allowed in both cloud and host firewalls. Port 80 must remain reachable for certificate validation and renewal.

Step 04

Download and check the installer

Download on the new server, not your laptop. Start a tmux session first; it keeps the installation running if your SSH connection drops:

On the new server · keep the session running
tmux new -s freo-setup

A new terminal opens inside the existing one. Continue there. If you disconnect later, SSH back in as the same user and run tmux attach -t freo-setup. If it says no session exists, check the installation’s outcome before starting again.

On the new server · download without executing
mkdir -p "$HOME/freo-setup"
cd "$HOME/freo-setup"
curl --fail --silent --show-error --proto '=https' \
  --connect-timeout 15 --max-time 120 \
  --output freo-install.sh.part https://freo.live/install &&
  mv freo-install.sh.part freo-install.sh

If the download fails, stop. After a successful download, check the approved installer checksum:

On the new server · verify installer bytes
printf '%s  %s\n' '0e494e6b07af6331ff27894515fd648a71da1c1769e3bdd257cb396dc65bdf9a' 'freo-install.sh' | sha256sum --check

Expect freo-install.sh: OK. A mismatch means do not run it; obtain the current approved instructions. This checksum checks the script against this guide. The later Freo package signature is verified separately by the installer.

Inspect the script before running it

You can also read the exact reviewed source. These commands check shell syntax and display the downloaded file without running the installer. Press q to leave less.

On the new server · inspect the downloaded file
bash -n freo-install.sh
less freo-install.sh

Ready: The complete script has downloaded and its checksum says OK. Freo has not been installed yet.

Step 05

Install Freo

Replace radio.example.com with the hostname you checked in step 3 and you@example.com with your real certificate email. Use only the hostname: no https://, slash, or port.

On the new server · install with HTTPS
sudo bash freo-install.sh \
  --domain radio.example.com \
  --https --email you@example.com

The installer shows the server name, address, operating system, installer version and selected Freo version. Check that this is your new server. At Continue? [y/N], enter y only if the details are right. It may separately ask to install missing signature-verification tools.

It downloads the stable GitHub release, verifies its publisher signature and package contents, then installs the application, database and radio services. It also requests an HTTPS certificate for your hostname. Keep the session open and wait for completion; package downloads and processing can take time.

Alternative: IP-only HTTP installation

This is the explicit-IP version of Quick Install. HTTP is unencrypted; HTTPS protects admin access, and remote browser microphones require it. Skip the DNS hostname steps, retain SSH/HTTP firewall access, and replace YOUR_SERVER_IP with the server’s real public IPv4 address. Run this instead of the HTTPS command, not afterward.

On the new test server · HTTP alternative
sudo bash freo-install.sh --domain YOUR_SERVER_IP

Do not rerun the fresh installer later to switch an installed server to HTTPS. Follow the supported configuration/recovery instructions.

Success: The installer reports that Freo is installed and prints your /admin/login address. Keep the printed private diagnostics path. If it stops with an error, go to troubleshooting; do not repeatedly reinstall over partial state.

Step 06

Make the first login yours

On your own computer, open the address printed by the installer in a web browser, such as https://radio.example.com/admin/login. Use your actual hostname. For the HTTP alternative, use http://YOUR_SERVER_IP/admin/login.

The approved release’s first login is username admin and temporary password IAmOnTheAir. Immediately complete the required setup with your email and a new private password of at least 16 characters. Save it in a password manager. The temporary password then stops working.

For HTTPS, the browser should show a secure connection without a certificate warning. Do not enter credentials through an unexpected certificate warning; check DNS and the installer’s certificate result first.

Success: You can sign in with your new account and see Freo’s administration workspace. An empty station list is normal—no demo stations or music are installed.

Step 07

Put your first music on air

Start with one station and a small set of music. Keep the same station selected while following these steps.

  1. Add a station. Open Stations → Add station. Give it a name and a Station ID such as my-radio (lowercase letters, numbers and hyphens). Choose your timezone, then select Add station. The ID forms part of the listening URL and cannot be changed later. Wait for provisioning to finish; if it fails, inspect the displayed error before retrying.
  2. Import music. Open the station’s Music workspace and its import page. Choose files or a folder, review the selection, then select Import music. Wait until processing completes. Check that the songs are enabled for broadcast; do not choose Keep disabled for this first test. Preview a song to confirm the audio is right.
  3. Make a small playlist. Open Playlists, choose + New, enter a name, choose Straight (in order) or Random, and save. Use + Add music to add your imported songs. Confirm the playlist contains playable songs.
  4. Choose continuous playback. Open Station Control → Open Simple. In the library, find your playlist and place it in the Just play this selection. Save the selection. Return to Station Control, choose Use Simple, and confirm the mode change if prompted. Simple plays the chosen source continuously; you can add scheduled shows later.
  5. Turn broadcasting on. In Station Control, turn MASTER BROADCAST ON. Wait for the change to be applied and the observed station status to update. An ON switch alone is not proof that music is playing: an empty or unavailable source can produce a fallback tone.
  6. Listen as a visitor. Open your station’s public player, such as https://radio.example.com/player/my-radio, in another browser or on your phone. Replace both the hostname and station ID. Press Play; browsers usually require this click. Confirm you hear music, not just tone. Try mobile data to check access from outside your network.

Success: The public player plays your chosen music and you see confirmed playback in Freo. Your browser’s monitor button only controls local listening; MASTER BROADCAST controls whether the station broadcasts.

Remote microphone input is a separate feature with an optional gateway and WebRTC network setup. Once basic radio works, follow the Live Mic guide.

Step 08

Check it, then test a reboot

Back in your server terminal, run the release’s validation script and list any failed services:

On the Freo server · validate the installation
cd /opt/freo
sudo bash scripts/validate-install.sh
sudo systemctl --failed --no-pager

Look for a line beginning Freo validation passed. Ideally the service list shows no failed units. Investigate a failed validation or failed unit rather than assuming the website loading proves everything works.

For an HTTPS installation, check certificate renewal too:

On the Freo server · test HTTPS certificate renewal
sudo certbot renew --dry-run

Expect successful renewal simulation for your radio certificate. When you are ready for a brief interruption, leave your station broadcasting and reboot:

On the Freo server · reboot interrupts broadcasting
sudo reboot

Your SSH connection will close. Wait for the server to return, reconnect using step 2, and run the validation commands again. Open the admin page and public player and press Play. Confirm your running station comes back without starting it manually, with your music and settings intact.

Finished: Validation passes, the HTTPS certificate works, and music plays externally before and after reboot.

Step 09

Look after your station

  • Arrange backups before building a large library. Follow the backup and recovery guide for your database, music, configuration and installation identity. Store a protected copy away from this server and test restoration on a separate machine. A provider snapshot alone is not a verified application backup.
  • Use the upgrade path for updates. The primary administrator can access Software management. Read the release notes and recovery procedure before upgrading. Do not use the fresh installer on an existing station.
  • Registration is optional. Create a Freo Live account if you want to link and manage your installation. Automatic reporting includes the running version and aggregate station information; public directory listing needs a separate opt-in. Version status can remain Unknown until a successful heartbeat, normally hourly. Do not replace identity files or credentials to force a status.
  • Keep access private. Protect server keys and admin credentials. Share only reviewed, relevant diagnostic output when requesting help; never share .env, passwords, private keys, bearer tokens or identity files.

Freo is source-available and free for up to three stations under its published license. Hosting, domains and the rights to broadcast your music are separate. See licensing for details.

Help when you need it

If a step doesn’t work

SSH times out or says “Permission denied”

Confirm the public IP, SSH port and username in the hosting dashboard. A timeout usually needs a network/firewall check. Permission denied means checking the username and your provider’s password/key instructions. If you changed the firewall, use the provider’s console to restore your SSH allow rule. Do not disable host-key checking to silence a fingerprint mismatch.

The operating system or architecture is rejected

Use a fresh Ubuntu 24.04 LTS x86_64/AMD64 VM. ARM/aarch64 and other Ubuntu versions are not supported by this bootstrap. Create the correct VM rather than removing its checks.

DNS is wrong or the certificate request fails

Recheck the radio hostname’s A record, any AAAA record, and inbound 80/443 at both firewalls. Make sure DNS-only routing reaches this server. Check the clock and certificate email. If installation has already started, retain the diagnostics and use recovery guidance; do not rerun the fresh installer merely to retry the certificate.

The download, checksum or signature check fails

Stop. Check outbound access, disk space and the clock. A GitHub rate limit or temporary outage may require waiting before retrying discovery on a still-fresh server. A checksum mismatch may mean the approved script has changed; compare the current guide and source before continuing. Never skip verification or substitute an unsigned source archive.

“Existing Freo state” or an existing PostgreSQL cluster is detected

This server is not a fresh target. Use the upgrade/recovery procedure or a new empty VM. Do not delete directories, databases, service accounts or identity files to get past the guard.

The connection dropped or installation stopped halfway

Reconnect as the same SSH user and run tmux attach -t freo-setup. If the installer is still running, let it finish. If it failed, keep the private diagnostics path printed by the bootstrap, normally /var/tmp/freo-bootstrap-…. That directory may contain installer.log and verification.json, recording whether installation started. Use sudo less /var/tmp/ACTUAL_DIRECTORY/installer.log with the real path to inspect it; press q to exit. Do not start a second installation or erase partial state.

The web page does not open or the first login fails

Use the exact address and HTTP/HTTPS mode printed by the installer, including /admin/login. Check DNS and firewall rules. The temporary login works only before first-time setup; afterward use your chosen account. If the password is lost, use the documented account-recovery procedure rather than reinstalling.

On the Freo server · inspect web service status
sudo systemctl status freo nginx --no-pager
sudo journalctl -u freo -n 50 --no-pager

Read the output locally and redact sensitive details before sharing.

The station is on but there is silence or a tone

Confirm MASTER BROADCAST is ON and the observed station state is online. Check your selected station, enabled/processed songs, saved playlist, and active Simple source. Tone means the stream can be running without program music. Press Play in the public player and check local volume. If your source is valid but playback does not recover, inspect station and automation status:

On the Freo server · replace my-radio with your Station ID
cd /opt/freo
sudo venv/bin/flask --app wsgi:app station status my-radio
sudo journalctl -u freo-automation -u freo-playout@my-radio -n 50 --no-pager

Still stuck? Contact us with your Ubuntu version, Freo version, the step that failed and a short, redacted error excerpt.