65 public async ValueTask<IServer?>
CreateServer(
string[] args,
string? updatePath, CancellationToken cancellationToken)
67 ArgumentNullException.ThrowIfNull(args);
70 if (!args.Any(arg => arg.Contains(
"hostBuilder:reloadConfigOnChange", StringComparison.OrdinalIgnoreCase))
71 && String.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable(
"hostBuilder__reloadConfigOnChange")))
74 args =
new string[oldArgs.Length + 1];
75 Array.Copy(oldArgs, args, oldArgs.Length);
76 args[oldArgs.Length] =
"--hostBuilder:reloadConfigOnChange=false";
79 const string AppSettingsRelocationKey = $
"--{AppSettings}-base-path=";
81 var appsettingsRelativeBasePathArgument = args.FirstOrDefault(arg => arg.StartsWith(AppSettingsRelocationKey, StringComparison.Ordinal));
83 if (appsettingsRelativeBasePathArgument !=
null)
84 basePath =
IOManager.
ResolvePath(appsettingsRelativeBasePathArgument[AppSettingsRelocationKey.Length..]);
90 Environment.SetEnvironmentVariable($
"{InternalConfiguration.Section}__{nameof(InternalConfiguration.AppSettingsBasePath)}", basePath);
92 IHostBuilder CreateDefaultBuilder() => Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args)
93 .ConfigureAppConfiguration((context, builder) =>
95 builder.SetBasePath(basePath);
97 builder.AddYamlFile($
"{AppSettings}.yml", optional:
true, reloadOnChange:
false)
98 .AddYamlFile($
"{AppSettings}.{context.HostingEnvironment.EnvironmentName}.yml", optional:
true, reloadOnChange:
false);
102 var environmentJsonConfig = builder.Sources[2];
103 var envConfig = builder.Sources[3];
108#error Validate this monstrosity works on current .NET
110 IConfigurationSource? cmdLineConfig;
111 IConfigurationSource baseYmlConfig, environmentYmlConfig;
112 if (args.Length == 0)
114 cmdLineConfig =
null;
115 baseYmlConfig = builder.Sources[4];
116 environmentYmlConfig = builder.Sources[5];
120 cmdLineConfig = builder.Sources[4];
121 baseYmlConfig = builder.Sources[5];
122 environmentYmlConfig = builder.Sources[6];
125 builder.Sources[2] = baseYmlConfig;
126 builder.Sources[3] = environmentJsonConfig;
127 builder.Sources[4] = environmentYmlConfig;
128 builder.Sources[5] = envConfig;
130 if (cmdLineConfig !=
null)
132 builder.Sources[6] = cmdLineConfig;
136 var setupWizardHostBuilder = CreateDefaultBuilder()
140 using (var setupHost = setupWizardHostBuilder.Build())
142 ILogger<ServerFactory> logger = setupHost.Services.GetRequiredService<ILogger<ServerFactory>>();
144 await setupHost.RunAsync(cancellationToken);
146 if (postSetupServices.GeneralConfiguration.SetupWizardMode ==
SetupWizardMode.Only)
148 logger.LogInformation(
"Shutting down due to only running setup wizard.");
152 if (postSetupServices.ReloadRequired)
154 logger.LogInformation(
"TGS must restart to reload the updated configuration.");
159 var hostBuilder = CreateDefaultBuilder()
160 .ConfigureWebHost(webHostBuilder =>
162 .UseKestrel(kestrelOptions =>
164 var serverPortProvider = kestrelOptions.ApplicationServices.GetRequiredService<
IServerPortProvider>();
165 kestrelOptions.ListenAnyIP(
166 serverPortProvider.HttpApiPort,
167 listenOptions => listenOptions.Protocols = HttpProtocols.Http1);
170 kestrelOptions.Limits.MaxRequestLineSize = 8400;
175 .SuppressStatusMessages(
true)
177 TimeSpan.FromMinutes(
180 if (updatePath !=
null)
181 hostBuilder.UseContentRoot(