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
 | 
					          ./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 = {
 | 
					    packages.x86_64-linux = {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue