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("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();