Pterodactyl Panel - Manage game servers for various games easily
Pterodactyl Panel - Manage game servers for various games easily
Pterodactyl® is a free, open-source game server management panel built with PHP, React, and Go. Designed with security in mind, Pterodactyl runs all game servers in isolated Docker containers while exposing a beautiful and intuitive UI to end users.
I run the Pterodactyl Game Server panel on Kubernetes, this panel controls “Wings” instances on 4 different machines, 3 are internal at my house and another that is remote.
Kubernetes Manifest
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: panel
app.kubernetes.io/instance: panel
app.kubernetes.io/name: panel
name: panel
namespace: pterodactyl
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: panel
template:
metadata:
labels:
app: panel
app.kubernetes.io/name: panel
spec:
nodeSelector:
worker: "true"
containers:
- image: ghcr.io/pterodactyl/panel:latest
name: panel
ports:
- containerPort: 80
name: http
protocol: TCP
- containerPort: 443
name: https
protocol: TCP
env:
- name: APP_URL
value: "https://[REDACTED].f9.casa"
- name: APP_TIMEZONE
value: Europe/London
- name: LETSENCRYPT_EMAIL
value: "[REDACTED]"
- name: CACHE_DRIVER
value: redis
- name: SESSION_DRIVER
value: redis
- name: QUEUE_DRIVER
value: redis
- name: REDIS_HOST
value: redis.redis
- name: REDIS_PASSWORD
value: "[REDACTED]"
- name: DB_HOST
value: mariadb.mariadb
- name: DB_PORT
value: "3306"
- name: DB_DATABASE
value: pterodactyl
- name: DB_USERNAME
value: pterodactyl
- name: DB_PASSWORD
value: "[REDACTED]"
volumeMounts:
- mountPath: "/app/var"
readOnly: false
name: data
subPath: "var"
- mountPath: "/etc/nginx/http.d/"
readOnly: false
name: data
subPath: "nginx"
- mountPath: "/etc/letsencrypt/"
readOnly: false
name: data
subPath: "letsencrypt"
- mountPath: "/app/storage/logs"
readOnly: false
name: data
subPath: "logs"
hostAliases:
- ip: "10.0.10.31"
hostnames:
- "[REDACTED].f9.casa"
- ip: "10.0.10.32"
hostnames:
- "[REDACTED].f9.casa"
- ip: "10.0.10.33"
hostnames:
- "[REDACTED].f9.casa"
volumes:
- name: data
persistentVolumeClaim:
claimName: pterodactyl-panel
---
apiVersion: v1
kind: Service
metadata:
labels:
app: panel
name: panel
namespace: pterodactyl
spec:
ports:
- name: https
port: 443
protocol: TCP
targetPort: 443
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
app: panel
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: panel
namespace: pterodactyl
annotations:
kubernetes.io/ingress.class: traefik-external
gethomepage.dev/href: "https://[REDACTED].f9.casa"
gethomepage.dev/enabled: "true"
gethomepage.dev/description: Game Servers
# gethomepage.dev/group: Media Management
gethomepage.dev/icon: pterodactyl.png
gethomepage.dev/name: Pterodactyl
gethomepage.dev/widget.type: pterodactyl
gethomepage.dev/widget.url: "http://panel.pterodactyl"
gethomepage.dev/widget.key: "[REDACTED]"
spec:
entryPoints:
- websecure
routes:
- match: Host(`[REDACTED].f9.casa`)
kind: Rule
services:
- name: panel
port: 80
middlewares:
- name: default-headers
namespace: default
- name: panel-headers
namespace: pterodactyl
tls:
secretName: f9-casa-tls
This post is licensed under CC BY 4.0 by the author.