nixos: Add Gitea VM
This commit is contained in:
		@@ -349,7 +349,7 @@ in
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      "git.${pubDomain}" = {
 | 
			
		||||
        locations."/".proxyPass = "http://shill-vm.${domain}:3000";
 | 
			
		||||
        locations."/".proxyPass = "http://git-vm.${domain}:3000";
 | 
			
		||||
        useACMEHost = pubDomain;
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,7 @@ in
 | 
			
		||||
        inherit (lib.my) networkdAssignment;
 | 
			
		||||
      in
 | 
			
		||||
      {
 | 
			
		||||
        imports = [ "${modulesPath}/profiles/qemu-guest.nix" ./gitea.nix ];
 | 
			
		||||
        imports = [ "${modulesPath}/profiles/qemu-guest.nix" ];
 | 
			
		||||
 | 
			
		||||
        config = mkMerge [
 | 
			
		||||
          {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,143 +0,0 @@
 | 
			
		||||
{ lib, pkgs, config, assignments, allAssignments, ... }:
 | 
			
		||||
let
 | 
			
		||||
  inherit (lib.my.c) pubDomain;
 | 
			
		||||
  inherit (lib.my.c.colony) prefixes;
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  config = {
 | 
			
		||||
    fileSystems = {
 | 
			
		||||
      "/var/lib/gitea" = {
 | 
			
		||||
        device = "/dev/disk/by-label/git";
 | 
			
		||||
        fsType = "ext4";
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    users = {
 | 
			
		||||
      users.git = {
 | 
			
		||||
        description = "Gitea Service";
 | 
			
		||||
        home = config.services.gitea.stateDir;
 | 
			
		||||
        useDefaultShell = true;
 | 
			
		||||
        group = config.services.gitea.group;
 | 
			
		||||
        isSystemUser = true;
 | 
			
		||||
      };
 | 
			
		||||
      groups.git = {};
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    systemd = {
 | 
			
		||||
      services = {
 | 
			
		||||
        gitea.preStart =
 | 
			
		||||
        let
 | 
			
		||||
          repSec = "${pkgs.replace-secret}/bin/replace-secret";
 | 
			
		||||
          confPath = "${config.services.gitea.customDir}/conf/app.ini";
 | 
			
		||||
        in
 | 
			
		||||
        ''
 | 
			
		||||
          gitea_extra_setup() {
 | 
			
		||||
            chmod u+w '${confPath}'
 | 
			
		||||
            ${repSec} '#miniosecret#' '${config.age.secrets."gitea/minio.txt".path}' '${confPath}'
 | 
			
		||||
            chmod u-w '${confPath}'
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          (umask 027; gitea_extra_setup)
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    services = {
 | 
			
		||||
      gitea = {
 | 
			
		||||
        enable = true;
 | 
			
		||||
        user = "git";
 | 
			
		||||
        group = "git";
 | 
			
		||||
        appName = "/dev/player0 git";
 | 
			
		||||
        stateDir = "/var/lib/gitea";
 | 
			
		||||
        lfs.enable = true;
 | 
			
		||||
        database = {
 | 
			
		||||
          type = "postgres";
 | 
			
		||||
          createDatabase = false;
 | 
			
		||||
          host = "colony-psql";
 | 
			
		||||
          user = "gitea";
 | 
			
		||||
          passwordFile = config.age.secrets."gitea/db.txt".path;
 | 
			
		||||
        };
 | 
			
		||||
        mailerPasswordFile = config.age.secrets."gitea/mail.txt".path;
 | 
			
		||||
        settings = {
 | 
			
		||||
          server = {
 | 
			
		||||
            DOMAIN = "git.${pubDomain}";
 | 
			
		||||
            HTTP_ADDR = "::";
 | 
			
		||||
            ROOT_URL = "https://git.${pubDomain}";
 | 
			
		||||
          };
 | 
			
		||||
          service = {
 | 
			
		||||
            DISABLE_REGISTRATION = true;
 | 
			
		||||
            ENABLE_NOTIFY_MAIL = true;
 | 
			
		||||
          };
 | 
			
		||||
          session = {
 | 
			
		||||
            COOKIE_SECURE = true;
 | 
			
		||||
          };
 | 
			
		||||
          repository = {
 | 
			
		||||
            DEFAULT_BRANCH = "master";
 | 
			
		||||
          };
 | 
			
		||||
          mailer = {
 | 
			
		||||
            ENABLED = true;
 | 
			
		||||
            PROTOCOL = "smtp+starttls";
 | 
			
		||||
            SMTP_ADDR = "mail.nul.ie";
 | 
			
		||||
            SMTP_PORT = 587;
 | 
			
		||||
            USER = "git@nul.ie";
 | 
			
		||||
            FROM = "Gitea <git@nul.ie>";
 | 
			
		||||
          };
 | 
			
		||||
          "email.incoming" = {
 | 
			
		||||
            ENABLED = true;
 | 
			
		||||
            HOST = "mail.nul.ie";
 | 
			
		||||
            PORT = 993;
 | 
			
		||||
            USE_TLS = true;
 | 
			
		||||
            USERNAME = "git@nul.ie";
 | 
			
		||||
            PASSWORD = "#mailerpass#";
 | 
			
		||||
            REPLY_TO_ADDRESS = "git+%{token}@nul.ie";
 | 
			
		||||
          };
 | 
			
		||||
          storage = {
 | 
			
		||||
            STORAGE_TYPE = "minio";
 | 
			
		||||
            SERVE_DIRECT = true;
 | 
			
		||||
            MINIO_ENDPOINT = "s3.${pubDomain}";
 | 
			
		||||
            MINIO_ACCESS_KEY_ID = "gitea";
 | 
			
		||||
            MINIO_SECRET_ACCESS_KEY = "#miniosecret#";
 | 
			
		||||
            MINIO_BUCKET = "gitea";
 | 
			
		||||
            MINIO_LOCATION = "eu-central-1";
 | 
			
		||||
            MINIO_USE_SSL = true;
 | 
			
		||||
          };
 | 
			
		||||
          actions = {
 | 
			
		||||
            ENABLED = true;
 | 
			
		||||
          };
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    my = {
 | 
			
		||||
      secrets = {
 | 
			
		||||
        files =
 | 
			
		||||
        let
 | 
			
		||||
          ownedByGit = {
 | 
			
		||||
            owner = "git";
 | 
			
		||||
            group = "git";
 | 
			
		||||
          };
 | 
			
		||||
        in
 | 
			
		||||
        {
 | 
			
		||||
          "gitea/db.txt" = ownedByGit;
 | 
			
		||||
          "gitea/mail.txt" = ownedByGit;
 | 
			
		||||
          "gitea/minio.txt" = ownedByGit;
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      firewall.extraRules = ''
 | 
			
		||||
        table inet filter {
 | 
			
		||||
          chain input {
 | 
			
		||||
            ip saddr ${prefixes.all.v4} tcp dport 3000 accept
 | 
			
		||||
            ip6 saddr ${prefixes.all.v6} tcp dport 3000 accept
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        table inet nat {
 | 
			
		||||
          chain prerouting {
 | 
			
		||||
            ip daddr ${assignments.internal.ipv4.address} tcp dport { http, https } dnat to ${allAssignments.middleman.internal.ipv4.address}
 | 
			
		||||
            ip6 daddr ${assignments.internal.ipv6.address} tcp dport { http, https } dnat to ${allAssignments.middleman.internal.ipv6.address}
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      '';
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user