Wip Migrate podman
This commit is contained in:
@@ -4,8 +4,7 @@ let
|
|||||||
enabledConfigs = lib.filterAttrs (name: c: c.enable) cfg;
|
enabledConfigs = lib.filterAttrs (name: c: c.enable) cfg;
|
||||||
containerSetsList = lib.mapAttrsToList (name: containerCfg:
|
containerSetsList = lib.mapAttrsToList (name: containerCfg:
|
||||||
import (./defs + "/${name}.nix") {
|
import (./defs + "/${name}.nix") {
|
||||||
inherit config pkgs lib ;
|
inherit config pkgs lib containerCfg;
|
||||||
inherit (containerCfg) port special_param;
|
|
||||||
}
|
}
|
||||||
) enabledConfigs;
|
) enabledConfigs;
|
||||||
mergedContainers = lib.attrsets.mergeAttrsList (lib.map(e: e.containers) containerSetsList);
|
mergedContainers = lib.attrsets.mergeAttrsList (lib.map(e: e.containers) containerSetsList);
|
||||||
@@ -16,5 +15,16 @@ in
|
|||||||
backend = "podman";
|
backend = "podman";
|
||||||
containers = mergedContainers;
|
containers = mergedContainers;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
systemd.services.init-podman-network = {
|
||||||
|
description = "Create Podman network with subnet";
|
||||||
|
after = [ "network.target" ];
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
serviceConfig.Type = "oneshot";
|
||||||
|
script = ''
|
||||||
|
${pkgs.podman}/bin/podman network inspect podnet || \
|
||||||
|
${pkgs.podman}/bin/podman network create --subnet=10.88.0.0/16 podnet
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{ config, containerCfg, pkgs, lib, ... }:
|
||||||
let serverCfg = config.syscfg.server;
|
let serverCfg = config.syscfg.server;
|
||||||
in {
|
in {
|
||||||
systemd.tmfiles.rules = [
|
systemd.tmfiles.rules = [
|
||||||
@@ -6,17 +6,6 @@ in {
|
|||||||
"d ${serverCfg.dataPath}/authentik/template 0755 root root -"
|
"d ${serverCfg.dataPath}/authentik/template 0755 root root -"
|
||||||
];
|
];
|
||||||
containers = {
|
containers = {
|
||||||
auth_postgresql = {
|
|
||||||
image = "postgres:14-alpine";
|
|
||||||
hostname = "auth_postgresql";
|
|
||||||
volumes = [ ];
|
|
||||||
environment = {
|
|
||||||
POSTGRES_PASSWORD = "/run/secrets/AUTHENTIK_POSTGRESQL__PASSWORD";
|
|
||||||
POSTGRES_USER = "authentik";
|
|
||||||
POSTGRES_DB = "authentik";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
auth_redis = {
|
auth_redis = {
|
||||||
image = "redis:alpine";
|
image = "redis:alpine";
|
||||||
hostname = "auth_redis";
|
hostname = "auth_redis";
|
||||||
@@ -52,11 +41,15 @@ in {
|
|||||||
"traefik.http.routers.sso.entrypoints" = "web-secure";
|
"traefik.http.routers.sso.entrypoints" = "web-secure";
|
||||||
"traefik.http.routers.sso.rule" = "Host(`sso.${serverCfg.hostDomain}`)";
|
"traefik.http.routers.sso.rule" = "Host(`sso.${serverCfg.hostDomain}`)";
|
||||||
"traefik.http.routers.sso.tls" = "true";
|
"traefik.http.routers.sso.tls" = "true";
|
||||||
"traefik.http.services.sso.loadbalancer.server.port" = "9000";
|
"traefik.http.services.sso.loadbalancer.server.port" = "${toString containerCfg.port}";
|
||||||
};
|
};
|
||||||
cmd = [ "server" ];
|
cmd = [ "server" ];
|
||||||
|
extraOptions = [
|
||||||
|
"--network=portnet"
|
||||||
|
"--ip=${containerCfg.ip}"
|
||||||
|
];
|
||||||
ports = [
|
ports = [
|
||||||
"9999:9000"
|
"9999:${toString containerCfg.port}"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -71,8 +64,8 @@ in {
|
|||||||
environment = {
|
environment = {
|
||||||
"AUTHENTIK_REDIS__HOST" = "auth_redis";
|
"AUTHENTIK_REDIS__HOST" = "auth_redis";
|
||||||
"AUTHENTIK_POSTGRESQL__HOST" = "auth_postgresql";
|
"AUTHENTIK_POSTGRESQL__HOST" = "auth_postgresql";
|
||||||
"AUTHENTIK_POSTGRESQL__USER" = "authentik";
|
"AUTHENTIK_POSTGRESQL__USER" = "authentik_user";
|
||||||
"AUTHENTIK_POSTGRESQL__NAME" = "authentik";
|
"AUTHENTIK_POSTGRESQL__NAME" = "authentik_db";
|
||||||
"AUTHENTIK_POSTGRESQL__PASSWORD" = "AUTHENTIK_DB_PASSWORD";
|
"AUTHENTIK_POSTGRESQL__PASSWORD" = "AUTHENTIK_DB_PASSWORD";
|
||||||
"AUTHENTIK_SECRET_KEY" = "AUTHENTIK_SECRET_KEY";
|
"AUTHENTIK_SECRET_KEY" = "AUTHENTIK_SECRET_KEY";
|
||||||
};
|
};
|
||||||
|
|||||||
35
modules/server/database/default.nix
Normal file
35
modules/server/database/default.nix
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
let
|
||||||
|
listNames = config.syscfg.server.db;
|
||||||
|
|
||||||
|
containerNames = lib.mapAttrsToList
|
||||||
|
(name: cfg: name)
|
||||||
|
(lib.filterAttrs (name: cfg: cfg.db or false) config.syscfg.server.containers);
|
||||||
|
|
||||||
|
allApps = lib.unique (listNames ++ containerNames);
|
||||||
|
|
||||||
|
in {
|
||||||
|
services.postgresql = {
|
||||||
|
enable = true;
|
||||||
|
ensureDatabases = map (name: "${name}_db") allApps;
|
||||||
|
ensureUsers = map (name: { name = "${name}_user"; }) allApps;
|
||||||
|
backup = {
|
||||||
|
enable = true;
|
||||||
|
location = "/var/lib/postgresql/backups";
|
||||||
|
startAt = "-- 04:00:00"; # Runs every day at 4 AM
|
||||||
|
backupAll = true; # Backs up all databases and roles
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.postgresql.postStart = lib.mkAfter ''
|
||||||
|
${lib.concatMapStringsSep "\n" (name: ''
|
||||||
|
$PSQL -tAc "ALTER DATABASE ${name}_db OWNER TO ${name}_user;"
|
||||||
|
|
||||||
|
if [ -f "${config.sops.secrets."${name}_pass".path}" ]; then
|
||||||
|
PASS=$(cat "${config.sops.secrets."${name}_pass".path}")
|
||||||
|
$PSQL -tAc "ALTER USER ${name}_user WITH PASSWORD '$PASS';"
|
||||||
|
fi
|
||||||
|
'') allApps}
|
||||||
|
'';
|
||||||
|
}
|
||||||
@@ -106,6 +106,8 @@ let
|
|||||||
type = types.attrsOf (types.submodule {
|
type = types.attrsOf (types.submodule {
|
||||||
options = {
|
options = {
|
||||||
enable = mkOption { type = types.bool;default = false; };
|
enable = mkOption { type = types.bool;default = false; };
|
||||||
|
db = mkOption { type = types.bool;default = false; };
|
||||||
|
ip = mkOption { type = types.str; };
|
||||||
port = mkOption { type = types.port; };
|
port = mkOption { type = types.port; };
|
||||||
extraParam = mkOption { type = types.str; default = ""; };
|
extraParam = mkOption { type = types.str; default = ""; };
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -31,7 +31,12 @@
|
|||||||
|
|
||||||
containers = {
|
containers = {
|
||||||
#cloud = {enable = true;};
|
#cloud = {enable = true;};
|
||||||
authentik = {enable = true;};
|
authentik = {
|
||||||
|
enable = true;
|
||||||
|
db = true;
|
||||||
|
ip = "10.88.0.125";
|
||||||
|
port = 9000 ;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user