Files
ZuneNetApi/docker-compose.yml
Joshua Askharoun 257c942f6a Use same Dockerfile for all microservices;
Split build into separate stages;
Only publish current project instead of entire solution
2025-09-19 02:12:32 -05:00

284 lines
8.5 KiB
YAML

networks:
backend:
name: backend
x-env-aspnet: &env-aspnet
ZuneNetContext__ConnectionString: ${ZuneNetContext__ConnectionString}
ZuneNetContext__DatabaseName: ${ZuneNetContext__DatabaseName}
services:
mongodb:
image: mongo:latest
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
ports:
- 27017:27017
volumes:
- mongodb_data_container:/data/db
networks:
- backend
traefik:
image: traefik:v3.3
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- "./traefik/traefik.yml:/traefik.yml:ro"
- "traefik-certs:/certs"
networks:
- backend
catalog:
build:
context: ./
dockerfile: ./Dockerfile
args:
PROJ_NAME: Zune.Net.Catalog
depends_on:
- mongodb
- traefik
networks:
- backend
ports:
- "8070:8080"
labels:
- "traefik.http.routers.catalog.rule=Host(`catalog.${DOMAIN_ROOT}`)"
- "traefik.http.routers.catalog-ssl.rule=Host(`catalog-ssl.${DOMAIN_ROOT}`)"
- "traefik.http.routers.catalog-ssl.entrypoints=websecure"
- "traefik.http.routers.catalog-ssl.tls.certresolver=letsencrypt"
- "traefik.http.routers.catalog-og.rule=Host(`catalog.zune.net`)"
- "traefik.http.routers.catalog-ssl-og.rule=Host(`catalog-ssl.zune.net`)"
- "traefik.http.routers.catalog-ssl-og.entrypoints=websecure"
environment:
<< : [*env-aspnet]
catalog-image:
build:
context: ./
dockerfile: ./Dockerfile
args:
PROJ_NAME: Zune.Net.Catalog.Image
depends_on:
- mongodb
- traefik
networks:
- backend
ports:
- "8071:8080"
labels:
- "traefik.http.routers.catalog-image.rule=Host(`image.catalog.${DOMAIN_ROOT}`)"
- "traefik.http.routers.catalog-image-ssl.rule=Host(`image.catalog.${DOMAIN_ROOT}`)"
- "traefik.http.routers.catalog-image-ssl.entrypoints=websecure"
- "traefik.http.routers.catalog-image-ssl.tls.certresolver=letsencrypt"
- "traefik.http.routers.catalog-image-og.rule=Host(`image.catalog.zune.net`)"
- "traefik.http.routers.catalog-image-ssl-og.rule=Host(`image.catalog.zune.net`)"
- "traefik.http.routers.catalog-image-ssl-og.entrypoints=websecure"
environment:
<< : [*env-aspnet]
commerce:
build:
context: ./
dockerfile: ./Dockerfile
args:
PROJ_NAME: Zune.Net.Commerce
depends_on:
- mongodb
- traefik
networks:
- backend
ports:
- "8072:8080"
labels:
- "traefik.http.routers.commerce.rule=Host(`commerce.${DOMAIN_ROOT}`)"
- "traefik.http.routers.commerce-ssl.rule=Host(`commerce-ssl.${DOMAIN_ROOT}`)"
- "traefik.http.routers.commerce-ssl.entrypoints=websecure"
- "traefik.http.routers.commerce-ssl.tls.certresolver=letsencrypt"
- "traefik.http.routers.commerce-og.rule=Host(`commerce.zune.net`)"
- "traefik.http.routers.commerce-ssl-og.rule=Host(`commerce-ssl.zune.net`)"
- "traefik.http.routers.commerce-ssl-og.entrypoints=websecure"
environment:
<< : [*env-aspnet]
inbox:
build:
context: ./
dockerfile: ./Dockerfile
args:
PROJ_NAME: Zune.Net.Inbox
depends_on:
- mongodb
- traefik
networks:
- backend
ports:
- "8073:8080"
labels:
- "traefik.http.routers.inbox.rule=Host(`inbox.${DOMAIN_ROOT}`)"
- "traefik.http.routers.inbox-ssl.rule=Host(`inbox-ssl.${DOMAIN_ROOT}`)"
- "traefik.http.routers.inbox-ssl.entrypoints=websecure"
- "traefik.http.routers.inbox-ssl.tls.certresolver=letsencrypt"
- "traefik.http.routers.inbox-og.rule=Host(`inbox.zune.net`)"
- "traefik.http.routers.inbox-ssl-og.rule=Host(`inbox-ssl.zune.net`)"
- "traefik.http.routers.inbox-ssl-og.entrypoints=websecure"
environment:
<< : [*env-aspnet]
login:
build:
context: ./
dockerfile: ./Dockerfile
args:
PROJ_NAME: Zune.Net.Login
depends_on:
- mongodb
- traefik
networks:
- backend
ports:
- "8074:8080"
labels:
- "traefik.http.routers.login.rule=Host(`login.${DOMAIN_ROOT}`)"
- "traefik.http.routers.login-ssl.rule=Host(`login-ssl.${DOMAIN_ROOT}`)"
- "traefik.http.routers.login-ssl.entrypoints=websecure"
- "traefik.http.routers.login-ssl.tls.certresolver=letsencrypt"
- "traefik.http.routers.login-og.rule=Host(`login.zune.net`)"
- "traefik.http.routers.login-ssl-og.rule=Host(`login-ssl.zune.net`)"
- "traefik.http.routers.login-ssl-og.entrypoints=websecure"
environment:
<< : [*env-aspnet]
metaservices:
build:
context: ./
dockerfile: ./Dockerfile
args:
PROJ_NAME: Zune.Net.MetaServices
depends_on:
- mongodb
- traefik
networks:
- backend
ports:
- "8075:8080"
labels:
- "traefik.http.routers.metaservices.rule=Host(`metaservices.${DOMAIN_ROOT}`)"
- "traefik.http.routers.metaservices-ssl.rule=Host(`metaservices-ssl.${DOMAIN_ROOT}`)"
- "traefik.http.routers.metaservices-ssl.tls.certresolver=letsencrypt"
- "traefik.http.routers.metaservices-ssl.entrypoints=websecure"
environment:
<< : [*env-aspnet]
mix:
build:
context: ./
dockerfile: ./Dockerfile
args:
PROJ_NAME: Zune.Net.Mix
depends_on:
- mongodb
- traefik
networks:
- backend
ports:
- "8076:8080"
labels:
- "traefik.http.routers.mix.rule=Host(`mix.${DOMAIN_ROOT}`)"
- "traefik.http.routers.mix-ssl.rule=Host(`mix-ssl.${DOMAIN_ROOT}`)"
- "traefik.http.routers.mix-ssl.tls.certresolver=letsencrypt"
- "traefik.http.routers.mix-ssl.entrypoints=websecure"
- "traefik.http.routers.mix-og.rule=Host(`mix.zune.net`)"
- "traefik.http.routers.mix-ssl-og.rule=Host(`mix-ssl.zune.net`)"
- "traefik.http.routers.mix-ssl-og.entrypoints=websecure"
environment:
<< : [*env-aspnet]
socialapi:
build:
context: ./
dockerfile: ./Dockerfile
args:
PROJ_NAME: Zune.Net.SocialApi
depends_on:
- mongodb
- traefik
networks:
- backend
ports:
- "8077:8080"
labels:
- "traefik.http.routers.socialapi.rule=Host(`socialapi.${DOMAIN_ROOT}`)"
- "traefik.http.routers.socialapi-ssl.rule=Host(`socialapi-ssl.${DOMAIN_ROOT}`)"
- "traefik.http.routers.socialapi-ssl.tls.certresolver=letsencrypt"
- "traefik.http.routers.socialapi-ssl.entrypoints=websecure"
- "traefik.http.routers.socialapi-og.rule=Host(`socialapi.zune.net`)"
- "traefik.http.routers.socialapi-ssl-og.rule=Host(`socialapi-ssl.zune.net`)"
- "traefik.http.routers.socialapi-ssl-og.entrypoints=websecure"
environment:
<< : [*env-aspnet]
tiles:
build:
context: ./
dockerfile: ./Dockerfile
args:
PROJ_NAME: Zune.Net.Tiles
depends_on:
- mongodb
- traefik
networks:
- backend
ports:
- "8078:8080"
labels:
- "traefik.http.routers.tiles.rule=Host(`tiles.${DOMAIN_ROOT}`)"
- "traefik.http.routers.tiles-ssl.rule=Host(`tiles-ssl.${DOMAIN_ROOT}`)"
- "traefik.http.routers.tiles-ssl.tls.certresolver=letsencrypt"
- "traefik.http.routers.tiles-ssl.entrypoints=websecure"
- "traefik.http.routers.tiles-og.rule=Host(`tiles.zune.net`)"
- "traefik.http.routers.tiles-ssl-og.rule=Host(`tiles-ssl.zune.net`)"
- "traefik.http.routers.tiles-ssl-og.entrypoints=websecure"
environment:
<< : [*env-aspnet]
tuners:
build:
context: ./
dockerfile: ./Dockerfile
args:
PROJ_NAME: Zune.Net.Tuners
depends_on:
- mongodb
- traefik
networks:
- backend
ports:
- "8079:8080"
labels:
- "traefik.http.routers.tuners.rule=Host(`tuners.${DOMAIN_ROOT}`)"
- "traefik.http.routers.tuners-ssl.rule=Host(`tuners-ssl.${DOMAIN_ROOT}`)"
- "traefik.http.routers.tuners-ssl.tls.certresolver=letsencrypt"
- "traefik.http.routers.tuners-ssl.entrypoints=websecure"
- "traefik.http.routers.tuners-og.rule=Host(`tuners.zune.net`)"
- "traefik.http.routers.tuners-ssl-og.rule=Host(`tuners-ssl.zune.net`)"
- "traefik.http.routers.tuners-ssl-og.entrypoints=websecure"
environment:
<< : [*env-aspnet]
volumes:
traefik-certs:
mongodb_data_container: