Skip to content

Binary Wings Installation ​

Install a Container Runtime ​

Wings requires Docker or Podman to be installed and running on the host to manage game server containers.

Verify your installation:

bash
docker --version

If Docker is not installed, the easiest way to get it is Docker's installation script:

bash
curl -sSL https://get.docker.com/ | CHANNEL=stable bash

Otherwise refer to the official Docker installation guide for your distribution.

Install the Wings Binary ​

bash
curl -L "https://github.com/calagopus/wings/releases/latest/download/wings-rs-$(uname -m)-linux" -o /usr/local/bin/wings
chmod +x /usr/local/bin/wings

Verify the installation:

bash
wings version

Configure Wings ​

On a fresh installation, Wings starts in setup mode when no configuration file exists. You can start it in the foreground:

bash
wings

Read the pairing code printed in the terminal, then follow Pair a Waiting Node in the Panel. Keep Wings running while you pair it; it writes its configuration and starts normal operation when pairing succeeds.

To create the node entry first, use the Panel's enrollment command, or apply the generated YAML or configure --join-data command. Existing configurations continue to load normally.

Install as a Service ​

Stop any foreground Wings process with Ctrl+C before starting the service:

bash
wings service-install

The installer creates, enables, and starts a service for the host's init system. An unconfigured installation starts in setup mode; a configured one starts normal operation. On systemd, check its status and read the pairing code with:

bash
systemctl status wings
journalctl -u wings -n 50 --no-pager

On Alpine/OpenRC, check it with rc-service wings status; if the pairing code is not visible in service logs, configure it using the enrollment command before starting the service.

Optional LXCFS ​

LXCFS makes selected /proc and /sys files inside server containers reflect their resource limits. It runs as a separate service on the container host; Wings bind-mounts its files read-only into game server containers. Installer containers do not use these mounts.

Install your distribution's lxcfs package first. To create a dedicated service, run as root:

bash
wings service-install --lxcfs

This installs, enables, and starts wings-lxcfs using systemd or OpenRC, with CPU quota awareness (--enable-cfs). It installs the lxcfs service only; install the Wings service separately as shown above. If you use a custom Wings configuration path, pass it with wings --config /path/to/config.yml service-install --lxcfs.

When a Wings configuration is loaded, the command saves:

yaml
docker:
  lxcfs:
    enabled: true
    directory: /var/lib/calagopus-wings/lxcfs

Without a loaded configuration, add these settings once Wings has been configured. Restart Wings, then restart each server to recreate its container with the mounts. On systemd, check the separate service with systemctl status wings-lxcfs; on OpenRC, use rc-service wings-lxcfs status.

You can also use an existing host lxcfs service: enable docker.lxcfs.enabled and set docker.lxcfs.directory to its mount directory, usually /var/lib/lxcfs. That is the configuration default, which differs from the dedicated service's path. Set the directory in the local Wings config; the Panel cannot change it.

If lxcfs stops, existing containers can report Transport endpoint is not connected when reading its files. Restore the lxcfs service, then restart affected servers to remount it. Restarting Wings alone does not repair those mounts. When native Wings cannot find a valid lxcfs mount during container creation, it logs a warning and continues without the integration.

Next Steps ​

With Wings running, the next step is to set up allocations - the IP and port combinations you can assign to servers. See Setting up Allocations.