-
Notifications
You must be signed in to change notification settings - Fork 397
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
svenja11
merged 4 commits into
hetzneronline:master
from
PhilCode-creator:pelican-panel
Jun 12, 2025
Merged
Changes from 3 commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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: [submitter's name and email address here] | ||
|
||
--> |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.