TeamSpeak 3 — a low-latency voice-chat server for gaming and communities, with hierarchical channels, permissions, and a ServerQuery admin API. Deployed as a host-networked Nomad service with a persistent data volume. (Uses the free, non-commercial TeamSpeak license.)
Needs nomad-pack on PATH. The script only adds the nomploy registry and runs this pack.
Source ↗ Project ↗ ⚑ Report an issue
Save as values.hcl, edit, then run:
# The name of the Nomad job.
job_name = "teamspeak"
# The Nomad namespace to deploy into.
namespace = "default"
# The datacenters to deploy to.
datacenters = ["*"]
# The TeamSpeak 3 server image. Pin a tag in production.
image = "teamspeak:latest"
# Host UDP port for voice communication.
voice_port = 9987
# Host TCP port for the ServerQuery admin interface.
query_port = 10011
# Host TCP port for file transfers.
filetransfer_port = 30033
# Named volume for TeamSpeak data (/var/ts3server): the database, config, and files.
data_volume = "teamspeak_data"
# Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []
# Resources for the TeamSpeak task.
resources = {
cpu = 300
memory = 256
}
| Name | Type | Default | Description |
|---|---|---|---|
| job_name | string | "teamspeak" | The name of the Nomad job. |
| namespace | string | "default" | The Nomad namespace to deploy into. |
| datacenters | list | ["*"] | The datacenters to deploy to. |
| image | string | "teamspeak:latest" | The TeamSpeak 3 server image. Pin a tag in production. |
| voice_port | number | 9987 | Host UDP port for voice communication. |
| query_port | number | 10011 | Host TCP port for the ServerQuery admin interface. |
| filetransfer_port | number | 30033 | Host TCP port for file transfers. |
| data_volume | string | "teamspeak_data" | Named volume for TeamSpeak data (/var/ts3server): the database, config, and files. |
| constraints | list | [] | Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true". |
| resources | object | {
cpu = 300
memory = 256
} | Resources for the TeamSpeak task. |
No variables match.
This pack stores data in one Docker named volume:
teamspeak_data
restic
# Run on the node hosting this pack. Point restic at your repo first: # export RESTIC_REPOSITORY="s3:https://<account>.r2.cloudflarestorage.com/<bucket>" # export RESTIC_PASSWORD="<repo-password>" # export AWS_ACCESS_KEY_ID=<key> AWS_SECRET_ACCESS_KEY=<secret> restic backup \ /var/lib/docker/volumes/teamspeak_data/_data
rclone (sync to S3/R2)
rclone sync /var/lib/docker/volumes/teamspeak_data/_data backup:<bucket>/teamspeak_data
Paths assume the default Docker volume location (/var/lib/docker/volumes). Restore by stopping the job, restoring files into the same volume, and re-running the pack.
TeamSpeak 3 — a low-latency voice-chat server popular with gamers and communities. Hierarchical channels, fine-grained permissions, server groups, and a ServerQuery admin API.
Single host-networked Nomad service with a persistent data volume. Uses the free, non-commercial TeamSpeak
license (TS3SERVER_LICENSE=accept).
nomad-pack registry add nomploy https://github.com/Nomploy/nomad-packs
nomad-pack run teamspeak --registry=nomploy
| Variable | Default | Description |
|---|---|---|
voice_port |
9987 |
UDP voice port. |
query_port |
10011 |
TCP ServerQuery (admin) port. |
filetransfer_port |
30033 |
TCP file-transfer port. |
data_volume |
teamspeak_data |
/var/ts3server — database, config, files. |
image |
teamspeak:latest |
Container image. Pin a tag in production. |
resources |
{ cpu = 300, memory = 256 } |
Task resources. |
First boot: the server logs a one-time ServerAdmin privilege key — read it with nomad alloc logs and
paste it into your TeamSpeak client to claim admin. Connect clients to <node-ip>:9987 (UDP). This is the
free non-commercial edition (max 32 slots). Pin the job to the node holding the volume with constraints.