Skip to main content

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

  1. Create the configuration directory for Cyrus Daemon:
sudo mkdir -p /etc/cyruspanel
  1. Download the latest compiled 64-bit binary to your /usr/local/bin directory:
sudo curl -L -o /usr/local/bin/cyrus-daemon "https://github.com/HasenDev/cyrus-daemon/releases/latest/download/cyrus-daemon"
  1. 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:

  1. Log into your Cyrus Panel as an Administrator.
  2. 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.
  3. In the admin sidebar, navigate to Nodes.
  4. 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).
  5. Click Create Node.

Step 4: Auto-Deploy Node Configuration

  1. On the node overview page in the panel, click the Auto-Deploy Token button.
  2. Copy the generated deployment command, which will look similar to this:
sudo cyrus-daemon configure --panel-url https://cyrus.example.com --token 616a9761563e7aa68bed7a1479799c0ee2471f3c17360113
  1. Run this command on your node server. This automatically generates /etc/cyruspanel/config.json with 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:

Cloudflare Tunnels hide your node's public IP address, protecting it from direct-to-IP DDoS attacks while providing automatic SSL.

  1. Install cloudflared on your node server and create a tunnel via the Cloudflare Zero Trust Dashboard (NetworksTunnels).
  2. 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).
  3. 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
}
}
  1. Go back to your Cyrus PanelNodes → 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.

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.

  1. Install Certbot on your node:
sudo apt install -y certbot # Debian/Ubuntu
# or
sudo dnf install -y certbot # RHEL/Rocky Linux
  1. Generate a standalone certificate (make sure port 80 is temporarily open):
sudo certbot certonly --standalone -d node1.example.com
  1. 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"
},
}
}
Valid Certificate Paths

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.

  1. Create the service unit file:
sudo nano /etc/systemd/system/cyrus-daemon.service
  1. 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
  1. 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!