From 5be84404a5f44e190dfca781e6a98d823a90bc00 Mon Sep 17 00:00:00 2001 From: Menno van Leeuwen Date: Mon, 11 Nov 2024 15:20:02 +0100 Subject: [PATCH] adds Satisfactory game server and UPnP service to Docker configuration --- config/nixos/docker/default.nix | 2 + .../nixos/docker/duplicati/docker-compose.yml | 3 +- config/nixos/docker/satisfactory.nix | 19 ++++++ .../docker/satisfactory/docker-compose.yml | 66 +++++++++++++++++++ 4 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 config/nixos/docker/satisfactory.nix create mode 100644 config/nixos/docker/satisfactory/docker-compose.yml diff --git a/config/nixos/docker/default.nix b/config/nixos/docker/default.nix index 646adc5..cae961f 100644 --- a/config/nixos/docker/default.nix +++ b/config/nixos/docker/default.nix @@ -5,5 +5,7 @@ ./duplicati.nix ./factorio.nix ./golink.nix + ./immich.nix + ./satisfactory.nix ]; } diff --git a/config/nixos/docker/duplicati/docker-compose.yml b/config/nixos/docker/duplicati/docker-compose.yml index d2d7396..c4eaad5 100644 --- a/config/nixos/docker/duplicati/docker-compose.yml +++ b/config/nixos/docker/duplicati/docker-compose.yml @@ -1,5 +1,6 @@ +name: duplicati services: - duplicati: + server: image: lscr.io/linuxserver/duplicati:latest environment: - TZ=Europe/Amsterdam diff --git a/config/nixos/docker/satisfactory.nix b/config/nixos/docker/satisfactory.nix new file mode 100644 index 0000000..65deb96 --- /dev/null +++ b/config/nixos/docker/satisfactory.nix @@ -0,0 +1,19 @@ +{ config, pkgs, ... }: + +{ + environment.etc."docker/satisfactory/docker-compose.yml".source = ./satisfactory/docker-compose.yml; + + systemd.services.satisfactory = { + description = "Satisfactory Game Server Docker Compose Service"; + after = [ "network-online.target" ]; + wants = [ "network-online.target" ]; + serviceConfig = { + ExecStart = "${pkgs.docker-compose}/bin/docker-compose -f /etc/docker/satisfactory/docker-compose.yml up"; + ExecStop = "${pkgs.docker-compose}/bin/docker-compose -f /etc/docker/satisfactory/docker-compose.yml down"; + WorkingDirectory = "/etc/docker/satisfactory"; + Restart = "always"; + RestartSec = 10; + }; + wantedBy = [ "multi-user.target" ]; + }; +} diff --git a/config/nixos/docker/satisfactory/docker-compose.yml b/config/nixos/docker/satisfactory/docker-compose.yml new file mode 100644 index 0000000..5d6a59b --- /dev/null +++ b/config/nixos/docker/satisfactory/docker-compose.yml @@ -0,0 +1,66 @@ +name: satisfactory +services: + upnp: + image: ghcr.io/vleeuwenmenno/auto-upnp:latest + restart: unless-stopped + network_mode: host + environment: + UPNP_DURATION: 86400 # 24 hours in seconds + PORTS: | + [ + {"port": 7777, "protocol": "udp"}, + {"port": 15000, "protocol": "udp"}, + {"port": 15777, "protocol": "udp"}, + {"port": 27015, "protocol": "tcp"}, + {"port": 27015, "protocol": "udp"}, + {"port": 27031, "protocol": "udp"}, + {"port": 27032, "protocol": "udp"}, + {"port": 27033, "protocol": "udp"}, + {"port": 27034, "protocol": "udp"}, + {"port": 27035, "protocol": "udp"}, + {"port": 27036, "protocol": "tcp"}, + {"port": 27036, "protocol": "udp"} + ] + + server: + hostname: 'satisfactory-server' + image: 'wolveix/satisfactory-server:latest' + restart: unless-stopped + volumes: + - './data/config:/config' + - './data/certs/live/satisfactory.mvl.sh/fullchain.pem:/config/gamefiles/FactoryGame/Certificates/cert_chain.pem' + - './data/certs/live/satisfactory.mvl.sh/privkey.pem:/config/gamefiles/FactoryGame/Certificates/private_key.pem' + environment: + - MAXPLAYERS=4 + - PGID=1000 + - PUID=1000 + - ROOTLESS=false + - STEAMBETA=false + healthcheck: + test: [ "CMD", "bash", "/healthcheck.sh" ] + interval: 30s + timeout: 10s + retries: 3 + start_period: 120s + depends_on: + certbot: + condition: service_completed_successfully + deploy: + resources: + reservations: + memory: 4G + limits: + memory: 8G + network_mode: 'host' + + certbot: + image: certbot/certbot + command: certonly --standalone --non-interactive --agree-tos -m menno@vleeuwen.me -d satisfactory.mvl.sh + # Uncomment this when requesting a new certificate, make sure to disable nginx-proxy-manager first since this conflicts with port 80 + # ports: + # - '80:80/tcp' + volumes: + - ./data/certs:/etc/letsencrypt + environment: + - CERTBOT_MAIL=menno@vleeuwen.me + - DOMAIN=satisfactory.mvl.sh