Skip to content

New Tutorial - Pelican Gameserver Panel #1162

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jun 12, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
325 changes: 325 additions & 0 deletions tutorials/game-panel-pelican/01.en.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,325 @@
---
SPDX-License-Identifier: MIT
path: "/tutorials/game-panel-pelican"
slug: "game-panel-pelican"
date: "2025-06-12"
title: "Installing Pelican Panel on Ubuntu"
short_description: "Set up Pelican Panel with PHP, MySQL, Docker, NGINX, and SSL on a server."
tags: ["Ubuntu", "Pelican", "Game Server", "Docker", "NGINX"]
author: "Philipp Bornträger"
author_link: "https://github.com/PhilCode-creator"
author_img: "https://avatars.githubusercontent.com/u/55019948"
author_description: ""
language: "en"
available_languages: ["en"]
header_img: "header-7"
cta: "cloud"
---

## Introduction

⚠️ **Note:** This tutorial only installs the **web interface** of Pelican Panel.
To provision and manage actual game servers, you **must also install [Wings](https://pelican.dev/docs/wings/install)** on your target machines.

Pelican Panel is a modern, open-source game server management panel designed for containerized environments. Built with Laravel and Docker, it provides a powerful web interface for deploying and managing game servers.

This guide explains how to install and configure Pelican Panel on a server running Ubuntu 24.04.

**Prerequisites**

* A server with Ubuntu 24.04
* Root or sudo privileges
* A registered domain name pointing to the server’s IP address
* Basic familiarity with Linux command-line operations

**Example terminology**

* Username: `holu`
* Domain: `example.com`

## Step 1 - Update the System

Start by updating your package index and upgrading any existing packages:

```bash
sudo apt update && sudo apt upgrade -y
```

This ensures compatibility and applies security patches.

## Step 2 - Install Required Software

* **Add the PHP Repository**

Add the `ondrej/php` PPA to access PHP 8.2 and related extensions:
```bash
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
```

<br>

* **Install Required Packages**

Install NGINX, MySQL, PHP 8.2, and supporting modules required by Laravel:
```bash
sudo apt install -y \
nginx mysql-server sqlite3 \
php8.2 php8.2-cli php8.2-common php8.2-mysql php8.2-sqlite3 php8.2-fpm \
php8.2-mbstring php8.2-xml php8.2-bcmath php8.2-curl php8.2-zip php8.2-gd php8.2-intl \
curl git unzip software-properties-common
```

## Step 3 - Configure MySQL

Secure the database server:

```bash
sudo mysql_secure_installation
```

Then create a database and user for Pelican:

```bash
sudo mysql -u root -p
```

Inside the MySQL shell:

> Replace `YourSecurePassword` with a strong, unique password. You can generate one using `openssl rand -base64 20`.

```sql
CREATE DATABASE pelican;
CREATE USER 'pelicanuser'@'localhost' IDENTIFIED BY 'YourSecurePassword';
GRANT ALL PRIVILEGES ON pelican.* TO 'pelicanuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
```

## Step 4 - Install Docker

Pelican uses Docker to isolate game environments. Install Docker Engine and its dependencies as explained in the official Docker documentation:

* [Install Docker Engine on Ubuntu](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository)

Enable and start the Docker service:

```bash
sudo systemctl enable docker
sudo systemctl start docker
```

Optionally, add your user to the Docker group:

> Replace `holu` with your actual username.

```bash
sudo usermod -aG docker holu
```

You may need to log out and back in for changes to take effect.

## Step 5 - Install Composer

Composer is used to manage PHP dependencies. Install it globally:

```bash
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
```

## Step 6 - Download and Install Pelican Panel

Create a directory and extract the panel files:

```bash
sudo mkdir -p /var/www/pelican
cd /var/www/pelican
curl -L https://github.com/pelican-dev/panel/releases/latest/download/panel.tar.gz | sudo tar -xzv
```

Install PHP dependencies:

```bash
sudo chown -R $USER:www-data /var/www/pelican
sudo chmod -R 775 /var/www/pelican
composer install --no-dev --optimize-autoloader
```

## Step 7 - Configure the Application

Pelican provides an setup command:

```bash
php artisan p:environment:setup
```

## Step 8 - Set Permissions

Ensure proper ownership and access permissions for Laravel to function correctly:

```bash
sudo chown -R www-data:www-data /var/www/pelican
sudo chmod -R 755 /var/www/pelican/storage /var/www/pelican/bootstrap/cache
```

Secure the environment file:

```bash
sudo chmod 640 /var/www/pelican/.env
```

## Step 9 - Configure SSL with Certbot

Install Certbot via Snap to enable HTTPS:

```bash
sudo apt install snapd -y
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
```

Obtain an SSL certificate for your domain:

```bash
sudo certbot --nginx -d example.com
```

Enable automatic certificate renewal:

```bash
sudo systemctl enable snap.certbot.renew.timer
sudo certbot renew --dry-run
```

## Step 10 - Configure NGINX

Remove the default configuration:

```bash
sudo rm /etc/nginx/sites-enabled/default
```

Create a new configuration file:

```bash
sudo nano /etc/nginx/sites-available/pelican.conf
```

Paste the following, replacing `example.com` accordingly:

```nginx
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl;
server_name example.com;

root /var/www/pelican/public;
index index.php;

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

location / {
try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}

location ~ /\.ht {
deny all;
}
}
```

Enable the site and restart NGINX:

```bash
sudo ln -s /etc/nginx/sites-available/pelican.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
```

## Step 11 - Complete the Web Installer

Navigate to your domain in a browser:

```
https://example.com/installer
```

Follow the on-screen prompts to create an administrator account and complete the setup.

When it asks about the database information, use the information from step 3. In this example, we used:

* Database Driver: MySQL
* Database Name: pelican
* Database Username: pelicanuser
* Database Password: YourSecurePassword'

## Conclusion

* Ensure the following services are active and enabled:

```bash
sudo systemctl status nginx
sudo systemctl status php8.2-fpm
sudo systemctl status docker
```

* Consider securing your server with UFW:

```bash
sudo apt install ufw
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
```

* Keep your system and Pelican Panel updated to receive security patches and new features.

#### References

* [Pelican Panel Documentation](https://pelican.dev/docs)
* [Certbot Documentation](https://certbot.eff.org/)

##### License: MIT

<!--

Contributor's Certificate of Origin

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I have
the right to submit it under the license indicated in the file; or

(b) The contribution is based upon previous work that, to the best of my
knowledge, is covered under an appropriate license and I have the
right under that license to submit that work with modifications,
whether created in whole or in part by me, under the same license
(unless I am permitted to submit under a different license), as
indicated in the file; or

(c) The contribution was provided directly to me by some other person
who certified (a), (b) or (c) and I have not modified it.

(d) I understand and agree that this project and the contribution are
public and that a record of the contribution (including all personal
information I submit with it, including my sign-off) is maintained
indefinitely and may be redistributed consistent with this project
or the license(s) involved.

Signed-off-by: Philipp Bornträger <heydraundphilipp@gmail.com>

-->