From 536929ec41b7447946740b1a3a84039c8bc24261 Mon Sep 17 00:00:00 2001 From: prescientmoon Date: Fri, 11 Oct 2024 14:12:05 +0200 Subject: [PATCH] Set up self hosted 5d diplomacy --- hosts/nixos/common/global/ports.nix | 1 + hosts/nixos/common/optional/oci.nix | 5 + hosts/nixos/lapetus/default.nix | 9 +- .../lapetus/services/5d-diplomacy/default.nix | 9 ++ .../services/5d-diplomacy/generated.nix | 150 ++++++++++++++++++ 5 files changed, 170 insertions(+), 4 deletions(-) create mode 100644 hosts/nixos/lapetus/services/5d-diplomacy/default.nix create mode 100644 hosts/nixos/lapetus/services/5d-diplomacy/generated.nix diff --git a/hosts/nixos/common/global/ports.nix b/hosts/nixos/common/global/ports.nix index 49bbaee..21a0581 100644 --- a/hosts/nixos/common/global/ports.nix +++ b/hosts/nixos/common/global/ports.nix @@ -25,5 +25,6 @@ guacamole = 8421; syncthing = 8422; forgejo-ssh = 8423; + "5d-diplomacy" = 8424; }; } diff --git a/hosts/nixos/common/optional/oci.nix b/hosts/nixos/common/optional/oci.nix index 858bd8b..b8520a5 100644 --- a/hosts/nixos/common/optional/oci.nix +++ b/hosts/nixos/common/optional/oci.nix @@ -1,6 +1,11 @@ { virtualisation.oci-containers.backend = "docker"; + virtualisation.docker = { + enable = true; + autoPrune.enable = true; + }; + environment.persistence = { "/persist/state".directories = [ "/var/lib/containers/storage" ]; "/persist/local/cache".directories = [ "/var/lib/containers/cache" ]; diff --git a/hosts/nixos/lapetus/default.nix b/hosts/nixos/lapetus/default.nix index 26ffd37..0da105c 100644 --- a/hosts/nixos/lapetus/default.nix +++ b/hosts/nixos/lapetus/default.nix @@ -19,14 +19,16 @@ # ./services/commafeed.nix # ./services/ddclient.nix + # ./services/guacamole + # ./services/intray.nix + # ./services/smos.nix + ./services/5d-diplomacy ./services/actual.nix ./services/cloudflared.nix ./services/diptime.nix ./services/forgejo.nix ./services/grafana.nix - ./services/guacamole ./services/homer.nix - # ./services/intray.nix ./services/invidious.nix ./services/jellyfin.nix ./services/jupyter.nix @@ -34,10 +36,9 @@ ./services/pounce.nix ./services/prometheus.nix ./services/prometheus.nix - ./services/qbittorrent.nix # turned on/off depending on whether my vpn is paid for + ./services/qbittorrent.nix ./services/radicale.nix ./services/redlib.nix - # ./services/smos.nix ./services/vaultwarden.nix ./services/whoogle.nix ./services/zfs.nix diff --git a/hosts/nixos/lapetus/services/5d-diplomacy/default.nix b/hosts/nixos/lapetus/services/5d-diplomacy/default.nix new file mode 100644 index 0000000..f2687f8 --- /dev/null +++ b/hosts/nixos/lapetus/services/5d-diplomacy/default.nix @@ -0,0 +1,9 @@ +{ config, ... }: +{ + imports = [ ./generated.nix ]; + + satellite.cloudflared.at.dip.port = config.satellite.ports."5d-diplomacy"; + virtualisation.oci-containers.containers."5d-diplomacy-frontend".ports = [ + "${toString config.satellite.ports."5d-diplomacy"}:8080" + ]; +} diff --git a/hosts/nixos/lapetus/services/5d-diplomacy/generated.nix b/hosts/nixos/lapetus/services/5d-diplomacy/generated.nix new file mode 100644 index 0000000..e3d11f3 --- /dev/null +++ b/hosts/nixos/lapetus/services/5d-diplomacy/generated.nix @@ -0,0 +1,150 @@ +# Auto-generated using compose2nix v0.3.1-pre. +{ pkgs, lib, ... }: + +{ + # Containers + virtualisation.oci-containers.containers."5d-diplomacy-backend" = { + image = "localhost/compose2nix-5d-diplomacy-backend"; + environment = { + "ConnectionStrings__Database" = "Server=mssql;Database=diplomacy;User=SA;Password=Passw0rd@;Encrypt=True;TrustServerCertificate=True"; + }; + log-driver = "journald"; + extraOptions = [ + "--network-alias=backend" + "--network=5d-diplomacy_default" + ]; + }; + systemd.services."docker-5d-diplomacy-backend" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + RestartMaxDelaySec = lib.mkOverride 90 "1m"; + RestartSec = lib.mkOverride 90 "100ms"; + RestartSteps = lib.mkOverride 90 9; + }; + after = [ + "docker-build-5d-diplomacy-backend.service" + "docker-network-5d-diplomacy_default.service" + ]; + requires = [ + "docker-build-5d-diplomacy-backend.service" + "docker-network-5d-diplomacy_default.service" + ]; + partOf = [ "docker-compose-5d-diplomacy-root.target" ]; + wantedBy = [ "docker-compose-5d-diplomacy-root.target" ]; + }; + virtualisation.oci-containers.containers."5d-diplomacy-frontend" = { + image = "localhost/compose2nix-5d-diplomacy-frontend"; + ports = [ "127.0.0.1:5173:8080/tcp" ]; + log-driver = "journald"; + extraOptions = [ + "--network-alias=frontend" + "--network=5d-diplomacy_default" + ]; + }; + systemd.services."docker-5d-diplomacy-frontend" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + RestartMaxDelaySec = lib.mkOverride 90 "1m"; + RestartSec = lib.mkOverride 90 "100ms"; + RestartSteps = lib.mkOverride 90 9; + }; + after = [ + "docker-build-5d-diplomacy-frontend.service" + "docker-network-5d-diplomacy_default.service" + ]; + requires = [ + "docker-build-5d-diplomacy-frontend.service" + "docker-network-5d-diplomacy_default.service" + ]; + partOf = [ "docker-compose-5d-diplomacy-root.target" ]; + wantedBy = [ "docker-compose-5d-diplomacy-root.target" ]; + }; + virtualisation.oci-containers.containers."5d-diplomacy-mssql" = { + image = "mcr.microsoft.com/mssql/server:2022-latest"; + environment = { + "ACCEPT_EULA" = "y"; + "MSSQL_SA_PASSWORD" = "Passw0rd@"; + }; + volumes = [ + "/home/moon/projects/5d-diplomacy-with-multiverse-time-travel/mssql-data/data:/var/opt/mssql/data:rw" + "/home/moon/projects/5d-diplomacy-with-multiverse-time-travel/mssql-data/log:/var/opt/mssql/log:rw" + "/home/moon/projects/5d-diplomacy-with-multiverse-time-travel/mssql-data/secrets:/var/opt/mssql/secrets:rw" + ]; + user = "root"; + log-driver = "journald"; + extraOptions = [ + "--network-alias=mssql" + "--network=5d-diplomacy_default" + ]; + }; + systemd.services."docker-5d-diplomacy-mssql" = { + serviceConfig = { + Restart = lib.mkOverride 90 "no"; + }; + after = [ "docker-network-5d-diplomacy_default.service" ]; + requires = [ "docker-network-5d-diplomacy_default.service" ]; + partOf = [ "docker-compose-5d-diplomacy-root.target" ]; + wantedBy = [ "docker-compose-5d-diplomacy-root.target" ]; + }; + + # Networks + systemd.services."docker-network-5d-diplomacy_default" = { + path = [ pkgs.docker ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + ExecStop = "docker network rm -f 5d-diplomacy_default"; + }; + script = '' + docker network inspect 5d-diplomacy_default || docker network create 5d-diplomacy_default + ''; + partOf = [ "docker-compose-5d-diplomacy-root.target" ]; + wantedBy = [ "docker-compose-5d-diplomacy-root.target" ]; + }; + + # Builds + systemd.services."docker-build-5d-diplomacy-backend" = { + path = [ + pkgs.docker + pkgs.git + ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + TimeoutSec = 300; + }; + script = '' + cd /home/moon/projects/5d-diplomacy-with-multiverse-time-travel/server + docker build -t compose2nix-5d-diplomacy-backend . + ''; + partOf = [ "docker-compose-5d-diplomacy-root.target" ]; + wantedBy = [ "docker-compose-5d-diplomacy-root.target" ]; + }; + systemd.services."docker-build-5d-diplomacy-frontend" = { + path = [ + pkgs.docker + pkgs.git + ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + TimeoutSec = 300; + }; + script = '' + cd /home/moon/projects/5d-diplomacy-with-multiverse-time-travel/client + docker build -t compose2nix-5d-diplomacy-frontend . + ''; + partOf = [ "docker-compose-5d-diplomacy-root.target" ]; + wantedBy = [ "docker-compose-5d-diplomacy-root.target" ]; + }; + + # Root service + # When started, this will automatically create all resources and start + # the containers. When stopped, this will teardown all resources. + systemd.targets."docker-compose-5d-diplomacy-root" = { + unitConfig = { + Description = "Root target generated by compose2nix."; + }; + wantedBy = [ "multi-user.target" ]; + }; +}