> ## Documentation Index
> Fetch the complete documentation index at: https://help.freakhosting.com/llms.txt
> Use this file to discover all available pages before exploring further.

# How to Install Pelican Panel and Wings on a VPS

> Install Pelican Panel and Wings on Ubuntu 24.04: PHP 8.5, Nginx with SSL, the web installer, cron and queue worker, then Docker and Wings for game servers.

To install Pelican Panel on Ubuntu 24.04, install PHP 8.5 with the required extensions, Nginx and Composer, download `panel.tar.gz` to `/var/www/pelican`, run `composer install` and `php artisan p:environment:setup`, then finish in the web installer at `https://panel.example.com/installer`. Add the cron job and `pelican-queue` worker it shows, then install Docker and Wings, which runs the game servers.

| Difficulty | Time | Works on | Needs |
| - | - | - | - |
| Advanced | 45–75 minutes | Ubuntu 22.04 / 24.04, Debian 12 / 13, AlmaLinux / Rocky 10 | Root or sudo access, a KVM VPS or dedicated server, a domain |

FREAKHOSTING also offers managed game servers on its Game Panel if you'd rather not run a panel yourself: see [how to log in to the Game Panel](https://help.freakhosting.com/portals/game-panel/how-to-login-and-access-the-game-panel.md).

## What is Pelican Panel?

Pelican is a free, open-source game server control panel. Its [documentation](https://pelican.dev/docs/comparison) says it started as a fork of Pterodactyl and adds plugins, admin roles, passkeys and a web installer. It has two parts: the **Panel**, the PHP website you log in to, and **Wings**, the daemon that runs each game server in its own Docker container. This guide puts both on one server.

At the time of writing, the latest Panel release on GitHub is `v1.0.0-rc.2`, a release candidate, and Wings is `v1.0.0-rc.1`. Pelican supports only the latest release, so keep both updated. Already running Pterodactyl? Use Pelican's [migration guide](https://pelican.dev/docs/guides/migrating-from-pterodactyl) instead of a fresh install.

## Before you start

* **Use Ubuntu 24.04 on a fresh server.** Nginx takes ports 80 and 443. Commands use `sudo`; root users can leave it out. Prefer Pterodactyl? See [install Pterodactyl Panel](https://help.freakhosting.com/portals/other/how-to-install-pterodactyl-panel-on-a-vps.md).
* **Point a domain** such as `panel.example.com` at the server with an `A` record. See [point a domain to your server](https://help.freakhosting.com/portals/other/how-to-point-a-domain-to-your-server.md). Pelican's docs note that IP addresses can't be used with SSL.
* **Check the virtualisation type.** Run `systemd-detect-virt`. `kvm` or `none` (bare metal) works. Pelican's docs say OpenVZ and LXC usually can't run Wings.
* **Take a snapshot or backup** if the server already holds data. See [schedule and restore backups](https://help.freakhosting.com/portals/vps-panel/how-to-schedule-and-restore-backups.md).

## Step 1: Install PHP, Nginx and Composer

Ubuntu 24.04 ships PHP 8.3, but Pelican needs **PHP 8.5 (recommended) or 8.4**. Pelican's [PHP guide](https://pelican.dev/docs/guides/php-upgrade) uses the `ppa:ondrej/php` repository:

```bash theme={null}
sudo apt update
sudo apt -y install software-properties-common curl tar unzip nginx
sudo add-apt-repository -y ppa:ondrej/php
sudo apt update
sudo apt -y install php8.5 php8.5-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,sqlite3,fpm}
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
```

These are the extensions Pelican requires. The web installer checks them again.

## Step 2: Download the panel

```bash theme={null}
sudo mkdir -p /var/www/pelican
cd /var/www/pelican
curl -L https://github.com/pelican/panel/releases/latest/download/panel.tar.gz | sudo tar -xzv
sudo COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --optimize-autoloader
```

> [!NOTE]
>
> Don't run `composer update`, even if Composer says dependencies are outdated. Pelican's docs warn against it.

## Step 3: Create the environment and set permissions

**1. Create the .env file and app key**

```bash theme={null}
sudo php artisan p:environment:setup
```

This creates `.env` and generates `APP_KEY` if they don't exist.

**2. Back up APP\_KEY**

```bash theme={null}
sudo grep APP_KEY /var/www/pelican/.env
```

Store the line off the server, for example in a password manager. Without it, encrypted data such as API keys can't be recovered, even from a database backup.

**3. Set permissions**

```bash theme={null}
sudo chmod -R 755 storage/* bootstrap/cache/
sudo chown -R www-data:www-data /var/www/pelican
```

## Step 4: Set up Nginx with HTTPS

**1. Get a certificate**

```bash theme={null}
sudo apt -y install python3-certbot-nginx
sudo certbot certonly --nginx -d panel.example.com
```

See [get a free SSL certificate with Certbot](https://help.freakhosting.com/portals/other/how-to-get-a-free-ssl-certificate-with-certbot.md) if this fails.

**2. Create the site**

Remove the default site with `sudo rm /etc/nginx/sites-enabled/default`. Copy the **Nginx https** configuration from [Pelican's webserver page](https://pelican.dev/docs/panel/webserver-config) into `/etc/nginx/sites-available/pelican.conf` and replace every `<domain>` with `panel.example.com`. It sets `root /var/www/pelican/public`, passes PHP to `unix:/run/php/php8.5-fpm.sock` and loads the certificate from `/etc/letsencrypt/live/panel.example.com/`.

**3. Fix the HTTP/2 line on Ubuntu 24.04**

Ubuntu 24.04 ships Nginx 1.24, which doesn't know the `http2 on;` directive in Pelican's file ([added in Nginx 1.25.1](https://nginx.org/en/docs/http/ngx_http_v2_module.html#http2)). Delete the `http2 on;` line and change the listen line to:

```nginx theme={null}
listen 443 ssl http2;
```

**4. Enable it**

```bash theme={null}
sudo ln -s /etc/nginx/sites-available/pelican.conf /etc/nginx/sites-enabled/pelican.conf
sudo nginx -t
sudo systemctl restart nginx
```

## Step 5: Run the web installer

Open `https://panel.example.com/installer`. The wizard checks requirements, then asks for:

* **Environment**: the panel name, the URL (`https://panel.example.com`) and your admin user.
* **Database**: SQLite is the installer's recommendation. For MySQL or MariaDB, read Pelican's [MySQL guide](https://pelican.dev/docs/panel/advanced/mysql) first.
* **Eggs**: the game templates to install.
* **Cache**, **Queue** and **Session** drivers: the installer recommends **Filesystem**, **Database** and **Filesystem** or **Database**, none of which need Redis.

On the **Queue** step, run the two commands it shows before you tick **I have done both steps below**:

```bash theme={null}
(sudo crontab -l -u www-data 2>/dev/null; echo "* * * * * php /var/www/pelican/artisan schedule:run >> /dev/null 2>&1") | sudo crontab -u www-data -
sudo php /var/www/pelican/artisan p:environment:queue-service
```

The second command creates and starts the `pelican-queue` systemd service. Click **Finish** to log in.

## Step 6: Install Docker and Wings

**1. Install Docker**

Follow [install Docker](https://help.freakhosting.com/portals/other/how-to-install-docker.md). Wings needs Docker CE.

**2. Download Wings**

```bash theme={null}
sudo mkdir -p /etc/pelican /var/run/wings
sudo curl -L -o /usr/local/bin/wings "https://github.com/pelican/wings/releases/latest/download/wings_linux_$([[ "$(uname -m)" == "x86_64" ]] && echo "amd64" || echo "arm64")"
sudo chmod u+x /usr/local/bin/wings
```

**3. Create a node**

In the admin area (`https://panel.example.com/admin`), open **Nodes** and create a node. Use `panel.example.com` as the **Domain Name**, so Wings uses the same certificate. Keep SSL on (it's required when the panel uses HTTPS), the port `8080` and the **SFTP Port** `2022`.

**4. Add the configuration**

Open the node's **Configuration File** tab and paste its contents into `/etc/pelican/config.yml`, or copy the **Auto Deploy Command** and run it.

**5. Test Wings**

```bash theme={null}
sudo wings --debug
```

The first start can take a few minutes. When it runs without errors, stop it with **Ctrl+C**.

**6. Run Wings as a service**

Create `/etc/systemd/system/wings.service`:

```ini theme={null}
[Unit]
Description=Wings Daemon
After=docker.service
Requires=docker.service
PartOf=docker.service

[Service]
User=root
WorkingDirectory=/etc/pelican
LimitNOFILE=4096
PIDFile=/var/run/wings/daemon.pid
ExecStart=/usr/local/bin/wings
Restart=on-failure
StartLimitInterval=180
StartLimitBurst=30
RestartSec=5s

[Install]
WantedBy=multi-user.target
```

```bash theme={null}
sudo systemctl enable --now wings
```

**7. Add allocations**

Allocations are the IP and port pairs game servers use. On the node's **Allocations** tab, click **Create Allocation**, pick your public IP (for example `203.0.113.10`) and enter ports such as `25565-25570`.

## Which ports to open

| Port | Used for |
| - | - |
| 80/TCP, 443/TCP | Panel website and certificate renewal |
| 8080/TCP | Wings API (the panel and your browser connect to it) |
| 2022/TCP | SFTP to game server files |
| Your allocations | Game ports, TCP and/or UDP as the game needs |

```bash theme={null}
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw allow 8080/tcp
sudo ufw allow 2022/tcp
sudo ufw allow 25565:25570/tcp
sudo ufw enable
```

> [!WARNING]
>
> Allow SSH before you run `ufw enable`, or you lock yourself out. If that happens, use the [VNC console](https://help.freakhosting.com/portals/vps-panel/how-to-enable-and-use-vnc-console-access.md). See [set up a firewall with UFW](https://help.freakhosting.com/portals/other/how-to-set-up-a-firewall-with-ufw.md).

Certbot renews the certificate automatically, but Wings only loads a new one on restart. Pelican's [SSL guide](https://pelican.dev/docs/guides/ssl) adds this line with `sudo crontab -e`:

```bash theme={null}
0 23 * * * certbot renew --quiet --deploy-hook "systemctl restart nginx wings"
```

## How to check it worked

```bash theme={null}
systemctl status pelican-queue wings --no-pager
```

Both show `active (running)`. When Wings is reachable, `https://panel.example.com:8080` returns `{"error" : "The required authorization heads were not present in the request."}` in a browser. A test server created under **Servers** installs and starts.

## Frequently asked questions

### Why does my node show as unreachable?

The panel or your browser can't reach Wings. Check `systemctl status wings`, that port 8080 is open, and that the node domain has a valid certificate when the panel uses HTTPS.

### Why are schedules stuck on Processing?

The queue worker or cron job isn't running. Check `systemctl status pelican-queue` and `sudo crontab -l -u www-data`. Recreate the service with `sudo php /var/www/pelican/artisan p:environment:queue-service --overwrite`.

### Can Wings run on a different server from the panel?

Yes. Install only Docker and Wings on the second server, create a node for it with its own domain and certificate, and open ports 8080, 2022 and its allocations there.

## Related guides

> [card] [VPS and dedicated server guides](https://help.freakhosting.com/portals/other/vps-and-dedicated-server-guides.md)
>
> Every guide in this section.

> [card] [Install Pterodactyl Panel](https://help.freakhosting.com/portals/other/how-to-install-pterodactyl-panel-on-a-vps.md)
>
> The panel Pelican was forked from.

> [card] [Install Docker](https://help.freakhosting.com/portals/other/how-to-install-docker.md)
>
> Wings needs Docker CE.

> [card] [Get a free SSL certificate](https://help.freakhosting.com/portals/other/how-to-get-a-free-ssl-certificate-with-certbot.md)
>
> Certbot and automatic renewal.

> [card] [Set up a firewall with UFW](https://help.freakhosting.com/portals/other/how-to-set-up-a-firewall-with-ufw.md)
>
> Open only the ports you use.

> [card] [Host game servers with LinuxGSM](https://help.freakhosting.com/portals/other/how-to-host-game-servers-with-linuxgsm.md)
>
> A lighter, command-line option.

***

> [!NOTE]
>
> **Checked against the official [Pelican documentation](https://pelican.dev/docs/panel/getting-started) and the [Pelican Panel](https://github.com/pelican/panel) and [Wings](https://github.com/pelican/wings) source** on 5 November 2026; Nginx configuration syntax-tested and Wings service file verified on Ubuntu 24.04 LTS. Commands can differ on other distributions or releases.

> [!NOTE]
>
> ### Need Extra Help?
>
> If you encounter any issues, our support team is ready to assist:
>
> * **Live Chat:** Quick assistance via our website.
> * **Support Ticket:** [Open a Ticket](https://freakhosting.com/clientarea/submitticket.php)
> * **Discord:** [Join our Community](https://discord.gg/freakhosting)
> * **Email:** [support@freakhosting.com](mailto:support@freakhosting.com)

> [!TIP]
>
> ### Save on Your Hosting
>
> Ready to upgrade your hosting? Use code **KB20** at checkout for **20% off** your first order!

***

**Last Updated:** November 2026


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.