Panel-Verbindung
Panel & site setup
The panel is the web interface where you manage bans, detections, the live player list and anti-cheat settings. There are two ways to run it.
Choose your model
| Model | How it works | Best for |
|---|---|---|
| Hosted (recommended) | We run the panel for you. You get yoursite.{{PANEL_DOMAIN}}, and can attach your own domain. | Most servers. Setup, updates, SSL and backups are handled. |
| Self-hosted | You install the panel on your own web server. | Full control, corporate requirements. |
Hosted panel — 4 steps
- Create an account and pick a plan
- Add a server — Panel → Servers → "Add Server". Name and IP are enough.
- Get your license key — generated automatically when the server is added. The anti-cheat authenticates with it.
- Install the anti-cheat — installation guide
Once connected, your server turns green under Panel → AC → Live.
Attaching your own domain
Add it under Panel → Settings → Custom Domain, then create this DNS record:
Type : CNAME
Name : panel (for panel.yourdomain.com)
Value : {{PANEL_DOMAIN}}
TTL : 3600
DNS propagation takes anywhere from 5 minutes to a few hours. The SSL certificate is issued automatically once validation completes — nothing for you to do.
Self-hosted installation
Requirements
| Component | Version | Notes |
|---|---|---|
| PHP | 8.1+ | Extensions: pdo_mysql, openssl, zip, curl, mbstring |
| Web server | Nginx / Apache | Nginx recommended |
| MySQL / MariaDB | 10.4+ | Database guide |
| SSL certificate | — | Let's Encrypt is free |
1. Place the files
cd /var/www
# Extract the panel package here
chown -R www-data:www-data /var/www/panel
find /var/www/panel -type d -exec chmod 755 {} \;
find /var/www/panel -type f -exec chmod 644 {} \;
2. Configuration
Create .env:
SAAS_DB_HOST=localhost
SAAS_DB_NAME=panel_db
SAAS_DB_USER=panel_user
SAAS_DB_PASS=strong_password
SAAS_MAIN_DOMAIN=yourdomain.com
# Email (verification and notifications)
SMTP_HOST=smtp.yourprovider.com
SMTP_PORT=587
SMTP_USER=noreply@yourdomain.com
SMTP_PASS=password
chmod 640 .env
chown root:www-data .env
.env contains the database password. It must never be reachable over the web — the Nginx config below blocks it. After installing, visit https://yoursite/.env and confirm you get a 403.
3. Database schema
mysql -u panel_user -p panel_db < install/saas_schema.sql
mysql -u panel_user -p panel_db < install/saas_v9_missing_tables.sql
mysql -u panel_user -p panel_db < install/ac_migration.sql
4. Nginx configuration
server {
listen 443 ssl http2;
server_name yourdomain.com;
root /var/www/panel;
index index.php;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
location / {
try_files $uri $uri/ /public/router.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# ── SECURITY: without these, your source and secrets leak ──
location ~ ^/\.env { deny all; }
location ~ /\. { deny all; }
location ~* \.(bak|drivebak|old|orig|save|swp|sql|log|tmp)(\.|$) { deny all; }
location ~ ^/(includes|install|cronjobs|deploy|tools|scripts|storage)/ { deny all; }
}
.env, backup files (*.bak) and PHP source can be downloaded as plain text. Test after installing:
curl -o /dev/null -w "%{http_code}\n" https://yoursite/.env
curl -o /dev/null -w "%{http_code}\n" https://yoursite/includes/db.php
# Both must return 403
5. SSL certificate
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
Certbot sets up auto-renewal. Verify with sudo certbot renew --dry-run.
6. Scheduled tasks
crontab -e
*/5 * * * * php /var/www/panel/cronjobs/server_heartbeat.php
0 3 * * * php /var/www/panel/cronjobs/backup_db.php
0 4 * * * php /var/www/panel/cronjobs/data_retention.php
0 * * * * php /var/www/panel/cronjobs/billing_cycle.php
7. Setup wizard
Visit https://yourdomain.com/setup.php. The wizard validates the database connection and creates your first administrator account.
setup.php or block access to it. Left open, anyone could re-run setup and create an administrator account.
How the anti-cheat ↔ panel link works
The connection is bidirectional and fully automatic:
| Direction | What flows | Frequency |
|---|---|---|
| AC → Panel | Detections, bans, online players, server status | Instant (event-driven) |
| Panel → AC | Setting changes, black/whitelists, admin grants | ~30 seconds |
So when you change a setting in the panel, there's no need to restart the server — it applies within half a minute.
If the connection doesn't come up
| Check | Command / location |
|---|---|
| License key correct | configs/anticheat_config.lua → ts.webPanelKey |
| Panel reachable | From the FiveM server: curl -I https://your-panel/ |
| Firewall blocking | The FiveM server must be able to reach port 443 outbound |
| Panel logs | Panel → System Logs |
| AC side | [Tosun AC] lines in the server console |