TeamSpeak as a custom app

Hi! I was looking if anyone had a guide or can tell how to install TeamSpeak easily? I tried to do it myself but I had issue with persistence as every restart would make the app to reset.

Also it would be nice to have it as a native app

If the problem is persistence, you have to switch the storage from iXVolume to Hostpath. iXVolume should only be used for testing since, as you’ve experienced, the storage gets recreated when the app is restarted.

I see where I have miseed that! I used their official docker compose

What would be the correct way/line to add the line to mount the storage to host path in terms of yaml?

I’ve just taken a brief look at the official compose on dockerhub, but don’t see what needs to be mounted for persistence, so i can’t tell you, but my guess is at least the maridadb side container needs persistence.

Edit: OK a bit further down on dockerhub its stated that you should mount

/my/own/datadir:/var/ts3server/

where /my/own/datadir is the path on the truenas box

Edit2:

services:
  teamspeak:
    image: teamspeak
    restart: always
    ports:
      - 9987:9987/udp
      - 10011:10011
      - 30033:30033
    environment:
      TS3SERVER_DB_PLUGIN: ts3db_mariadb
      TS3SERVER_DB_SQLCREATEPATH: create_mariadb
      TS3SERVER_DB_HOST: db
      TS3SERVER_DB_USER: root
      TS3SERVER_DB_PASSWORD: example
      TS3SERVER_DB_NAME: teamspeak
      TS3SERVER_DB_WAITUNTILREADY: 30
      TS3SERVER_LICENSE: accept
    volume:
      - /my/own/datadir:/var/ts3server/
  db:
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: teamspeak

if i didn’t fatfinger the indentation this should fix the persistence problem if you adjust the /my/own/datadir path to the dataset you want to use.

Thank you very much for that! As I understand it should start as /mnt/MyPoolName/etc correct?
Do we need to mount just the teamspeak or mariadb as well? I believe both need to be mounted

yes correct it should be /mnt/Poolname/Datasetname/Teamspeak or something like that

Thank you for all of that it worked well so far except I have a problem.
It cannot connect to the DB and teamspeak cannot create files in the dataset. My only changes to the config were in these lines

TS3SERVER_DB_PASSWORD: example
MYSQL_ROOT_PASSWORD: example
volume:
      - /my/own/datadir:/var/ts3server/

Ok i played around with it a bit and i got it up and running with iXVolumes, but not hostpath. I’ll try again tomorrow, but its almost 1am right now and i have to work tomorrow… it’s propably just a permission error but i’m too tired to try right now.

Thanks a lot! Yea i do believe its a permission issue. I tried to assign app UID to the teamspeak by adding this user: "568:568" but it would remove itself after
I did create an app dataset to see if it helps but there was no change

I’m at work right now, but i’ve had some luck with persistence for the ts container. Right now the db container won’t deploy with hostpath, but that’s a permission issue to 99%. Will try again later today when i’m back from work and if i get it to work will post an updated compose file.

OK a good nights sleep does wonders, i’ve got it working with hostpaths.
In the truenas gui i had do add user 568 and 999 to the acl list for it to start.
Here’s the upated compose file:

services:
  teamspeak:
    environment:
      PGID: 568
      PUID: 568
      TS3SERVER_DB_HOST: db
      TS3SERVER_DB_NAME: teamspeak
      TS3SERVER_DB_PASSWORD: example #use same Database Password here 
      TS3SERVER_DB_PLUGIN: ts3db_mariadb
      TS3SERVER_DB_SQLCREATEPATH: create_mariadb
      TS3SERVER_DB_USER: root
      TS3SERVER_DB_WAITUNTILREADY: 30
      TS3SERVER_LICENSE: accept
    image: teamspeak
    ports:
      - 9987:9987/udp
      - '10011:10011'
      - '30033:30033'
    restart: always
    volumes:
      - /mnt/Plugins/Teamspeak/Server:/var/ts3server/  #replace /mnt/Plugins/Teamspeak/Server with path for the teamspeak files
  db:
    environment:
      MYSQL_DATABASE: teamspeak
      MYSQL_ROOT_PASSWORD: example   #set Database password
    image: mariadb
    restart: always
    volumes:
      - /mnt/Plugins/Teamspeak/db:/var/lib/mysql  #replace /mnt/Plugins/Teamspeak/db with path for db storage

Edit:
After first launching the app you have to get the Claim id or whatever it was called, which can be found by viewing the logs of the teamspeak container.

Thank you a lot for your assistance! I did put this down and it worked. I needed to create dataset for apps and added netdata user to the ACL list to cover 999
I did have a problem at first where MariaDB was crashing but it was doing that from some leftover files in the dataset making it to crash.

I guess I also misinterpret user: VS PGID/PUID which didnt want to apply privileges at first.
Thank you a lot for your help!

1 Like

glad i could help, was fun fiddling around after a longer time. Been almost a year since i last added an app to my stack, i’ll add the teamspeak compose to my private github in case i ever really need it.

1 Like