80 lines
1.8 KiB
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" ];
|
|
};
|
|
}
|