Compare commits
	
		
			3 commits
		
	
	
		
			ab082358f9
			...
			52296d3ffe
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 52296d3ffe | |||
| b4757f440d | |||
| e079ecbe72 | 
					 5 changed files with 213 additions and 7 deletions
				
			
		|  | @ -22,6 +22,7 @@ | ||||||
|     ./services/foundryvtt.nix |     ./services/foundryvtt.nix | ||||||
|     ./services/gitea.nix |     ./services/gitea.nix | ||||||
|     ./services/metrics |     ./services/metrics | ||||||
|  |     ./services/minecraft.nix | ||||||
|     ./services/nextcloud.nix |     ./services/nextcloud.nix | ||||||
|     ./services/webserver.nix |     ./services/webserver.nix | ||||||
|     ./services/wireguard.nix |     ./services/wireguard.nix | ||||||
|  | @ -70,8 +71,6 @@ | ||||||
|         8448 |         8448 | ||||||
|         # starbound |         # starbound | ||||||
|         21025 |         21025 | ||||||
|         # Minecraft |  | ||||||
|         25565 |  | ||||||
| 
 | 
 | ||||||
|         config.services.coturn.listening-port |         config.services.coturn.listening-port | ||||||
|         config.services.coturn.tls-listening-port |         config.services.coturn.tls-listening-port | ||||||
|  | @ -80,9 +79,6 @@ | ||||||
|       ]; |       ]; | ||||||
| 
 | 
 | ||||||
|       allowedUDPPorts = [ |       allowedUDPPorts = [ | ||||||
|         # More minecraft |  | ||||||
|         25565 |  | ||||||
| 
 |  | ||||||
|         config.services.coturn.listening-port |         config.services.coturn.listening-port | ||||||
|         config.services.coturn.tls-listening-port |         config.services.coturn.tls-listening-port | ||||||
|         config.services.coturn.alt-listening-port |         config.services.coturn.alt-listening-port | ||||||
|  |  | ||||||
|  | @ -5,5 +5,6 @@ | ||||||
|     ./exporters.nix |     ./exporters.nix | ||||||
|     ./grafana.nix |     ./grafana.nix | ||||||
|     ./victoriametrics.nix |     ./victoriametrics.nix | ||||||
|  |     ./victorialogs.nix | ||||||
|   ]; |   ]; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,4 +1,9 @@ | ||||||
| { config, ... }: | { | ||||||
|  |   pkgs, | ||||||
|  |   config, | ||||||
|  |   flake-inputs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
| let | let | ||||||
|   domain = "metrics.${config.services.nginx.domain}"; |   domain = "metrics.${config.services.nginx.domain}"; | ||||||
| in | in | ||||||
|  | @ -28,6 +33,11 @@ in | ||||||
|       }; |       }; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|  |     declarativePlugins = [ | ||||||
|  |       pkgs.grafanaPlugins.victoriametrics-metrics-datasource | ||||||
|  |       flake-inputs.nixpkgs-unstable.legacyPackages.${pkgs.system}.grafanaPlugins.victoriametrics-logs-datasource | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|     provision = { |     provision = { | ||||||
|       enable = true; |       enable = true; | ||||||
| 
 | 
 | ||||||
|  | @ -35,7 +45,16 @@ in | ||||||
|         { |         { | ||||||
|           name = "Victoriametrics - tlater.net"; |           name = "Victoriametrics - tlater.net"; | ||||||
|           url = "http://localhost:8428"; |           url = "http://localhost:8428"; | ||||||
|           type = "prometheus"; |           type = "victoriametrics-metrics-datasource"; | ||||||
|  |           access = "proxy"; | ||||||
|  |           isDefault = true; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         { | ||||||
|  |           name = "Victorialogs - tlater.net"; | ||||||
|  |           url = "http://${config.services.victorialogs.bindAddress}"; | ||||||
|  |           type = "victoriametrics-logs-datasource"; | ||||||
|  |           access = "proxy"; | ||||||
|         } |         } | ||||||
|       ]; |       ]; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
							
								
								
									
										107
									
								
								configuration/services/metrics/victorialogs.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								configuration/services/metrics/victorialogs.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,107 @@ | ||||||
|  | { | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | let | ||||||
|  |   cfg = config.services.victorialogs; | ||||||
|  |   pkg = pkgs.victoriametrics; | ||||||
|  |   dirname = "victorialogs"; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.services.victorialogs = | ||||||
|  |     let | ||||||
|  |       inherit (lib.types) str; | ||||||
|  |     in | ||||||
|  |     { | ||||||
|  |       listenAddress = lib.mkOption { | ||||||
|  |         default = ":9428"; | ||||||
|  |         type = str; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       bindAddress = lib.mkOption { | ||||||
|  |         readOnly = true; | ||||||
|  |         type = str; | ||||||
|  |         description = '' | ||||||
|  |           Final address on which victorialogs listens. | ||||||
|  |         ''; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |   config = { | ||||||
|  |     services.victorialogs.bindAddress = | ||||||
|  |       (lib.optionalString (lib.hasPrefix ":" cfg.listenAddress) "127.0.0.1") + cfg.listenAddress; | ||||||
|  | 
 | ||||||
|  |     services.journald.upload = { | ||||||
|  |       enable = true; | ||||||
|  |       settings.Upload = { | ||||||
|  |         URL = "http://${cfg.bindAddress}/insert/journald"; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     systemd.services.victorialogs = { | ||||||
|  |       description = "VictoriaLogs log database"; | ||||||
|  |       wantedBy = [ "multi-user.target" ]; | ||||||
|  |       after = [ "network.target" ]; | ||||||
|  |       startLimitBurst = 5; | ||||||
|  | 
 | ||||||
|  |       serviceConfig = { | ||||||
|  |         ExecStart = lib.escapeShellArgs [ | ||||||
|  |           "${pkg}/bin/victoria-logs" | ||||||
|  |           "-storageDataPath=/var/lib/${dirname}" | ||||||
|  |           "-httpListenAddr=${cfg.listenAddress}" | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         DynamicUser = true; | ||||||
|  |         RestartSec = 1; | ||||||
|  |         Restart = "on-failure"; | ||||||
|  |         RuntimeDirectory = dirname; | ||||||
|  |         RuntimeDirectoryMode = "0700"; | ||||||
|  |         StateDirectory = dirname; | ||||||
|  |         StateDirectoryMode = "0700"; | ||||||
|  | 
 | ||||||
|  |         LimitNOFILE = 1048576; | ||||||
|  | 
 | ||||||
|  |         # Hardening | ||||||
|  |         DeviceAllow = [ "/dev/null rw" ]; | ||||||
|  |         DevicePolicy = "strict"; | ||||||
|  |         LockPersonality = true; | ||||||
|  |         MemoryDenyWriteExecute = true; | ||||||
|  |         NoNewPrivileges = true; | ||||||
|  |         PrivateDevices = true; | ||||||
|  |         PrivateTmp = true; | ||||||
|  |         PrivateUsers = true; | ||||||
|  |         ProtectClock = true; | ||||||
|  |         ProtectControlGroups = true; | ||||||
|  |         ProtectHome = true; | ||||||
|  |         ProtectHostname = true; | ||||||
|  |         ProtectKernelLogs = true; | ||||||
|  |         ProtectKernelModules = true; | ||||||
|  |         ProtectKernelTunables = true; | ||||||
|  |         ProtectProc = "invisible"; | ||||||
|  |         ProtectSystem = "full"; | ||||||
|  |         RemoveIPC = true; | ||||||
|  |         RestrictAddressFamilies = [ | ||||||
|  |           "AF_INET" | ||||||
|  |           "AF_INET6" | ||||||
|  |           "AF_UNIX" | ||||||
|  |         ]; | ||||||
|  |         RestrictNamespaces = true; | ||||||
|  |         RestrictRealtime = true; | ||||||
|  |         RestrictSUIDSGID = true; | ||||||
|  |         SystemCallArchitectures = "native"; | ||||||
|  |         SystemCallFilter = [ | ||||||
|  |           "@system-service" | ||||||
|  |           "~@privileged" | ||||||
|  |         ]; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       postStart = lib.mkBefore '' | ||||||
|  |         until ${lib.getBin pkgs.curl}/bin/curl -s -o /dev/null http://${cfg.bindAddress}/ping; do | ||||||
|  |           sleep 1; | ||||||
|  |         done | ||||||
|  |       ''; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										83
									
								
								configuration/services/minecraft.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								configuration/services/minecraft.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,83 @@ | ||||||
|  | { | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | { | ||||||
|  |   services.minecraft-server = { | ||||||
|  |     enable = true; | ||||||
|  |     eula = true; | ||||||
|  |     # jvmOpts are set using a file for forge | ||||||
|  |     # jvmOpts = "-Xmx8G -Xms8G"; | ||||||
|  |     openFirewall = true; | ||||||
|  | 
 | ||||||
|  |     declarative = true; | ||||||
|  | 
 | ||||||
|  |     whitelist = { | ||||||
|  |       tlater = "140d177a-966f-41b8-a4c0-e305babd291b"; | ||||||
|  |       romino25 = "59cd1648-14a4-4bcf-8f5a-2e1bde678f2c"; | ||||||
|  |       lasi25 = "0ab6e3d1-544a-47e7-8538-2e6c248e49a4"; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     serverProperties = { | ||||||
|  |       allow-flight = true; | ||||||
|  |       difficulty = "hard"; | ||||||
|  |       motd = "tlater.net"; | ||||||
|  |       spawn-protection = 1; | ||||||
|  |       white-list = true; | ||||||
|  |       enable-query = true; | ||||||
|  |       enable-status = true; | ||||||
|  | 
 | ||||||
|  |       # Allows the server to write chunks without hogging the main | ||||||
|  |       # thread... | ||||||
|  |       sync-chunk-writes = false; | ||||||
|  |       # Disables chat reporting, because we don't need any of that | ||||||
|  |       # drama on a lil' friends-only server. | ||||||
|  |       enforce-secure-profile = false; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     package = pkgs.writeShellApplication { | ||||||
|  |       name = "minecraft-server"; | ||||||
|  |       runtimeInputs = with pkgs; [ jdk17_headless ]; | ||||||
|  | 
 | ||||||
|  |       text = '' | ||||||
|  |         exec /var/lib/minecraft/run.sh $@ | ||||||
|  |       ''; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   systemd.services.minecraft-server = { | ||||||
|  |     path = with pkgs; [ jdk17_headless ]; | ||||||
|  | 
 | ||||||
|  |     # Since we read from our own HTTP server, we need to wait for it | ||||||
|  |     # to be up | ||||||
|  |     after = [ "nginx.service" ]; | ||||||
|  | 
 | ||||||
|  |     serviceConfig = { | ||||||
|  |       # Use packwiz to install mods | ||||||
|  |       ExecStartPre = [ | ||||||
|  |         "${pkgs.jdk17_headless}/bin/java -jar ${config.services.minecraft-server.dataDir}/packwiz-installer-bootstrap.jar -g -s server 'https://minecraft.${config.services.nginx.domain}/cobblemon-pack/pack.toml'" | ||||||
|  |       ]; | ||||||
|  |       # Forge requires some bonus JVM options, which they include in a | ||||||
|  |       # little `run.sh` script | ||||||
|  |       ExecStart = lib.mkForce "${config.services.minecraft-server.dataDir}/run.sh --nogui"; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   systemd.tmpfiles.settings."10-minecraft" = { | ||||||
|  |     "/srv/minecraft".d = { | ||||||
|  |       user = "nginx"; | ||||||
|  |       group = "minecraft"; | ||||||
|  |       mode = "0775"; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   services.nginx.virtualHosts."minecraft.${config.services.nginx.domain}" = { | ||||||
|  |     forceSSL = true; | ||||||
|  |     useACMEHost = "tlater.net"; | ||||||
|  |     enableHSTS = true; | ||||||
|  | 
 | ||||||
|  |     root = "/srv/minecraft"; | ||||||
|  |   }; | ||||||
|  | } | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue