diff --git a/teamspeak/entrypoint.sh b/teamspeak/entrypoint.sh index 10a1d56ef..275f725d6 100644 --- a/teamspeak/entrypoint.sh +++ b/teamspeak/entrypoint.sh @@ -1,93 +1,37 @@ -#!/bin/sh -set -e +FROM alpine:3.13 -# don't start ts3server with root permissions -if [ "$1" = 'ts3server' -a "$(id -u)" = '0' ]; then - chown -R ts3server /var/ts3server - exec su-exec ts3server "$0" "$@" -fi +RUN apk add --no-cache ca-certificates libstdc++ su-exec libpq +RUN set -eux; \ + addgroup -g 9987 ts3server; \ + adduser -u 9987 -Hh /var/ts3server -G ts3server -s /sbin/nologin -D ts3server; \ + install -d -o ts3server -g ts3server -m 775 /var/ts3server /var/run/ts3server /opt/ts3server -# have the default inifile as the last parameter -if [ "$1" = 'ts3server' ]; then - set -- "$@" inifile=/var/run/ts3server/ts3server.ini -fi +ENV PATH "${PATH}:/opt/ts3server" -# usage: file_env VAR [DEFAULT] -# ie: file_env 'XYZ_DB_PASSWORD' 'example' -# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of -# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) -file_env() { - local var="$1" - local fileVar="${var}_FILE" - eval local varValue="\$${var}" - eval local fileVarValue="\$${var}_FILE" - local def="${2:-}" - if [ "${varValue:-}" ] && [ "${fileVarValue:-}" ]; then - echo >&2 "error: both $var and $fileVar are set (but are exclusive)" - exit 1 - fi - local val="$def" - if [ "${varValue:-}" ]; then - val="${varValue}" - elif [ "${fileVarValue:-}" ]; then - val="$(cat "${fileVarValue}")" - fi - export "$var"="$val" - if [ "${fileVar:-}" ]; then - unset "$fileVar" - fi - if [ "${fileVarValue:-}" ]; then - unset "fileVarValue" - fi -} +ARG TEAMSPEAK_CHECKSUM=f30a5366f12b0c5b00476652ebc06d9b5bc4754c4cb386c086758cceb620a8d0 +ARG TEAMSPEAK_URL=https://files.teamspeak-services.com/releases/server/3.13.6/teamspeak3-server_linux_alpine-3.13.6.tar.bz2 -if [ "$1" = 'ts3server' ]; then - file_env 'TS3SERVER_DB_HOST' - file_env 'TS3SERVER_DB_USER' - file_env 'TS3SERVER_DB_PASSWORD' - file_env 'TS3SERVER_DB_NAME' +RUN set -eux; \ + apk add --no-cache --virtual .fetch-deps tar; \ + wget "${TEAMSPEAK_URL}" -O server.tar.bz2; \ + echo "${TEAMSPEAK_CHECKSUM} *server.tar.bz2" | sha256sum -c -; \ + mkdir -p /opt/ts3server; \ + tar -xf server.tar.bz2 --strip-components=1 -C /opt/ts3server; \ + rm server.tar.bz2; \ + apk del .fetch-deps; \ + mv /opt/ts3server/*.so /opt/ts3server/redist/* /usr/local/lib; \ + ldconfig /usr/local/lib - cat << EOF | sed 's/^[ \t]*//;s/[ \t]*$//;/^$/d' > /var/run/ts3server/ts3server.ini - licensepath=${TS3SERVER_LICENSEPATH} - query_protocols=${TS3SERVER_QUERY_PROTOCOLS:-raw} - query_timeout=${TS3SERVER_QUERY_TIMEOUT:-300} - query_ssh_rsa_host_key=${TS3SERVER_QUERY_SSH_RSA_HOST_KEY:-ssh_host_rsa_key} - query_ip_allowlist=${TS3SERVER_IP_ALLOWLIST:-query_ip_allowlist.txt} - query_ip_blocklist=${TS3SERVER_IP_BLOCKLIST:-query_ip_blocklist.txt} - dbplugin=${TS3SERVER_DB_PLUGIN:-ts3db_sqlite3} - dbpluginparameter=${TS3SERVER_DB_PLUGINPARAMETER:-/var/run/ts3server/ts3db.ini} - dbsqlpath=${TS3SERVER_DB_SQLPATH:-/opt/ts3server/sql/} - dbsqlcreatepath=${TS3SERVER_DB_SQLCREATEPATH:-create_sqlite} - dbconnections=${TS3SERVER_DB_CONNECTIONS:-10} - dbclientkeepdays=${TS3SERVER_DB_CLIENTKEEPDAYS:-30} - logpath=${TS3SERVER_LOG_PATH:-/var/ts3server/logs} - logquerycommands=${TS3SERVER_LOG_QUERY_COMMANDS:-0} - logappend=${TS3SERVER_LOG_APPEND:-0} - serverquerydocs_path=${TS3SERVER_SERVERQUERYDOCS_PATH:-/opt/ts3server/serverquerydocs/} - ${TS3SERVER_QUERY_IP:+query_ip=${TS3SERVER_QUERY_IP}} - query_port=${TS3SERVER_QUERY_PORT:-10011} - ${TS3SERVER_FILETRANSFER_IP:+filetransfer_ip=${TS3SERVER_FILETRANSFER_IP}} - filetransfer_port=${TS3SERVER_FILETRANSFER_PORT:-30033} - ${TS3SERVER_VOICE_IP:+voice_ip=${TS3SERVER_VOICE_IP}} - default_voice_port=${TS3SERVER_DEFAULT_VOICE_PORT:-9987} - ${TS3SERVER_QUERY_SSH_IP:+query_ssh_ip=${TS3SERVER_QUERY_SSH_IP}} - query_ssh_port=${TS3SERVER_QUERY_SSH_PORT:-10022} - ${TS3SERVER_SERVERADMIN_PASSWORD:+serveradmin_password=${TS3SERVER_SERVERADMIN_PASSWORD}} - ${TS3SERVER_MACHINE_ID:+machine_id=${TS3SERVER_MACHINE_ID}} - ${TS3SERVER_QUERY_SKIPBRUTEFORCECHECK:+query_skipbruteforcecheck=${TS3SERVER_QUERY_SKIPBRUTEFORCECHECk}} - ${TS3SERVER_HINTS_ENABLED:+hints_enabled=${TS3SERVER_HINTS_ENABLED}} -EOF +# setup directory where user data is stored +VOLUME /var/ts3server/ +WORKDIR /var/ts3server/ - cat << EOF | sed 's/^[ \t]*//;s/[ \t]*$//;/^$/d' > /var/run/ts3server/ts3db.ini - [config] - host='${TS3SERVER_DB_HOST}' - port='${TS3SERVER_DB_PORT:-3306}' - username='${TS3SERVER_DB_USER}' - password='${TS3SERVER_DB_PASSWORD}' - database='${TS3SERVER_DB_NAME}' - socket= - wait_until_ready='${TS3SERVER_DB_WAITUNTILREADY:-30}' -EOF -fi +# 9987 default voice +# 10011 server query +# 30033 file transport +EXPOSE 9987/udp 10011 30033 -exec "$@" +COPY entrypoint.sh /opt/ts3server + +ENTRYPOINT [ "entrypoint.sh" ] +CMD [ "ts3server" ]