From d8d00cbd246f44adabbaa8f0eff4bd712765f685 Mon Sep 17 00:00:00 2001 From: Bensuperpc Date: Mon, 1 Sep 2025 22:36:21 +0200 Subject: [PATCH] Add Teamfortress 2 Signed-off-by: Bensuperpc --- Makefile | 4 +- infrastructure/docker-compose.yml | 2 + .../forgejo/docker-compose.forgejo.yml | 6 +- .../openssh/docker-compose.openssh.yml | 7 ++ .../teamfortress2-server/DockerCompose.mk | 85 +++++++++++++++++++ .../services/teamfortress2-server/Makefile | 18 ++++ .../backup/docker-compose.backup.yml | 27 ++++++ .../backup/env/teamfortress2_backup.env | 14 +++ .../teamfortress2-server/docker-compose.yml | 7 ++ .../config/authorized_keys/id_ed25519.pub | 1 + .../openssh/docker-compose.openssh.yml | 36 ++++++++ .../openssh/env/openssh.env | 15 ++++ .../docker-compose.teamfortress2.yml | 39 +++++++++ .../teamfortress2/env/teamfortress2.env | 8 ++ 14 files changed, 264 insertions(+), 5 deletions(-) create mode 100644 infrastructure/services/teamfortress2-server/DockerCompose.mk create mode 100644 infrastructure/services/teamfortress2-server/Makefile create mode 100644 infrastructure/services/teamfortress2-server/teamfortress2-server/backup/docker-compose.backup.yml create mode 100644 infrastructure/services/teamfortress2-server/teamfortress2-server/backup/env/teamfortress2_backup.env create mode 100644 infrastructure/services/teamfortress2-server/teamfortress2-server/docker-compose.yml create mode 100644 infrastructure/services/teamfortress2-server/teamfortress2-server/openssh/config/authorized_keys/id_ed25519.pub create mode 100644 infrastructure/services/teamfortress2-server/teamfortress2-server/openssh/docker-compose.openssh.yml create mode 100644 infrastructure/services/teamfortress2-server/teamfortress2-server/openssh/env/openssh.env create mode 100644 infrastructure/services/teamfortress2-server/teamfortress2-server/teamfortress2/docker-compose.teamfortress2.yml create mode 100644 infrastructure/services/teamfortress2-server/teamfortress2-server/teamfortress2/env/teamfortress2.env diff --git a/Makefile b/Makefile index aa1b7c5..2d05ee7 100644 --- a/Makefile +++ b/Makefile @@ -16,8 +16,8 @@ ADMIN_SERVICES := openssh uptime-kuma #7DAYS_TO_DIE_SERVICES := 7daystodie_server 7daystodie_backup #MINECRAFT_SERVICES := minecraft_server minecraft_backup #SATISFACTORY_SERVICES := satisfactory_server satisfactory_backup -GIT_SERVICES := forgejo -# forgejo-runner +TEAM_FORTRESS_SERVICES := teamfortress2_server +# teamfortress2_backup # gitea gitea-runner #IA_SERVICES := open-webui SHARING_SERVICES := privatebin diff --git a/infrastructure/docker-compose.yml b/infrastructure/docker-compose.yml index 23d56c8..c302200 100644 --- a/infrastructure/docker-compose.yml +++ b/infrastructure/docker-compose.yml @@ -49,3 +49,5 @@ include: - services/7daystodie-server/7daystodie-server/docker-compose.yml # Satisfactory - services/satisfactory-server/satisfactory-server/docker-compose.yml +# Team Fortress 2 + - services/teamfortress2-server/teamfortress2-server/docker-compose.yml diff --git a/infrastructure/services/forgejo/docker-compose.forgejo.yml b/infrastructure/services/forgejo/docker-compose.forgejo.yml index 308deaa..5187ed4 100644 --- a/infrastructure/services/forgejo/docker-compose.forgejo.yml +++ b/infrastructure/services/forgejo/docker-compose.forgejo.yml @@ -51,7 +51,7 @@ services: networks: - infra-network profiles: - - forgejo + - forgejo-runner privileged: true environment: DOCKER_TLS_CERTDIR: /certs @@ -60,7 +60,7 @@ services: - forgejo_certs:/certs forgejo_runner: - image: 'code.forgejo.org/forgejo/runner:6.3.1' + image: data.forgejo.org/forgejo/runner:9 networks: - infra-network profiles: @@ -73,7 +73,7 @@ services: container_name: 'forgejo_runner' env_file: - ./env/forgejo_runner.env -# user: 1001:1001 + user: ${PUID:-1000}:${PGID:-1000} volumes: # - ./config/forgejo_runner/config.yaml:/config.yaml:ro - forgejo_runner:/data diff --git a/infrastructure/services/openssh/docker-compose.openssh.yml b/infrastructure/services/openssh/docker-compose.openssh.yml index cdd9283..be73f8b 100644 --- a/infrastructure/services/openssh/docker-compose.openssh.yml +++ b/infrastructure/services/openssh/docker-compose.openssh.yml @@ -36,6 +36,8 @@ services: - gitea_data:/gitea_data:rw - gitea_config:/gitea_config:rw - gitea_db:/gitea_db:rw + - teamfortress2_backup:/teamfortress2_backup:rw + - teamfortress2_data:/teamfortress2_data:rw networks: - infra-network @@ -81,6 +83,11 @@ volumes: name: minecraft_proxy_data minecraft_rcon_data: name: minecraft_rcon_data +# teamfortress2 + teamfortress2_backup: + name: teamfortress2_backup + teamfortress2_data: + name: teamfortress2_data # forgejo forgejo_data: name: forgejo_data diff --git a/infrastructure/services/teamfortress2-server/DockerCompose.mk b/infrastructure/services/teamfortress2-server/DockerCompose.mk new file mode 100644 index 0000000..6daaaf1 --- /dev/null +++ b/infrastructure/services/teamfortress2-server/DockerCompose.mk @@ -0,0 +1,85 @@ +#////////////////////////////////////////////////////////////// +#// // +#// docker-multimedia, 2024 // +#// Created: 30, May, 2021 // +#// Modified: 14 November, 2024 // +#// file: - // +#// - // +#// Source: // +#// OS: ALL // +#// CPU: ALL // +#// // +#////////////////////////////////////////////////////////////// + +PROJECT_DIRECTORY ?= infrastructure + +DOCKER_EXEC ?= docker + +DOCKER_PROFILES ?= main_infrastructure + +PROFILE_CMD ?= $(addprefix --profile ,$(DOCKER_PROFILES)) + +COMPOSE_FILES ?= $(shell find ./$(PROJECT_DIRECTORY) -maxdepth 1 -name 'docker-compose*.yml' -type f | sed -e 's/^/--file /') +COMPOSE_DIR ?= --project-directory ./$(PROJECT_DIRECTORY) + +UID ?= 1000 +GID ?= 1000 + +ENV_ARG_VAR ?= PUID=$(UID) PGID=$(GID) + +DOCKER_COMPOSE_COMMAND ?= $(ENV_ARG_VAR) $(DOCKER_EXEC) compose $(COMPOSE_DIR) $(COMPOSE_FILES) $(PROFILE_CMD) + +.PHONY: build all +all: start + +.PHONY: build +build: + $(DOCKER_COMPOSE_COMMAND) build + +.PHONY: start +start: + $(DOCKER_COMPOSE_COMMAND) up -d + +.PHONY: start-at +start-at: + $(DOCKER_COMPOSE_COMMAND) up + +.PHONY: docker-check +docker-check: + $(DOCKER_COMPOSE_COMMAND) config + +.PHONY: stop +stop: down + +.PHONY: down +down: + $(DOCKER_COMPOSE_COMMAND) down + +.PHONY: restart +restart: stop start + +.PHONY: logs +logs: + $(DOCKER_COMPOSE_COMMAND) logs + +.PHONY: state +state: + $(DOCKER_COMPOSE_COMMAND) ps + $(DOCKER_COMPOSE_COMMAND) top + +.PHONY: update-docker +update-docker: + $(DOCKER_COMPOSE_COMMAND) pull + +.PHONY: update +update: update-docker +# git submodule update --init --recursive --remote + git pull --recurse-submodules --all --progress + +.PHONY: clean +clean: + docker system prune -f + +.PHONY: purge +purge: + $(ENV_ARG_VAR) $(DOCKER_EXEC) compose $(COMPOSE_DIR) $(COMPOSE_FILES) down -v --rmi all diff --git a/infrastructure/services/teamfortress2-server/Makefile b/infrastructure/services/teamfortress2-server/Makefile new file mode 100644 index 0000000..23ffc0b --- /dev/null +++ b/infrastructure/services/teamfortress2-server/Makefile @@ -0,0 +1,18 @@ +#////////////////////////////////////////////////////////////// +#// // +#// Script, 2022 // +#// Created: 14, April, 2022 // +#// Modified: 30, November, 2024 // +#// file: - // +#// - // +#// Source: // +#// OS: ALL // +#// CPU: ALL // +#// // +#////////////////////////////////////////////////////////////// + +PROJECT_DIRECTORY := teamfortress2-server + +DOCKER_PROFILES := team_fortress_server team_fortress_backup + +include DockerCompose.mk diff --git a/infrastructure/services/teamfortress2-server/teamfortress2-server/backup/docker-compose.backup.yml b/infrastructure/services/teamfortress2-server/teamfortress2-server/backup/docker-compose.backup.yml new file mode 100644 index 0000000..d87eaa3 --- /dev/null +++ b/infrastructure/services/teamfortress2-server/teamfortress2-server/backup/docker-compose.backup.yml @@ -0,0 +1,27 @@ +services: + teamfortress2_backup: + image: mazzolino/restic:latest + container_name: teamfortress2_backup + profiles: + - teamfortress2_backup + depends_on: + - teamfortress2_server + restart: on-failure:5 + env_file: + - ./env/teamfortress2_backup.env + volumes: + - teamfortress2_backup:/mnt/restic + - teamfortress2_data:/data:ro + security_opt: + - no-new-privileges:true + network_mode: none + cap_drop: + - NET_ADMIN + - NET_RAW + - SYS_ADMIN + +volumes: + teamfortress2_backup: + name: teamfortress2_backup + teamfortress2_data: + name: teamfortress2_data diff --git a/infrastructure/services/teamfortress2-server/teamfortress2-server/backup/env/teamfortress2_backup.env b/infrastructure/services/teamfortress2-server/teamfortress2-server/backup/env/teamfortress2_backup.env new file mode 100644 index 0000000..4df6131 --- /dev/null +++ b/infrastructure/services/teamfortress2-server/teamfortress2-server/backup/env/teamfortress2_backup.env @@ -0,0 +1,14 @@ +#RUN_ON_STARTUP=true +RESTIC_REPOSITORY=/mnt/restic +RESTIC_BACKUP_SOURCES=/data +RESTIC_PASSWORD=SCY5cmu12Odca302EXabPA9jXYkCb2NN +# Backup (exuclusive with Check and Prune) +BACKUP_CRON=*/15 * * * * +RESTIC_BACKUP_ARGS=--tag docker-volumes --verbose +#RESTIC_FORGET_ARGS=--prune --keep-last 8 --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --keep-yearly 4 +# Check (exuclusive with Check and Prune) +#CHECK_CRON=*/15 * * * * +#RESTIC_CHECK_ARGS=--read-data-subset=40% +# Prune (exuclusive with Check and Prune) +#PRUNE_CRON=*/15 * * * * +#RESTIC_PRUNE_ARGS= \ No newline at end of file diff --git a/infrastructure/services/teamfortress2-server/teamfortress2-server/docker-compose.yml b/infrastructure/services/teamfortress2-server/teamfortress2-server/docker-compose.yml new file mode 100644 index 0000000..b3f3dda --- /dev/null +++ b/infrastructure/services/teamfortress2-server/teamfortress2-server/docker-compose.yml @@ -0,0 +1,7 @@ +include: +# Team Fortress 2 server + - teamfortress2/docker-compose.teamfortress2.yml +# OpenSSH server + - openssh/docker-compose.openssh.yml +# Backup server + - backup/docker-compose.backup.yml diff --git a/infrastructure/services/teamfortress2-server/teamfortress2-server/openssh/config/authorized_keys/id_ed25519.pub b/infrastructure/services/teamfortress2-server/teamfortress2-server/openssh/config/authorized_keys/id_ed25519.pub new file mode 100644 index 0000000..29ce0f4 --- /dev/null +++ b/infrastructure/services/teamfortress2-server/teamfortress2-server/openssh/config/authorized_keys/id_ed25519.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHVtzpnPr0Boy+bUbL+viOYfqeetDZF6Hu40EwNLXNb0 bensuperpc@gmail.com diff --git a/infrastructure/services/teamfortress2-server/teamfortress2-server/openssh/docker-compose.openssh.yml b/infrastructure/services/teamfortress2-server/teamfortress2-server/openssh/docker-compose.openssh.yml new file mode 100644 index 0000000..717ea34 --- /dev/null +++ b/infrastructure/services/teamfortress2-server/teamfortress2-server/openssh/docker-compose.openssh.yml @@ -0,0 +1,36 @@ +services: + # openssh + teamfortress2_openssh: + image: linuxserver/openssh-server:latest + container_name: teamfortress2_openssh + profiles: + - teamfortress2_openssh + depends_on: + - teamfortress2_server + restart: on-failure:5 + env_file: + - ./env/openssh.env + environment: + - PUID=${PUID:-1000} + - PGID=${PGID:-1000} + volumes: + - teamfortress2_openssh_config:/config + - ./config/authorized_keys:/authorized_ssh_keys:ro + - teamfortress2_backup:/teamfortress2_backup + - teamfortress2_data:/teamfortress2_data + networks: + - infra-network + security_opt: + - no-new-privileges:false + cap_drop: + - SYS_ADMIN + ports: + - 2222:2222 + +volumes: + teamfortress2_openssh_config: + name: teamfortress2_openssh_config + teamfortress2_backup: + name: teamfortress2_backup + teamfortress2_data: + name: teamfortress2_data diff --git a/infrastructure/services/teamfortress2-server/teamfortress2-server/openssh/env/openssh.env b/infrastructure/services/teamfortress2-server/teamfortress2-server/openssh/env/openssh.env new file mode 100644 index 0000000..fc79b5d --- /dev/null +++ b/infrastructure/services/teamfortress2-server/teamfortress2-server/openssh/env/openssh.env @@ -0,0 +1,15 @@ +TZ=Etc/UTC +SUDO_ACCESS=true +PASSWORD_ACCESS=false +DOCKER_MODS=linuxserver/mods:openssh-server-rsync +#PUBLIC_KEY_URL=https://github.com/bensuperpc.keys +PUBLIC_KEY_DIR=/authorized_ssh_keys +USER_NAME=admin +USER_PASSWORD=K4CLuwknhW6sl6fxKI5DsNt9R9SSelmC + +#PUBLIC_KEY=yourpublickey +#PUBLIC_KEY_FILE=/path/to/file +#PUBLIC_KEY_DIR=/path/to/directory/containing/_only_/pubkeys +#PUBLIC_KEY_URL=https://github.com/username.keys +#USER_PASSWORD_FILE=/path/to/file +#LOG_STDOUT= \ No newline at end of file diff --git a/infrastructure/services/teamfortress2-server/teamfortress2-server/teamfortress2/docker-compose.teamfortress2.yml b/infrastructure/services/teamfortress2-server/teamfortress2-server/teamfortress2/docker-compose.teamfortress2.yml new file mode 100644 index 0000000..3f78518 --- /dev/null +++ b/infrastructure/services/teamfortress2-server/teamfortress2-server/teamfortress2/docker-compose.teamfortress2.yml @@ -0,0 +1,39 @@ +services: + # Team Fortress 2 server + teamfortress2_server: + image: cm2network/tf2:latest-x64 + container_name: teamfortress2_server + profiles: + - teamfortress2_server + restart: on-failure:5 + ports: + - "27015:27015/tcp" + - "27015:27015/udp" + volumes: + - teamfortress2_data:/home/steam/tf-dedicated + networks: + - infra-network + env_file: + - ./env/teamfortress2.env +# environment: +# - PUID=${PUID:-1000} +# - PGID=${PGID:-1000} + security_opt: + - no-new-privileges:true + cap_drop: + - SYS_ADMIN + deploy: + resources: + limits: + memory: 16G + reservations: + memory: 4G + +volumes: + teamfortress2_data: + name: teamfortress2_data + +networks: + infra-network: + driver: bridge + name: infra-network diff --git a/infrastructure/services/teamfortress2-server/teamfortress2-server/teamfortress2/env/teamfortress2.env b/infrastructure/services/teamfortress2-server/teamfortress2-server/teamfortress2/env/teamfortress2.env new file mode 100644 index 0000000..062c46d --- /dev/null +++ b/infrastructure/services/teamfortress2-server/teamfortress2-server/teamfortress2/env/teamfortress2.env @@ -0,0 +1,8 @@ +SRCDS_TOKEN= +SRCDS_PW=linuxmasterrace +SRCDS_PORT=27015 +SRCDS_MAXPLAYERS=32 +SRCDS_REGION=3 +SRCDS_STARTMAP=pl_badwater +SRCDS_CFG=server.cfg +SRCDS_SECURED=0 \ No newline at end of file