Installing Cyrus Daemon
The Cyrus Panel Daemon runs directly on your host nodes. It handles container lifecycles via Docker, monitors resource utilization, executes server commands, and manages file systems.
System Requirements
- Operating System: 64-bit Linux (Ubuntu 20.04+, Debian 11+, AlmaLinux 8+, Rocky Linux 8+, or Arch Linux).
- Architecture:
x86_64(64-bit). - Container Runtime: Docker CE.
- Kernel: Modern Linux kernel with virtualization support.
- SSL/HTTPS: All daemon-to-panel communication requires valid SSL certificates or a secure tunnel.
Step 1: Install Docker
The daemon requires Docker to deploy and manage isolated game server containers.
Install Docker using the official automated script:
curl -sSL https://get.docker.com/ | CHANNEL=stable bash
Enable and start the Docker service:
sudo systemctl enable --now docker
Step 2: Download Cyrus Daemon
- Create the configuration directory for Cyrus Daemon:
sudo mkdir -p /etc/cyruspanel
- Download the latest compiled 64-bit binary to your
/usr/local/bindirectory:
sudo curl -L -o /usr/local/bin/cyrus-daemon "https://github.com/HasenDev/cyrus-daemon/releases/latest/download/cyrus-daemon"
- Make the binary executable:
sudo chmod +x /usr/local/bin/cyrus-daemon
Step 3: Create the Node on Cyrus Panel
Before configuring the daemon on your server, register it in your panel:
- Log into your Cyrus Panel as an Administrator.
- If you have not created a Location yet:
- Go to Locations in the admin sidebar.
- Click Add Location, provide a name (e.g.
US-East/Virginia), Select its flag and save it.
- In the admin sidebar, navigate to Nodes.
- Click Create New Node and fill in the required fields:
- Name: A descriptive name for the node (e.g.
Node-01). - Location: Select the location you created.
- FQDN / Domain: The fully qualified domain name pointing to this node (e.g.
node1.example.com). - Daemon Port: The port the daemon listens on (default is
8080).
- Name: A descriptive name for the node (e.g.
- Click Create Node.
Step 4: Auto-Deploy Node Configuration
- On the node overview page in the panel, click the Auto-Deploy Token button.
- Copy the generated deployment command, which will look similar to this:
sudo cyrus-daemon configure --panel-url https://cyrus.example.com --token 616a9761563e7aa68bed7a1479799c0ee2471f3c17360113
- Run this command on your node server. This automatically generates
/etc/cyruspanel/config.jsonwith the required node tokens and credentials.
Step 5: Configure SSL & Networking
Cyrus Panel enforces HTTPS communication. Choose one of the following methods to establish a secure connection:
Option A: Cloudflare Tunnels (Recommended / DDoS Protected)
Cloudflare Tunnels hide your node's public IP address, protecting it from direct-to-IP DDoS attacks while providing automatic SSL.
- Install
cloudflaredon your node server and create a tunnel via the Cloudflare Zero Trust Dashboard (Networks → Tunnels). - When creating the tunnel, In the Add a published application for... step, Set the values:
- Hostname: Enter your node subdomain and select your domain.
- Service Type:
HTTP - URL:
localhost:8080(or the daemon port configured in your setup).
- Disable SSL verification in
/etc/cyruspanel/config.json(since Cloudflare terminates SSL):
sudo nano /etc/cyruspanel/config.json
Set ssl.enabled to false:
{
"api": {
"host": "0.0.0.0",
"port": 8080,
"ssl": {
"enabled": false
},
"upload_limit": 100
}
}
- Go back to your Cyrus Panel → Nodes → select your node → Settings:
- Set FQDN to your Cloudflare Tunnel hostname (e.g.
node1.example.com). - Set Daemon Port to
443(Cloudflare's HTTPS port). - Save changes.
- Set FQDN to your Cloudflare Tunnel hostname (e.g.
Option B: Direct SSL with Let's Encrypt (Certbot)
If you are not using Cloudflare Tunnels, point a DNS A Record (DNS-only / unproxied) directly to your node's public IP.
- Install Certbot on your node:
sudo apt install -y certbot # Debian/Ubuntu
# or
sudo dnf install -y certbot # RHEL/Rocky Linux
- Generate a standalone certificate (make sure port
80is temporarily open):
sudo certbot certonly --standalone -d node1.example.com
- Edit
/etc/cyruspanel/config.json:
sudo nano /etc/cyruspanel/config.json
Configure the api.ssl block with your certificate paths:
{
"api": {
"ssl": {
"enabled": true,
"cert": "/etc/letsencrypt/live/node1.example.com/fullchain.pem",
"key": "/etc/letsencrypt/live/node1.example.com/privkey.pem"
},
}
}
Ensure the paths pointing to fullchain.pem and privkey.pem are valid and accessible. If the files are missing or unreadable, the daemon will automatically fallback to non-SSL mode.
Step 6: Create a Systemd Service
Create a systemd service file to keep Cyrus Daemon running in the background and start automatically on system boot.
- Create the service unit file:
sudo nano /etc/systemd/system/cyrus-daemon.service
- Paste the following configuration:
[Unit]
Description=Cyrus Panel Daemon
After=docker.service
Requires=docker.service
PartOf=docker.service
[Service]
User=root
WorkingDirectory=/etc/cyruspanel
LimitNOFILE=4096
PIDFile=/var/run/cyrus-daemon/daemon.pid
ExecStart=/usr/local/bin/cyrus-daemon start
Restart=on-failure
StartLimitInterval=180
StartLimitBurst=30
RestartSec=5s
[Install]
WantedBy=multi-user.target
- Reload systemd, enable the service, and start the daemon:
sudo systemctl daemon-reload
sudo systemctl enable --now cyrus-daemon
Step 7: Verify Status
Check the status of your daemon service to confirm it is active and running:
sudo systemctl status cyrus-daemon
You can view real-time daemon logs at any time using:
sudo journalctl -u cyrus-daemon -f
Your node should now display a green connected status inside Cyrus Panel!