docker.nix (7647B)
1 { pkgs, username, domain, timezone, todosecret, htpasswd, vpnusername, vpnpassword, ... }: { 2 3 # Runtime 4 virtualisation.docker.enable = true; 5 virtualisation.docker.autoPrune.enable = true; 6 users.extraUsers.${username}.extraGroups = ["docker"]; 7 8 # Create Network 9 systemd.services.docker-create-proxy-network = { 10 description = "Create proxy Docker network if not exists"; 11 after = [ "docker.service" ]; 12 requires = [ "docker.service" ]; 13 wantedBy = [ "multi-user.target" ]; 14 serviceConfig = { 15 Type = "oneshot"; 16 ExecStart = "${pkgs.bash}/bin/bash -c '${pkgs.docker}/bin/docker network inspect proxy >/dev/null 2>&1 || ${pkgs.docker}/bin/docker network create proxy'"; 17 RemainAfterExit = true; 18 }; 19 }; 20 21 # Firewall 22 networking.firewall.allowedTCPPorts = [ 80 443 ]; 23 24 # Containers 25 virtualisation.oci-containers = { 26 backend = "docker"; 27 containers = { 28 29 baikal = { 30 autoStart = true; 31 dependsOn = [ "caddy" ]; 32 image = "ckulka/baikal:nginx"; 33 labels = { "caddy" = "dav.${domain}"; "caddy.reverse_proxy" = "{{upstreams 80}}"; }; 34 networks = [ "proxy" ]; 35 volumes = [ "/home/${username}/docker/baikal:/var/www/baikal/Specific" "/home/${username}/docker/baikal:/var/www/baikal/config" ]; 36 }; 37 38 caddy = { 39 autoStart = true; 40 environment = { CADDY_INGRESS_NETWORKS = "proxy"; }; 41 image = "lucaslorentz/caddy-docker-proxy"; 42 networks = [ "proxy" ]; 43 ports = [ "80:80" "443:443" ]; 44 volumes = [ "/var/run/docker.sock:/var/run/docker.sock" "/home/${username}/docker/caddy:/data" ]; 45 }; 46 47 changedetection = { 48 autoStart = true; 49 dependsOn = [ "caddy" ]; 50 environment = { PGID = "100"; PUID = "1000"; LC_ALL = "en_US.UTF-8";}; 51 image = "lscr.io/linuxserver/changedetection.io"; 52 labels = { "caddy" = "diff.${domain}"; "caddy.reverse_proxy" = "{{upstreams 5000}}"; }; 53 networks = [ "proxy" ]; 54 volumes = [ "/home/${username}/docker/changedetection:/config" ]; 55 }; 56 57 docker-rss = { 58 autoStart = true; 59 dependsOn = [ "caddy" ]; 60 image = "theconnman/docker-hub-rss"; 61 labels = { "caddy" = "dock.${domain}"; "caddy.reverse_proxy" = "{{upstreams 3000}}"; }; 62 networks = [ "proxy" ]; 63 }; 64 65 echoip = { 66 autoStart = true; 67 dependsOn = [ "caddy" ]; 68 cmd = [ "-H" "X-Forwarded-For" ]; 69 image = "mpolden/echoip"; 70 labels = { "caddy" = "ip.${domain}"; "caddy.reverse_proxy" = "{{upstreams 8080}}"; }; 71 networks = [ "proxy" ]; 72 }; 73 74 freshrss = { 75 autoStart = true; 76 dependsOn = [ "caddy" ]; 77 environment = { PGID = "100"; PUID = "1000"; TZ = "${timezone}";}; 78 image = "lscr.io/linuxserver/freshrss"; 79 labels = { "caddy" = "rss.${domain}"; "caddy.reverse_proxy" = "{{upstreams 80}}"; }; 80 networks = [ "proxy" ]; 81 volumes = [ "/home/${username}/docker/freshrss:/config" ]; 82 }; 83 84 h5ai = { 85 autoStart = true; 86 dependsOn = [ "caddy" ]; 87 environment = { PGID = "100"; PUID = "1000"; TZ = "${timezone}";}; 88 image = "awesometic/h5ai"; 89 labels = { "caddy" = "pub.${domain}"; "caddy.reverse_proxy" = "{{upstreams 80}}"; "caddy.basic_auth" = "/.tank/*"; "caddy.basic_auth.${username}" = "${htpasswd}";}; 90 networks = [ "proxy" ]; 91 volumes = [ "/home/${username}/vault/pub:/h5ai" "/tank/complete:/h5ai/.tank" "/home/${username}/docker/h5ai:/config/h5ai/" ]; 92 }; 93 94 hugo = { 95 autoStart = true; 96 dependsOn = [ "caddy" ]; 97 cmd = [ "server" "--watch=true" "--disableLiveReload" "--minify" "--source=/src" "--baseURL=https://${domain}" "--bind=0.0.0.0" "--appendPort=false" "--buildFuture" ]; 98 image = "klakegg/hugo"; 99 labels = { "caddy" = "${domain}, blog.${domain}, www.${domain}"; "caddy.reverse_proxy" = "{{upstreams 1313}}"; }; 100 networks = [ "proxy" ]; 101 volumes = [ "/home/${username}/vault/src/blog.${domain}:/src" ]; 102 }; 103 104 jackett = { 105 autoStart = true; 106 dependsOn = [ "caddy" ]; 107 environment = { PGID = "100"; PUID = "1000"; TZ = "${timezone}";}; 108 image = "lscr.io/linuxserver/jackett"; 109 labels = { "caddy" = "jack.${domain}"; "caddy.reverse_proxy" = "{{upstreams 9117}}"; }; 110 networks = [ "proxy" ]; 111 volumes = [ "/home/${username}/docker/jackett:/config" "/home/${username}/vault/watch:/downloads" ]; 112 }; 113 114 stagit = { 115 autoStart = true; 116 dependsOn = [ "caddy" ]; 117 environment = { PGID = "100"; PUID = "1000";}; 118 image = "lscr.io/linuxserver/nginx"; 119 labels = { "caddy" = "git.${domain}"; "caddy.reverse_proxy" = "{{upstreams 80}}"; }; 120 networks = [ "proxy" ]; 121 volumes = [ "/home/${username}/docker/stagit:/config/www:ro" ]; 122 }; 123 124 transmission = { 125 autoStart = true; 126 capabilities = { NET_ADMIN = true; }; 127 dependsOn = [ "caddy" ]; 128 devices = [ "/dev/net/tun" ]; 129 environment = { PGID = "100"; PUID = "1000"; LOCAL_NETWORK = "10.0.0.0/24"; NORDVPN_CATEGORY = "p2p"; NORDVPN_COUNTRY = "GB"; OPENVPN_PASSWORD = "${vpnpassword}"; OPENVPN_PROVIDER = "NORDVPN"; OPENVPN_USERNAME = "${vpnusername}"; }; 130 extraOptions = [ "--dns=8.8.8.8" "--dns=9.9.9.9" ]; 131 image = "haugene/transmission-openvpn"; 132 networks = [ "proxy" ]; 133 ports = [ "9091:9091" "51413:51413" ]; 134 volumes = [ "/tank/complete:/data/completed" "/tank/incomplete:/data/incomplete" "/home/${username}/docker/transmission:/data/transmission-home" "/home/${username}/vault/watch:/data/watch" ]; 135 }; 136 137 transmission-proxy = { 138 autoStart = true; 139 dependsOn = [ "caddy" "transmission" ]; 140 extraOptions = [ "--link=transmission" ]; 141 image = "haugene/transmission-openvpn-proxy"; 142 labels = { "caddy" = "tor.${domain}"; "caddy.reverse_proxy" = "{{upstreams 8080}}"; "caddy.basic_auth" = "*"; "caddy.basic_auth.${username}" = "${htpasswd}";}; 143 networks = [ "proxy" ]; 144 }; 145 146 transmission-rss = { 147 autoStart = true; 148 dependsOn = [ "transmission" ]; 149 environment = { GID = "100"; UID = "1000"; }; 150 extraOptions = [ "--link=transmission" ]; 151 image = "haugene/transmission-rss"; 152 networks = [ "proxy" ]; 153 volumes = [ "/home/${username}/docker/transmission-rss/config:/etc/transmission-rss.conf" "/home/${username}/docker/transmission-rss/seen:/etc/transmission-rss.seen" ]; 154 }; 155 156 vaultwarden = { 157 autoStart = true; 158 dependsOn = [ "caddy" ]; 159 environment = { WEBSOCKET_ENABLED = "false"; SIGNUPS_ALLOWED = "false"; }; 160 image = "vaultwarden/server:alpine"; 161 labels = { "caddy" = "pass.${domain}"; "caddy.reverse_proxy" = "{{upstreams 80}}"; }; 162 networks = [ "proxy" ]; 163 volumes = [ "/home/${username}/docker/vaultwarden:/data" ]; 164 }; 165 166 vikunja = { 167 autoStart = true; 168 dependsOn = [ "caddy" ]; 169 environment = { PGID = "100"; PUID = "1000"; VIKUNJA_SERVICE_ENABLEREGISTRATION = "false"; VIKUNJA_SERVICE_ENABLETASKCOMMENTS = "false"; VIKUNJA_SERVICE_JWTSECRET = "${todosecret}"; VIKUNJA_SERVICE_PUBLICURL = "https://todo.${domain}/"; VIKUNJA_SERVICE_TIMEZONE = "${timezone}";}; 170 image = "vikunja/vikunja"; 171 labels = { "caddy" = "todo.${domain}"; "caddy.reverse_proxy" = "{{upstreams 3456}}"; }; 172 networks = [ "proxy" ]; 173 volumes = [ "/home/${username}/docker/vikunja:/db" ]; 174 }; 175 176 }; 177 }; 178 }