From c6b1f2eb7b55713445ca2b1f55868b8a193fee16 Mon Sep 17 00:00:00 2001 From: Don Harper Date: Wed, 6 Dec 2023 09:32:01 -0600 Subject: [PATCH] smaug | add podman config for speed test --- flake.nix | 1 + hosts/smaug/podman.nix | 125 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 hosts/smaug/podman.nix diff --git a/flake.nix b/flake.nix index c8765cc..861db08 100644 --- a/flake.nix +++ b/flake.nix @@ -40,6 +40,7 @@ networking.hostName = "smaug"; } ./hosts/smaug/hardware-configuration.nix + ./hosts/smaug/podman.nix inputs.nixos-hardware.nixosModules.lenovo-thinkpad-x260 ]; }; diff --git a/hosts/smaug/podman.nix b/hosts/smaug/podman.nix new file mode 100644 index 0000000..32871c2 --- /dev/null +++ b/hosts/smaug/podman.nix @@ -0,0 +1,125 @@ +# Auto-generated using compose2nix v0.1.6. +{ pkgs, lib, ... }: + +{ + # Runtime + virtualisation.podman = { + enable = true; + autoPrune.enable = true; + dockerCompat = true; + defaultNetwork.settings = { + # Required for container networking to be able to use names. + dns_enabled = true; + }; + }; + virtualisation.oci-containers.backend = "podman"; + + # Containers + virtualisation.oci-containers.containers."speedtest-db" = { + image = "mariadb:10"; + environment = { + MARIADB_DATABASE = "speedtest_tracker"; + MARIADB_PASSWORD = "password"; + MARIADB_RANDOM_ROOT_PASSWORD = "true"; + MARIADB_USER = "speedy"; + }; + volumes = [ + "/home/don/docker/speedtest-db:/var/lib/mysql:rw" + ]; + log-driver = "journald"; + extraOptions = [ + "--network-alias=db" + "--network=speedtest-default" + ]; + }; + systemd.services."podman-speedtest-db" = { + serviceConfig = { + Restart = lib.mkOverride 500 "always"; + }; + after = [ + "podman-network-speedtest-default.service" + ]; + requires = [ + "podman-network-speedtest-default.service" + ]; + partOf = [ + "podman-compose-speedtest-root.target" + ]; + wantedBy = [ + "podman-compose-speedtest-root.target" + ]; + }; + virtualisation.oci-containers.containers."speedtest-tracker" = { + image = "ghcr.io/alexjustesen/speedtest-tracker:latest"; + environment = { + DB_CONNECTION = "mysql"; + DB_DATABASE = "speedtest_tracker"; + DB_HOST = "db"; + DB_PASSWORD = "password"; + DB_PORT = "3306"; + DB_USERNAME = "speedy"; + PGID = "1000"; + PUID = "1000"; + TZ = "America/Chicago"; + }; + volumes = [ + "/etc/localtime:/etc/localtime:ro" + "/home/don/docker/speedtest/config:/config:rw" + "/home/don/docker/speedtest/web:/etc/ssl/web:rw" + ]; + ports = [ + "8080:80/tcp" + "8443:443/tcp" + ]; + dependsOn = [ + "speedtest-db" + ]; + log-driver = "journald"; + extraOptions = [ + "--network-alias=speedtest-tracker" + "--network=speedtest-default" + ]; + }; + systemd.services."podman-speedtest-tracker" = { + serviceConfig = { + Restart = lib.mkOverride 500 "always"; + }; + after = [ + "podman-network-speedtest-default.service" + ]; + requires = [ + "podman-network-speedtest-default.service" + ]; + partOf = [ + "podman-compose-speedtest-root.target" + ]; + wantedBy = [ + "podman-compose-speedtest-root.target" + ]; + }; + + # Networks + systemd.services."podman-network-speedtest-default" = { + path = [ pkgs.podman ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + ExecStop = "${pkgs.podman}/bin/podman network rm -f speedtest-default"; + }; + script = '' + podman network inspect speedtest-default || podman network create speedtest-default --opt isolate=true + ''; + partOf = [ "podman-compose-speedtest-root.target" ]; + wantedBy = [ "podman-compose-speedtest-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."podman-compose-speedtest-root" = { + unitConfig = { + Description = "Root target generated by compose2nix."; + }; + wantedBy = [ "multi-user.target" ]; + }; +}