87 lines
3.6 KiB
C#
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(); |