Xtream Codes is the most widely deployed IPTV management panel in the world — and even though the original company was raided in 2019, the panel software (often referred to as Xtream Codes UI v1.x and the various community-maintained forks like XUI.ONE) is still the de facto standard for running an IPTV business. This guide walks you through a clean install of the original Xtream Codes panel on a fresh Ubuntu server.
If you don't already have a license/installer, we recommend looking at XUI.ONE instead — it's actively maintained and similar in feature set. This guide assumes you have a legitimate Xtream Codes installer package.
1. Server requirements
- OS: Ubuntu 18.04 LTS (most stable for the legacy installer) — newer versions need package compatibility patches
- RAM: 4 GB minimum, 8 GB recommended for 100+ concurrent viewers
- CPU: 4 vCPU, dedicated cores preferred (avoid noisy-neighbor VPS providers)
- Disk: 80 GB SSD minimum (catch-up TV/VOD will require much more)
- Bandwidth: 1 Gbps unmetered uplink — IPTV is bandwidth-heavy
- Network: Public IPv4 address, ports 25461/25500 open
2. Pre-install preparation
SSH into your server as root and update the system:
apt update && apt upgrade -y
apt install -y wget curl nano sudo software-properties-common
Set the hostname and timezone:
hostnamectl set-hostname iptv.yourdomain.com
timedatectl set-timezone UTC
Disable IPv6 if your provider has unstable v6 routing (common cause of "stream loads in some apps but not others"):
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
sysctl -p
3. Run the installer
Download the official installer package (you'll receive this with your license):
cd /tmp
wget https://your-installer-url/install.tar.gz
tar -xzf install.tar.gz
cd install
chmod +x install.sh
./install.sh
The installer will prompt you for several values. Recommended answers:
- Server type: Main (for a single-server install) or Load Balancer (for multi-server clusters)
- Admin port: Keep 25500 (default) unless you're behind a corporate firewall
- Client port: Keep 25461 (default)
- MariaDB password: Generate a strong password — save it in your password manager
- Timezone: Match your customer base, not your server
The installer takes 15–25 minutes depending on your server's network speed.
4. License activation
Once installed, navigate to http://your-server-ip:25500. Log in with the default credentials (admin / the password you set during install). The first thing you'll see is the license activation prompt.
Enter your license key. The panel will phone home to verify — this requires outbound HTTPS to be open. If you get a "license server unreachable" error, check:
curl -v https://license-server-url
ufw status
5. Initial database tuning
Out of the box, MariaDB ships with very conservative defaults that bottleneck IPTV panels at ~50 concurrent users. Edit the config:
nano /etc/mysql/my.cnf
Add these settings under [mysqld]:
innodb_buffer_pool_size = 2G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
max_connections = 500
query_cache_size = 64M
tmp_table_size = 128M
max_heap_table_size = 128M
Restart MariaDB:
systemctl restart mariadb
6. Adding your first source & channels
Inside the panel, go to Streams → Add Stream. Pick the source type — most resellers use one of:
- HLS / M3U8: Direct stream URL from supplier
- MPEG-TS UDP: For IPTV multicast feeds (rare)
- RTMP: If your supplier provides RTMP feeds
- Local file: For VOD content stored on disk
Pro tip: don't import 5,000 channels in your first hour. Add 20 test channels, verify they play in IPTV Smarters/TiviMate, then bulk-import the rest. This catches encoding/codec issues before they become a customer support nightmare.
7. SSL certificate
Running an IPTV panel without SSL means customer credentials transmit in plaintext over public networks — a major security and privacy issue. Install Certbot:
apt install -y certbot python3-certbot-nginx
certbot --nginx -d iptv.yourdomain.com
Note: Xtream Codes serves on custom ports, so you'll need a small NGINX reverse proxy to terminate SSL. Our server hardening guide covers the exact NGINX config.
8. Common installation errors
- "License is invalid": Check server time with
date— license verification fails if clock drifts more than 5 minutes - "Cannot connect to MariaDB": Check that MariaDB is running with
systemctl status mariadband that the password in/home/xtreamcodes/iptv_xtream_codes/configmatches - Streams load but immediately disconnect: Almost always a firewall issue — confirm port 25461 is open both inbound and that your panel can reach your source server
- Admin panel returns 502: NGINX is up but PHP-FPM isn't — restart with
systemctl restart php7.0-fpm(or your PHP version)
9. Next steps
After your panel is running, we recommend:
- Hardening the server — fail2ban, UFW, SSH keys, anti-credential-sharing measures
- Calculating real bandwidth needs for your customer count
- Validating your source playlists before importing thousands of channels
- Protecting customer credentials from sniffers and password sharing
If your panel is up but you're seeing freezing or buffering on customer devices, the bottleneck is usually your source, not your panel. A managed restream service sits between your panel and your supplier, smoothing out source instability. Learn more →