Files
nixos/roles/dockerserver.nix

80 lines
1.8 KiB
Nix

# Module: roles/dockerserver
# Enables a Docker server
{
config,
lib,
pkgs,
pkgsUnstable,
inputs,
...
}:
with lib;
let
cfg = config.dockerserver;
refreshInterval = "5s";
dockerSocket = "unix:///run/docker.sock";
in
{
options.dockerserver = {
enable = mkEnableOption "Enables dockerserver role";
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgsUnstable; [
docker
docker-compose
];
virtualisation.docker = {
enable = true;
enableOnBoot = true;
storageDriver = "overlay2";
autoPrune = {
enable = true;
persistent = true;
};
};
environment.etc."alloy/docker.alloy".text = ''
discovery.docker "docker_containers" {
host = "${dockerSocket}"
refresh_interval = "${refreshInterval}"
}
discovery.relabel "docker_relabel" {
targets = []
rule {
source_labels = ["__meta_docker_container_name"]
regex = "/(.*)"
target_label = "container"
}
rule {
source_labels = ["__meta_docker_container_log_stream"]
target_label = "logstream"
}
rule {
source_labels = ["__meta_docker_container_label_logging_jobname"]
target_label = "job"
}
}
loki.source.docker "docker_logs" {
host = "${dockerSocket}"
targets = discovery.docker.docker_containers.targets
forward_to = [loki.write.default.receiver]
relabel_rules = discovery.relabel.docker_relabel.rules
refresh_interval = "${refreshInterval}"
}
'';
systemd.services.alloy.serviceConfig.SupplementaryGroups = [ "docker" ];
users.users.etorres.extraGroups = [ "docker" ];
};
}