Files
SpotiParty/SpotiParty.AppHost/AppHost.cs
2026-01-18 20:42:04 +01:00

87 lines
3.6 KiB
C#

using Projects;
var builder = DistributedApplication.CreateBuilder(args);
var compose = builder.AddDockerComposeEnvironment("compose")
.WithProperties(env => {
env.DefaultNetworkName = "system";
})
.ConfigureComposeFile(file => {
file.Networks.Add("main", new() {
Name = "main",
External = true
});
file.Volumes.Clear();
})
.ConfigureEnvFile(env => {
env["CLIENT_ID"] = new() {
Name = "CLIENT_ID",
DefaultValue = "SpotifyClientId"
};
env["CLIENT_SECRET"] = new() {
Name = "CLIENT_SECRET",
DefaultValue = "SpotifyClientSecret"
};
})
.WithDashboard(dashboard => {
dashboard.WithForwardedHeaders();
dashboard.PublishAsDockerComposeService((_, service) => {
service.Name = "dashboard";
service.ContainerName = "spotiparty-dashboard";
service.Networks.Add("main");
service.Restart = "unless-stopped";
service.Labels.Add("traefik.enable", "true");
service.Labels.Add("traefik.http.routers.spotiparty-dashboard.tls", "true");
service.Labels.Add("traefik.http.routers.spotiparty-dashboard.tls.certresolver", "cloudflare");
service.Labels.Add("traefik.http.routers.spotiparty-dashboard.entrypoints", "websecure");
service.Labels.Add("traefik.http.routers.spotiparty-dashboard.rule", "Host(`dash.spotiparty.leon-hoppe.de`)");
service.Labels.Add("traefik.http.routers.spotiparty-dashboard.service", "spotiparty-dashboard");
service.Labels.Add("traefik.http.services.spotiparty-dashboard.loadbalancer.server.port", "18888");
service.Labels.Add("traefik.docker.network", "main");
service.Labels.Add("com.centurylinklabs.watchtower.enable", "true");
service.Ports.Clear();
service.Expose.Clear();
});
});
var dbServer = builder.AddPostgres("database")
.WithDataVolume()
.PublishAsDockerComposeService((_, service) => {
service.ContainerName = "spotiparty-db";
service.Restart = "unless-stopped";
service.Expose.Clear();
});
var database = dbServer.AddDatabase("SpotiParty");
var web = builder.AddProject<SpotiParty_Web>("web")
.WithReference(database)
.WaitForStart(database)
.PublishAsDockerComposeService((_, service) => {
service.Name = "web";
service.ContainerName = "spotiparty-web";
service.Image = "registry.leon-hoppe.de/leon.hoppe/spotiparty:latest";
service.Networks.Add("main");
service.Restart = "unless-stopped";
service.Environment.Add("ClientId", "${CLIENT_ID}");
service.Environment.Add("ClientSecret", "${CLIENT_SECRET}");
service.Labels.Add("traefik.enable", "true");
service.Labels.Add("traefik.http.routers.spotiparty-web.tls", "true");
service.Labels.Add("traefik.http.routers.spotiparty-web.tls.certresolver", "cloudflare");
service.Labels.Add("traefik.http.routers.spotiparty-web.entrypoints", "websecure");
service.Labels.Add("traefik.http.routers.spotiparty-web.rule", "Host(`spotiparty.leon-hoppe.de`)");
service.Labels.Add("traefik.http.routers.spotiparty-web.service", "spotiparty-web");
service.Labels.Add("traefik.http.services.spotiparty-web.loadbalancer.server.port", "${WEB_PORT}");
service.Labels.Add("traefik.docker.network", "main");
service.Labels.Add("com.centurylinklabs.watchtower.enable", "true");
service.Ports.Clear();
service.Expose.Clear();
});
builder.Build().Run();