A Gamers Grind / XFGN / LM
Status
  • 🖥️www.agamersgrind.com
  • 🏙️--- Public Files ---
    • 👋Welcome, friends
    • ⛑️I need help!
    • ☕Buy me a Coffee
  • 📚Guides
    • Mini Guides
      • Valheim FPS Boost
      • Redirect domain to Google Site
      • Docker Compose
        • 'All' Compose File
        • Add Health Check to Container
        • Mount NFS Share to Container
        • Map hostname to container
    • Portainer and GitOps
      • Set up GitHub
      • Install Portainer
      • Create your first GipOps Compose file
      • Deploy your first GitOps stack
      • Managing your production compose files
    • Cloudflare
      • Domains
      • Generate an API Key
      • Tunnel
        • Create a Tunnel
        • Create a Proxy (Public Hostname)
        • Access Groups & Authentication
      • Dynamic DNS
    • Pterodactyl
      • Creating a new Panel
      • Creating a new Wings node
      • Join servers via domain
      • Configuring your Node Database
      • Server Best Practices & Suggestions
      • Troubleshooting
  • 🎮Game Servers
    • Valheim Public
    • Valheim Private
    • MultiMC (Minecraft)
    • CreateCraft (Minecraft)
    • Insurgency Sandstorm
  • ⚔️AGG Moderation
    • ❔Creating a new Server
    • Approving Valheim Application
  • 🗄️Internal Documentation
Powered by GitBook
On this page
  • Installing the Panel
  • Setting up the Portainer stack
  • Confirm the Panel is running
  • Create your Admin user
  • Configure the Panel
  • Enforce 2FA
  • Create Node Locations
  • Set up your Proxy

Was this helpful?

  1. Guides
  2. Pterodactyl

Creating a new Panel

PreviousPterodactylNextCreating a new Wings node

Last updated 1 year ago

Was this helpful?

Installing the Panel

Setting up the Portainer stack

Create your Portainer stack using the below compose and .env file

I would recommend deploying GitOps as this will shift your compose file off of your server and into GitHub.

.ENV File
MYSQL_PASS_ROOT=
PORT_HTTP=
MAIL_FROM=
MAIL_SERVER=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=youremail@gmail.com
MAIL_PASS=
PTERO_PANEL_URL=https://panel.example.com #your cloudflare subdomain
TZ=
HASHIDS_SALT= #This MUST be a 20 character string, per https://github.com/pterodactyl/panel/issues/5012#issuecomment-1960789655

Confirm the Panel is running

Check the Portainer logs for the panel container, you should see something similar to below

external vars exist.
Checking if https is required.
Checking if letsencrypt email is set.
No letsencrypt email is set using http config.
Removing the default nginx config
Checking database status.
Waiting for database connection...
database (172.28.0.3:3306) open
Migrating and Seeding D.B
   INFO  Nothing to migrate.  
   INFO  Seeding database.  
  Database\Seeders\NestSeeder ........................................ RUNNING  
  Database\Seeders\NestSeeder ................................... 2.34 ms DONE  
  Database\Seeders\EggSeeder ......................................... RUNNING  
*********************************************
*     Updating Eggs for Nest: Minecraft     *
*********************************************
Updated Paper
Updated Bungeecord
Updated Vanilla Minecraft
Updated Sponge (SpongeVanilla)
Updated Forge Minecraft
*************************************************
*     Updating Eggs for Nest: Source Engine     *
*************************************************
Updated Counter-Strike: Global Offensive
Updated Garrys Mod
Updated Team Fortress 2
Updated Ark: Survival Evolved
Updated Insurgency
Updated Custom Source Engine Game
*************************************************
*     Updating Eggs for Nest: Voice Servers     *
*************************************************
Updated Teamspeak3 Server
Updated Mumble Server
****************************************
*     Updating Eggs for Nest: Rust     *
****************************************

Updated Rust
  Database\Seeders\EggSeeder .................................. 175.67 ms DONE  
Starting cron jobs.
Starting supervisord.
2023-06-13 13:41:50,854 CRIT Server 'unix_http_server' running without any HTTP authentication checking

Confirm the Login page loads

Browse to http://yourserver:port and confirm you see the below

Create your Admin user

  1. Open up Portainer and navigate to the Panel container

  2. Click on Console and change the command to '/bin/sh'

  3. Hit Connect

  4. Input the below command and next through the prompts (set account as administrator)

php artisan p:user:make
  1. Log into Pterodactyl with your newly created administrator account

Configure the Panel

Enforce 2FA

  1. Click on the Settings cog in the top right hand corner

  2. Click on Settings

  3. Set 'Require 2FA authentication' to 'All Users' and hit Save

  4. Click on 'Enable 2FA' and follow the steps

  5. Save your backup codes somewhere

Create Node Locations

  1. Click on Locations, then 'create new'

  2. Create 2 locations,

    1. a location for 'On Prem' nodes

    2. a location for 'Off Prem' nodes

Set up your Proxy

    • Your subdomain and domain needs to match the PTERO_PANEL_URL variable set above

    • Type is HTTP, pointing at yourserver:port

  1. navigate to your proxy url and confirm you see the login page

Refer to the and guides

📚
Cloudflare Proxy
Authentication

Time Required

30 Minutes

Difficulty

Moderate

(have a look at the this guide)
https://github.com/trentnbauer/agg/blob/main/docker-compose/pterodactyl-panel.yml
version: '3.8'

services:

  database:

    image: mariadb:10.11

    restart: always

    command: --default-authentication-plugin=mysql_native_password

    volumes:

      - db:/var/lib/mysql

      - dbetc:/etc/mysql

    networks:

      - panel

    environment:

      MYSQL_PASSWORD: $MYSQL_PASS

      MYSQL_ROOT_PASSWORD: $MYSQL_PASS_ROOT

      MYSQL_DATABASE: "panel"

      MYSQL_USER: "pterodactyl"

    healthcheck:

      test: ["CMD", "mariadb-admin", "ping", "-proot", "--password=$MYSQL_PASS_ROOT"]

      interval: 30s

      timeout: 10s

      retries: 5

    labels:

      - "autoheal=true"

    logging:

      driver: "json-file"

      options:

        max-size: "10m"

        max-file: "3"      

  cache:

    image: redis:alpine3.18

    networks:

      - panel

    restart: always

    volumes:

      - cache:/data

    healthcheck:

      test: ["CMD", "redis-cli", "ping"]

      interval: 10s

      timeout: 5s

      retries: 5

    labels:

      - "autoheal=true"

    logging:

      driver: "json-file"

      options:

        max-size: "10m"

        max-file: "3"    

  panel:

    image: ghcr.io/pterodactyl/panel:v1.11.10

    restart: always

    networks:

      - panel

    ports:

      - ${PORT_HTTP:-80}:80

    #dns:

    #  - 1.1.1.1

    links:

      - database

      - cache

    volumes:

      - env:/app/var

    environment:

      MAIL_FROM: $MAIL_FROM

      MAIL_DRIVER: "smtp"

      MAIL_HOST: ${MAIL_SERVER:-smtp.gmail.com}

      MAIL_PORT: ${MAIL_PORT:-587}

      MAIL_USERNAME: $MAIL_USERNAME

      MAIL_PASSWORD: $MAIL_PASS

      MAIL_ENCRYPTION: "true"

      APP_URL: $PTERO_PANEL_URL

      APP_TIMEZONE: $TZ

      APP_SERVICE_AUTHOR: $MAIL_FROM

      TRUSTED_PROXIES: "*" 

      DB_PASSWORD: $MYSQL_PASS

      APP_ENV: "production"

      APP_ENVIRONMENT_ONLY: "false"

      CACHE_DRIVER: "redis"

      SESSION_DRIVER: "redis"

      QUEUE_DRIVER: "redis"

      REDIS_HOST: "cache"

      DB_HOST: "database"

      DB_PORT: "3306"

      HASHIDS_SALT: $HASHIDS_SALT     #Refer to https://github.com/pterodactyl/panel/issues/5012#issuecomment-1960789655

      HASHIDS_LENGTH: 8

    healthcheck:

      test: curl --connect-timeout 15 --silent --show-error --fail localhost:80

      interval: 1m

      timeout: 30s

      retries: 3

      start_period: 30s

    labels:

      - "autoheal=true"

    logging:

      driver: "json-file"

      options:

        max-size: "10m"

        max-file: "3"

networks:

  panel:



volumes:

  cache:

  db:

  env:

  dbetc:

panel.example.com proxies to yourserver:port