From 1639523d6b58627e503002638a6319b7e9d003e0 Mon Sep 17 00:00:00 2001 From: Jan Funke Date: Sat, 13 Dec 2025 19:48:40 +0100 Subject: [PATCH] Initial setup --- README.md | 16 +++++++++ config.map.tmpl | 9 +++++ secrets.yml.tmpl | 7 ++++ ts3server.kube | 21 +++++++++++ ts3server.xml | 13 +++++++ ts3server.yml | 92 ++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 158 insertions(+) create mode 100644 README.md create mode 100644 config.map.tmpl create mode 100644 secrets.yml.tmpl create mode 100644 ts3server.kube create mode 100644 ts3server.xml create mode 100644 ts3server.yml diff --git a/README.md b/README.md new file mode 100644 index 0000000..7409d35 --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# Teamspeak 3 Server Quadlet configuration + +This repository contains a Teamspeak 3 Server Quadlet configuration. + +## Components +- Teamspeak 3 Server +- Postgresql Server + +## Ports + +| Port | Protocol | Description | Optional | +| ----: | :------: | ---------------------------------------------------------------- | :------: | +| 9987 | UDP | Voice traffic (default Teamspeak voice port) | No | +| 30033 | TCP | File transfer port (file uploads/downloads) | No | +| 10011 | TCP | ServerQuery (raw/Telnet) — remote administration via ServerQuery | Yes | +| 10022 | TCP | ServerQuery over SSH — alternative secure ServerQuery access | Yes | diff --git a/config.map.tmpl b/config.map.tmpl new file mode 100644 index 0000000..e2ba405 --- /dev/null +++ b/config.map.tmpl @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: ts3-config +data: + timezone: "Europe/Berlin" + database-name: "ts3" + database-user: "ts3" + query-protocols: "raw,ssh" \ No newline at end of file diff --git a/secrets.yml.tmpl b/secrets.yml.tmpl new file mode 100644 index 0000000..16dc5e2 --- /dev/null +++ b/secrets.yml.tmpl @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Secret +metadata: + name: ts3-secrets +type: Opaque +data: + database-password: CHANGE-ME-TO-SOMETHING-GOOD \ No newline at end of file diff --git a/ts3server.kube b/ts3server.kube new file mode 100644 index 0000000..88a5f92 --- /dev/null +++ b/ts3server.kube @@ -0,0 +1,21 @@ +[Unit] +Description=Teamspeak 3 Server (Pod) +After=network-online.target + +[Kube] +Yaml=ts3server.yml +AutoUpdate=registry + +ConfigMap=config.map + +PublishPort=9987:9987 +PublishPort=10011:10011 +PublishPort=10022:10022 +PublishPort=30033:30033 + +[Service] +Restart=always +RestartSec=15 + +[Install] +WantedBy=default.target \ No newline at end of file diff --git a/ts3server.xml b/ts3server.xml new file mode 100644 index 0000000..1e0bd16 --- /dev/null +++ b/ts3server.xml @@ -0,0 +1,13 @@ + + + Teamspeak 3 Server + Firewall rules for the Teamspeak 3 Server + + + + + + + + + \ No newline at end of file diff --git a/ts3server.yml b/ts3server.yml new file mode 100644 index 0000000..7affe0b --- /dev/null +++ b/ts3server.yml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: Pod +metadata: + name: ts3 +spec: + restartPolicy: Always + containers: + # --- TeamSpeak 3 Server --- + - name: ts3server + image: docker.io/teamspeak:latest + ports: + - containerPort: 9987 + protocol: UDP + - containerPort: 10011 + protocol: TCP + - containerPort: 10022 + protocol: TCP + - containerPort: 30033 + protocol: TCP + env: + # General Configuration + - name: TZ + valueFrom: + configMapKeyRef: + name: ts3-config + key: timezone + # Teamspeak Config + - name: TS3SERVER_LICENSE + value: "accept" + - name: TS3SERVER_QUERY_PROTOCOLS + value: "ssh,raw" + # Database Configuration + - name: TS3SERVER_DB_PLUGIN + value: "ts3db_postgres" + - name: TS3SERVER_DB_SQLCREATEPATH + value: "create_postgres" + - name: TS3SERVER_DB_WAITUNTILREADY + value: 30 + - name: TS3SERVER_DB_HOST + value: "localhost" + - name: TS3SERVER_DB_NAME + valueFrom: + configMapKeyRef: + name: ts3-config + key: database-name + - name: TS3SERVER_DB_USER + valueFrom: + configMapKeyRef: + name: ts3-config + key: database-user + - name: TS3SERVER_DB_PASSWORD + valueFrom: + secretKeyRef: + name: ts3-secrets + key: database-password + + volumeMounts: + - mountPath: /var/ts3server + name: ts3-server-data + + # --- Postgres Database --- + - name: ts3-db + image: docker.io/postgres:18 + env: + # Database Configuration + - name: POSTGRES_DB + valueFrom: + configMapKeyRef: + name: ts3-config + key: database-name + - name: POSTGRES_USER + valueFrom: + configMapKeyRef: + name: ts3-config + key: database-user + - name: POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: addy.io-secrets + key: database-password + volumeMounts: + - mountPath: /var/lib/postgresql + name: ts3-db-data + + # --- Volume Definitions --- + volumes: + - name: ts3-server-data + persistentVolumeClaim: + claimName: ts3-server-data + - name: ts3-db-data + persistentVolumeClaim: + claimName: ts3-db-data