forked from CCCHH/nix-infra
		
	Add and configure new Git server using Forgejo
This commit is contained in:
		
					parent
					
						
							
								26132b1526
							
						
					
				
			
			
				commit
				
					
						ec5430ee34
					
				
			
		
					 7 changed files with 182 additions and 0 deletions
				
			
		
							
								
								
									
										7
									
								
								config/hosts/git/configuration.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								config/hosts/git/configuration.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
{ ... }:
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  networking.hostName = "git";
 | 
			
		||||
 | 
			
		||||
  system.stateVersion = "23.11";
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								config/hosts/git/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								config/hosts/git/default.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
{ config, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  imports = [
 | 
			
		||||
    ./configuration.nix
 | 
			
		||||
    ./forgejo.nix
 | 
			
		||||
    ./networking.nix
 | 
			
		||||
    ./nginx.nix
 | 
			
		||||
    ./redis.nix
 | 
			
		||||
  ];
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										73
									
								
								config/hosts/git/forgejo.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								config/hosts/git/forgejo.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,73 @@
 | 
			
		|||
# Sources for this configuration:
 | 
			
		||||
# - https://forgejo.org/
 | 
			
		||||
# - https://forgejo.org/docs/latest/
 | 
			
		||||
# - https://forgejo.org/docs/latest/admin/database-preparation/
 | 
			
		||||
# - https://forgejo.org/docs/latest/admin/config-cheat-sheet/
 | 
			
		||||
# - https://forgejo.org/docs/latest/admin/recommendations/
 | 
			
		||||
# - https://codeberg.org/forgejo/forgejo/src/branch/forgejo/docs/content/administration/reverse-proxies.en-us.md
 | 
			
		||||
# - https://forgejo.org/docs/latest/admin/email-setup/
 | 
			
		||||
 | 
			
		||||
{ ... }:
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  services.forgejo = {
 | 
			
		||||
    enable = true;
 | 
			
		||||
    database.type = "postgres";
 | 
			
		||||
    mailerPasswordFile = "/secrets/forgejo-git-smtp-password.secret";
 | 
			
		||||
 | 
			
		||||
    settings = {
 | 
			
		||||
      DEFAULT = {
 | 
			
		||||
        APP_NAME = "CCCHH Git";
 | 
			
		||||
      };
 | 
			
		||||
      server = {
 | 
			
		||||
        DOMAIN = "git.hamburg.ccc.de";
 | 
			
		||||
        PROTOCOL = "http";
 | 
			
		||||
        HTTP_ADDR = "127.0.0.1";
 | 
			
		||||
        HTTP_PORT = 3000;
 | 
			
		||||
        ROOT_URL = "https://git.hamburg.ccc.de/";
 | 
			
		||||
        # LOCAL_ROOT_URL is apparently what Forgejo uses to access itself.
 | 
			
		||||
        # Doesn't need to be set.
 | 
			
		||||
      };
 | 
			
		||||
      admin = {
 | 
			
		||||
        DISABLE_REGULAR_ORG_CREATION = false;
 | 
			
		||||
      };
 | 
			
		||||
      session = {
 | 
			
		||||
        COOKIE_SECURE = true;
 | 
			
		||||
      };
 | 
			
		||||
      "ui.meta" = {
 | 
			
		||||
        AUTHOR = "CCCHH Git";
 | 
			
		||||
        DESCRIPTION = "Git instance of the CCCHH.";
 | 
			
		||||
        KEYWORDS = "git,forge,forgejo,ccchh";
 | 
			
		||||
      };
 | 
			
		||||
      service = {
 | 
			
		||||
        ALLOW_ONLY_EXTERNAL_REGISTRATION = true;
 | 
			
		||||
        DEFAULT_USER_VISIBILITY = "limited";
 | 
			
		||||
        DEFAULT_KEEP_EMAIL_PRIVATE = true;
 | 
			
		||||
      };
 | 
			
		||||
      mailer = {
 | 
			
		||||
        ENABLED = true;
 | 
			
		||||
        FROM = "no-reply@git.hamburg.ccc.de";
 | 
			
		||||
        PROTOCOL = "smtps";
 | 
			
		||||
        SMTP_ADDR = "cow.hamburg.ccc.de";
 | 
			
		||||
        SMTP_PORT = 465;
 | 
			
		||||
        USER = "no-reply@git.hamburg.ccc.de";
 | 
			
		||||
      };
 | 
			
		||||
      cache = {
 | 
			
		||||
        ENABLED = true;
 | 
			
		||||
        ADAPTER = "redis";
 | 
			
		||||
        HOST = "redis+socket:///run/redis-forgejo/redis.sock";
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  deployment.keys = {
 | 
			
		||||
    "forgejo-git-smtp-password.secret" = {
 | 
			
		||||
      keyCommand = [ "pass" "noc/vm-secrets/chaosknoten/git/smtp_password" ];
 | 
			
		||||
      destDir = "/secrets";
 | 
			
		||||
      user = "forgejo";
 | 
			
		||||
      group = "forgejo";
 | 
			
		||||
      permissions = "0640";
 | 
			
		||||
      uploadAt = "pre-activation";
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										20
									
								
								config/hosts/git/networking.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								config/hosts/git/networking.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
{ ... }:
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  networking.interfaces.net0 = {
 | 
			
		||||
    ipv4.addresses = [
 | 
			
		||||
      {
 | 
			
		||||
        address = "212.12.51.136";
 | 
			
		||||
        prefixLength = 28;
 | 
			
		||||
      }
 | 
			
		||||
    ];
 | 
			
		||||
  };
 | 
			
		||||
  networking.defaultGateway = "212.12.51.129";
 | 
			
		||||
  networking.nameservers = [ "212.12.50.158" "192.76.134.90" ];
 | 
			
		||||
  networking.search = [ "hamburg.ccc.de" ];
 | 
			
		||||
 | 
			
		||||
  systemd.network.links."10-net0" = {
 | 
			
		||||
    matchConfig.MACAddress = "92:7B:E6:12:A4:FA";
 | 
			
		||||
    linkConfig.Name = "net0";
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								config/hosts/git/nginx.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								config/hosts/git/nginx.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
# Sources for this configuration:
 | 
			
		||||
# - https://forgejo.org/docs/latest/admin/reverse-proxy/
 | 
			
		||||
 | 
			
		||||
{ config, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  services.nginx = {
 | 
			
		||||
    enable = true;
 | 
			
		||||
 | 
			
		||||
    virtualHosts."git.hamburg.ccc.de" = {
 | 
			
		||||
      default = true;
 | 
			
		||||
      forceSSL = true;
 | 
			
		||||
      enableACME = true;
 | 
			
		||||
 | 
			
		||||
      listen = [
 | 
			
		||||
        {
 | 
			
		||||
          addr = "0.0.0.0";
 | 
			
		||||
          port = 80;
 | 
			
		||||
        }
 | 
			
		||||
        {
 | 
			
		||||
          addr = "0.0.0.0";
 | 
			
		||||
          port = 443;
 | 
			
		||||
          ssl = true;
 | 
			
		||||
        }
 | 
			
		||||
      ];
 | 
			
		||||
 | 
			
		||||
      locations."/" = {
 | 
			
		||||
        proxyPass = "${config.services.forgejo.settings.server.PROTOCOL}://${config.services.forgejo.settings.server.HTTP_ADDR}:${builtins.toString config.services.forgejo.settings.server.HTTP_PORT}";
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      # Disallow crawling archives to save disk space.
 | 
			
		||||
      # See: https://forgejo.org/docs/latest/admin/search-engines-indexation/
 | 
			
		||||
      locations."/robots.txt" = {
 | 
			
		||||
        return = "200 \"User-agent: *\\nDisallow: /*/*/archive/\\n\"";
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  networking.firewall.allowedTCPPorts = [ 80 443 ];
 | 
			
		||||
  networking.firewall.allowedUDPPorts = [ 443 ];
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										16
									
								
								config/hosts/git/redis.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								config/hosts/git/redis.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
# Sources for this configuration:
 | 
			
		||||
# - https://github.com/NixOS/nixpkgs/blob/d45794fd254a7da62cc2d3c4f54a1d65e39760d9/nixos/modules/services/web-apps/nextcloud.nix#L1086
 | 
			
		||||
 | 
			
		||||
{ ... }:
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  services.redis.servers.forgejo = {
 | 
			
		||||
    enable = true;
 | 
			
		||||
    user = "forgejo";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  systemd.services.forgejo = {
 | 
			
		||||
    after = [ "redis-forgejo.service" ];
 | 
			
		||||
    requires = [ "redis-forgejo.service" ];
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								flake.nix
									
										
									
									
									
								
							
							
						
						
									
										14
									
								
								flake.nix
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -164,6 +164,20 @@
 | 
			
		|||
          ./config/hosts/public-web-static
 | 
			
		||||
        ];
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      git = {
 | 
			
		||||
        deployment = {
 | 
			
		||||
          targetHost = "git.hamburg.ccc.de";
 | 
			
		||||
          targetPort = 22;
 | 
			
		||||
          targetUser = "colmena-deploy";
 | 
			
		||||
          tags = [ "chaosknoten" ];
 | 
			
		||||
        };
 | 
			
		||||
        imports = [
 | 
			
		||||
          ./config/common
 | 
			
		||||
          ./config/proxmox-vm
 | 
			
		||||
          ./config/hosts/git
 | 
			
		||||
        ];
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    packages.x86_64-linux = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue