Compare commits
2 Commits
df2c2aa1ae
...
60a6cf8e89
| Author | SHA1 | Date | |
|---|---|---|---|
| 60a6cf8e89 | |||
| 509c861529 |
@@ -18,6 +18,7 @@
|
||||
./containers/shared-postgres.nix
|
||||
./containers/synapse.nix
|
||||
./containers/traefik.nix
|
||||
./containers/users.nix
|
||||
];
|
||||
|
||||
# Enable common container config files in /etc/containers
|
||||
@@ -44,26 +45,6 @@
|
||||
#podman-compose # start group of containers for dev
|
||||
];
|
||||
|
||||
users.groups = {
|
||||
git = { };
|
||||
timetagger = { };
|
||||
};
|
||||
users.users = {
|
||||
gitea = {
|
||||
uid = 2001;
|
||||
isSystemUser = true;
|
||||
description = "System User for Gitea";
|
||||
extraGroups = [ "git" ];
|
||||
group = "git";
|
||||
};
|
||||
timetagger = {
|
||||
uid = 2002;
|
||||
isSystemUser = true;
|
||||
description = "System User for TimeTagger";
|
||||
group = "timetagger";
|
||||
};
|
||||
};
|
||||
|
||||
virtualisation.oci-containers.backend = "podman";
|
||||
virtualisation.oci-containers.containers =
|
||||
let
|
||||
|
||||
@@ -1,29 +1,17 @@
|
||||
{ config, ... }:
|
||||
let
|
||||
inherit (import ./lib.nix config) mkContainer mkMariaDbContainer havenisms;
|
||||
userIds = import ./user-ids.nix;
|
||||
in {
|
||||
imports = [
|
||||
(mkMariaDbContainer {
|
||||
name = "bookstack";
|
||||
uid = userIds.bookstack.uid;
|
||||
gid = userIds.bookstack.gid;
|
||||
uid = config.users.users.bookstack.uid;
|
||||
gid = config.users.groups.bookstack.gid;
|
||||
directory = "/tank/bookstack/db";
|
||||
passwordSecret = "bookstack_db";
|
||||
})
|
||||
];
|
||||
|
||||
users.groups.bookstack = {
|
||||
gid = userIds.bookstack.gid;
|
||||
};
|
||||
|
||||
users.users.bookstack = {
|
||||
uid = userIds.bookstack.uid;
|
||||
isSystemUser = true;
|
||||
description = "System User for Bookstack";
|
||||
group = "bookstack";
|
||||
};
|
||||
|
||||
sops.secrets = {
|
||||
bookstack_app_key = {
|
||||
restartUnits = [ "podman-bookstack.service" ];
|
||||
@@ -55,8 +43,8 @@ in {
|
||||
];
|
||||
environment = {
|
||||
APP_URL = "https://bookstack.${havenisms}";
|
||||
PID = toString userIds.bookstack.uid;
|
||||
GID = toString userIds.bookstack.gid;
|
||||
PID = toString config.users.users.bookstack.uid;
|
||||
GID = toString config.users.groups.bookstack.gid;
|
||||
DB_HOST = "bookstack-mariadb";
|
||||
DB_USERNAME = "bookstack";
|
||||
DB_DATABASE = "bookstack";
|
||||
|
||||
@@ -1,30 +1,17 @@
|
||||
{ config, ... }:
|
||||
let
|
||||
inherit (import ./lib.nix config) mkContainer mkPostgresContainer terakoda;
|
||||
userIds = import ./user-ids.nix;
|
||||
|
||||
in {
|
||||
imports = [
|
||||
(mkPostgresContainer {
|
||||
name = "focalboard";
|
||||
directory = "/tank/focalboard/db";
|
||||
uid = userIds.focalboard.uid;
|
||||
gid = userIds.focalboard.gid;
|
||||
uid = config.users.users.focalboard.uid;
|
||||
gid = config.users.groups.focalboard.gid;
|
||||
passwordSecret = "focalboard/database";
|
||||
})
|
||||
];
|
||||
|
||||
users.groups.focalboard = {
|
||||
gid = userIds.focalboard.gid;
|
||||
};
|
||||
|
||||
users.users.focalboard = {
|
||||
uid = userIds.focalboard.uid;
|
||||
isSystemUser = true;
|
||||
description = "System User for Focalboard";
|
||||
group = "focalboard";
|
||||
};
|
||||
|
||||
sops.secrets = {
|
||||
"focalboard/database" = {
|
||||
restartUnits = [ "podman-focalboard.service" "podman-focalboard-postgres.service" ];
|
||||
@@ -63,7 +50,7 @@ in {
|
||||
domain = terakoda;
|
||||
dependsOn = [ "focalboard-postgres" ];
|
||||
port = 8000;
|
||||
user = "${toString userIds.focalboard.uid}:${toString userIds.focalboard.gid}";
|
||||
user = "${toString config.users.users.focalboard.name}:${config.users.groups.focalboard.name}";
|
||||
volumes = [
|
||||
"/tank/focalboard/data/files:/opt/focalboard/data/files"
|
||||
"${config.sops.templates."focalboard-config.json".path}:/opt/focalboard/config.json:ro"
|
||||
|
||||
@@ -1,14 +1,6 @@
|
||||
# Common config for all mariadb containers
|
||||
{ ... }:
|
||||
let
|
||||
userIds = import ./user-ids.nix;
|
||||
in {
|
||||
users = {
|
||||
groups."mariadb" = {
|
||||
gid = userIds.mariadb.gid;
|
||||
};
|
||||
};
|
||||
|
||||
{
|
||||
sops.secrets."mariadb_root_password" = {
|
||||
restartUnits = [ "podman-mariadb.service" ];
|
||||
mode = "0440";
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
{ config, ... }:
|
||||
let
|
||||
inherit (import ./lib.nix config) mkContainer terakoda;
|
||||
userIds = import ./user-ids.nix;
|
||||
in {
|
||||
users = userIds.mkUserAndGroup "offen" userIds.offen;
|
||||
|
||||
sops = {
|
||||
secrets = {
|
||||
"offen/smtp-token" = {};
|
||||
@@ -30,7 +27,7 @@ in {
|
||||
image = "offen/offen";
|
||||
hostName = "offen";
|
||||
domain = terakoda;
|
||||
user = "${toString userIds.offen.uid}:${toString userIds.offen.gid}";
|
||||
user = "${toString config.users.users.offen.uid}:${toString config.users.groups.offen.gid}";
|
||||
port = 80;
|
||||
volumes = [
|
||||
"${config.sops.templates."offen.env".path}:/etc/offen/offen.env:ro"
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{ config, ... }:
|
||||
let
|
||||
inherit (import ./lib.nix config) mkContainer blazestar;
|
||||
userIds = import ./user-ids.nix;
|
||||
# The default is to run on port 80, which the pocket-id user cannot bind to.
|
||||
# We need a different port to be able to serve traffic.
|
||||
# The following ports in the container are already taken:
|
||||
@@ -11,17 +10,6 @@ let
|
||||
port = 8888;
|
||||
in
|
||||
{
|
||||
users.groups.pocket-id = {
|
||||
gid = userIds.pocket-id.gid;
|
||||
};
|
||||
|
||||
users.users.pocket-id = {
|
||||
uid = userIds.pocket-id.uid;
|
||||
isSystemUser = true;
|
||||
description = "System User for Pocket ID";
|
||||
group = "pocket-id";
|
||||
};
|
||||
|
||||
virtualisation.oci-containers.containers.pocket-id = mkContainer {
|
||||
image = "ghcr.io/pocket-id/pocket-id";
|
||||
dependsOn = [];
|
||||
@@ -45,8 +33,8 @@ in
|
||||
CADDY_PORT = toString port;
|
||||
# PORT = "3000"; # Frontend port
|
||||
# BACKEND_PORT = "8080"; # Backend port
|
||||
PUID = toString userIds.pocket-id.uid;
|
||||
PGID = toString userIds.pocket-id.gid;
|
||||
PUID = toString config.users.users."pocket-id".uid;
|
||||
PGID = toString config.users.groups."pocket-id".gid;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
{
|
||||
gitea = 2001;
|
||||
timetagger = 2002;
|
||||
pocket-id = {
|
||||
uid = 2003;
|
||||
gid = 2003;
|
||||
};
|
||||
bookstack = {
|
||||
uid = 2004;
|
||||
gid = 2004;
|
||||
};
|
||||
mariadb = {
|
||||
uid = 2005;
|
||||
gid = 2005;
|
||||
};
|
||||
focalboard = {
|
||||
uid = 2006;
|
||||
gid = 2006;
|
||||
};
|
||||
offen = {
|
||||
uid = 2007;
|
||||
gid = 2007;
|
||||
};
|
||||
|
||||
mkUserAndGroup = name: ids: {
|
||||
groups."${name}" = {
|
||||
gid = ids.gid;
|
||||
};
|
||||
|
||||
users."${name}" = {
|
||||
uid = ids.uid;
|
||||
isSystemUser = true;
|
||||
description = "System User for ${name}";
|
||||
group = "${name}";
|
||||
};
|
||||
};
|
||||
}
|
||||
54
system/hosts/mcp/containers/users.nix
Normal file
54
system/hosts/mcp/containers/users.nix
Normal file
@@ -0,0 +1,54 @@
|
||||
{ pkgs, ... }: let
|
||||
systemUsers = {
|
||||
gitea = {
|
||||
uid = 2001;
|
||||
extraGroups = [ "git" ];
|
||||
};
|
||||
# timetagger = 2002;
|
||||
pocket-id = 2003;
|
||||
bookstack = 2004;
|
||||
mariadb = 2005;
|
||||
focalboard = 2006;
|
||||
offen = 2007;
|
||||
public-html = {
|
||||
uid = 2008;
|
||||
shell = "${pkgs.git}/bin/git-shell";
|
||||
authorizedKeys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKPiqbLAXpBkjXnHLvz3VCd5i+VmYdd9dAcRt+8E1OQX drew@vega"
|
||||
];
|
||||
home = "/tank/web";
|
||||
};
|
||||
};
|
||||
|
||||
mkUser = name: value: {
|
||||
uid = value.uid or value;
|
||||
isSystemUser = true; # only affects UID allocation, but required
|
||||
description = "System User for ${name}";
|
||||
group = "${name}";
|
||||
shell = value.shell or null;
|
||||
extraGroups = value.extraGroups or [];
|
||||
openssh.authorizedKeys.keys = value.authorizedKeys or [];
|
||||
home = value.home or "/var/empty";
|
||||
};
|
||||
mkGroup = name: value: let
|
||||
# 1. Value if int
|
||||
# 2. "gid" if present
|
||||
# 3. "uid"
|
||||
gid =
|
||||
if builtins.isInt value
|
||||
then value
|
||||
else if builtins.hasAttr "gid" value
|
||||
then value.gid
|
||||
else value.uid;
|
||||
in {
|
||||
inherit gid;
|
||||
};
|
||||
in {
|
||||
users.users = builtins.mapAttrs mkUser systemUsers;
|
||||
users.groups = (builtins.mapAttrs mkGroup systemUsers) // {
|
||||
# Legacy groups.
|
||||
git = {
|
||||
gid = 992;
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user