Files
cyper-nix/nixos/roles/frontpage/frontpage.nix

73 lines
1.5 KiB
Nix

{ config, lib, ... }:
let
mkFlameInstance =
{
name,
port,
extraVolumes ? [ ],
}:
lib.nameValuePair name {
image = "pawelmalak/flame:2.4.0";
ports = [ "${toString port}:5005" ];
volumes = [
"/var/lib/flame-${name}:/app/data"
]
++ extraVolumes;
environmentFiles = [ config.sops.secrets."services/flame/${name}_password".path ];
};
instances = [
{
name = "phil";
port = 15005;
extraVolumes = [ "/var/run/docker.sock:/var/run/docker.sock" ];
}
{
name = "calvin";
port = 15006;
}
];
in
{
environment.persistence."/persist".directories = [
{
directory = "/var/lib/flame-phil";
user = "root";
group = "root";
mode = "0755";
}
{
directory = "/var/lib/flame-calvin";
user = "root";
group = "root";
mode = "0755";
}
{
directory = "/var/lib/docker";
user = "root";
group = "root";
mode = "0710";
}
{
directory = "/var/lib/private";
user = "root";
group = "root";
mode = "0700";
}
];
sops.secrets = lib.listToAttrs (
map ({ name, ... }: lib.nameValuePair "services/flame/${name}_password" { }) instances
);
virtualisation = {
docker.enable = true;
oci-containers = {
backend = "docker";
containers = lib.listToAttrs (map mkFlameInstance instances);
};
};
networking.firewall.allowedTCPPorts = map ({ port, ... }: port) instances;
}