version: "3.8" # ============================================================================= # ChirpStack LoRaWAN Network Server — Smart City Digital Twin # ============================================================================= # Déploiement derrière Traefik avec sous-domaines dédiés # Subdomaines: # - chirpstack.digitribe.fr → Console web (port 8080) # - chirpstack-api.digitribe.fr → REST API (port 8090) # - chirpstack-ws.digitribe.fr → Gateway Bridge WebSocket (port 3001) # ============================================================================= services: chirpstack: image: chirpstack/chirpstack:4 command: -c /etc/chirpstack restart: unless-stopped volumes: - ./configuration/chirpstack:/etc/chirpstack depends_on: - postgres - mosquitto - redis environment: - MQTT_BROKER_HOST=mosquitto - REDIS_HOST=redis - POSTGRESQL_HOST=postgres labels: - "traefik.enable=true" - "traefik.http.routers.chirpstack.rule=Host(`chirpstack.digitribe.fr`)" - "traefik.http.routers.chirpstack.entrypoints=websecure" - "traefik.http.routers.chirpstack.tls.certresolver=letsencrypt" - "traefik.http.services.chirpstack.loadbalancer.server.port=8080" networks: - traefik-public - chirpstack-internal - smartcity-shared chirpstack-gateway-bridge: image: chirpstack/chirpstack-gateway-bridge:4 restart: unless-stopped ports: - "1700:1700/udp" volumes: - ./configuration/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge environment: - INTEGRATION__MQTT__EVENT_TOPIC_TEMPLATE=eu868/gateway/{{ .GatewayID }}/event/{{ .EventType }} - INTEGRATION__MQTT__STATE_TOPIC_TEMPLATE=eu868/gateway/{{ .GatewayID }}/state/{{ .StateType }} - INTEGRATION__MQTT__COMMAND_TOPIC_TEMPLATE=eu868/gateway/{{ .GatewayID }}/command/# depends_on: - mosquitto networks: - chirpstack-internal chirpstack-gateway-bridge-basicstation: image: chirpstack/chirpstack-gateway-bridge:4 restart: unless-stopped command: -c /etc/chirpstack-gateway-bridge/chirpstack-gateway-bridge-basicstation-eu868.toml labels: - "traefik.enable=true" - "traefik.http.routers.chirpstack-ws.rule=Host(`chirpstack-ws.digitribe.fr`)" - "traefik.http.routers.chirpstack-ws.entrypoints=websecure" - "traefik.http.routers.chirpstack-ws.tls.certresolver=letsencrypt" - "traefik.http.services.chirpstack-ws.loadbalancer.server.port=3001" volumes: - ./configuration/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge depends_on: - mosquitto networks: - traefik-public - chirpstack-internal chirpstack-rest-api: image: chirpstack/chirpstack-rest-api:4 restart: unless-stopped command: --server chirpstack:8080 --bind 0.0.0.0:8090 --insecure labels: - "traefik.enable=true" - "traefik.http.routers.chirpstack-api.rule=Host(`chirpstack-api.digitribe.fr`)" - "traefik.http.routers.chirpstack-api.entrypoints=websecure" - "traefik.http.routers.chirpstack-api.tls.certresolver=letsencrypt" - "traefik.http.services.chirpstack-api.loadbalancer.server.port=8090" depends_on: - chirpstack networks: - traefik-public - chirpstack-internal postgres: image: postgres:14-alpine restart: unless-stopped volumes: - ./configuration/postgresql/initdb:/docker-entrypoint-initdb.d - chirpstack-postgresqldata:/var/lib/postgresql/data environment: - POSTGRES_USER=chirpstack - POSTGRES_PASSWORD=chirpstack - POSTGRES_DB=chirpstack networks: - chirpstack-internal redis: image: redis:7-alpine restart: unless-stopped command: redis-server --save 300 1 --save 60 100 --appendonly no volumes: - chirpstack-redisdata:/data networks: - chirpstack-internal mosquitto: image: eclipse-mosquitto:2 restart: unless-stopped volumes: - ./configuration/mosquitto/config/:/mosquitto/config/ - chirpstack-mosquitto-data:/mosquitto/data - chirpstack-mosquitto-log:/mosquitto/log networks: - chirpstack-internal - smartcity-shared volumes: chirpstack-postgresqldata: chirpstack-redisdata: chirpstack-mosquitto-data: chirpstack-mosquitto-log: networks: traefik-public: external: true smartcity-shared: external: true chirpstack-internal: driver: bridge