diff --git a/db/.env.template b/db/.env.template index 4f21e69..00c7c5c 100644 --- a/db/.env.template +++ b/db/.env.template @@ -1,5 +1,11 @@ INFLUX_PORT=8181 UI_PORT=8093 +INFLUX_DATABASE=provence + +REST_PORT=8080 +REST_USERNAME= +REST_PASSWORD= + MQTT_BROKER_URL=tls://mqtt.e.kb28.ch:8883 MQTT_USERNAME= MQTT_PASSWORD= diff --git a/db/Dockerfile b/db/Dockerfile new file mode 100644 index 0000000..e8b3898 --- /dev/null +++ b/db/Dockerfile @@ -0,0 +1,26 @@ +FROM golang:1.25-alpine AS builder + +WORKDIR /app + +COPY ./src/go.mod ./src/go.sum ./ +RUN go mod tidy + +COPY ./src . +RUN CGO_ENABLED=0 go build -ldflags="-w -s" -o /gateway . + + +FROM alpine:latest AS certs +RUN apk --no-cache add ca-certificates + +FROM scratch AS final +LABEL org.opencontainers.image.authors="remi.heredero@hevs.ch" \ + org.opencontainers.image.title="PI-E2EEDA Gateway MQTT/Influx/REST" \ + org.opencontainers.image.description="This container is an application for the E2EEDA PI. Use MQTT to communicate with devices, enabling real-time updates and control. Time-series data, such as device states, is stored in InfluxDB for analytics and monitoring. A REST API provides external access for managing devices and retrieving data." \ + org.opencontainers.image.source="https://github.com/PI-E2EEDA/Plein-de-eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-project" + +COPY --from=builder /gateway /gateway +COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ + +EXPOSE 8080 + +ENTRYPOINT ["/gateway"] \ No newline at end of file diff --git a/db/docker-compose.yml b/db/docker-compose.yml index 309edbf..08da13e 100644 --- a/db/docker-compose.yml +++ b/db/docker-compose.yml @@ -74,6 +74,34 @@ services: - RABBITMQ_DEFAULT_PASS=${MQTT_PASSWORD:?MQTT_PASSWORD is required} command: sh -c "rabbitmq-plugins enable rabbitmq_mqtt && rabbitmq-server" + gateway: + build: + context: . + dockerfile: Dockerfile + depends_on: + influxdb: + condition: service_healthy + mqtt: + condition: service_started + environment: + - MQTT_BROKER_URL=${MQTT_BROKER_URL:-mqtt://mqtt:1883} + - MQTT_USERNAME=${MQTT_USERNAME:?MQTT_USERNAME is required} + - MQTT_PASSWORD=${MQTT_PASSWORD:?MQTT_PASSWORD is required} + - INFLUX_URL=${INFLUX_URL:-http://influxdb:${INFLUX_PORT:-8181}} + - INFLUX_DATABASE=${INFLUX_DATABASE} + - INFLUX_TOKEN_FILE=/run/secrets/admin-token + - REST_PORT=${REST_PORT:-8080} + - REST_USERNAME=${REST_USERNAME} + - REST_PASSWORD=${REST_PASSWORD} + - MAPPING_CONFIG_PATH=/config/mapping.json + secrets: + - admin-token + volumes: + - ./mapping.json:/config/mapping.json:ro + ports: + - "${REST_PORT:-8080}:8080" + restart: unless-stopped + volumes: influxdb3_data: rabbitmq_data: diff --git a/db/src/main.go b/db/src/main.go index ec97ed6..ea07cfd 100644 --- a/db/src/main.go +++ b/db/src/main.go @@ -54,7 +54,7 @@ func mqttConnection() *mqtt.MqttGateway { } func influxConnection() *influx.InfluxGateway { - influxUrl := getEnv("INFLUX_URL", "https://db.e.kb28.ch:443") + influxUrl := getEnv("INFLUX_URL", "http://influxdb:8181") influxDatabase := getEnv("INFLUX_DATABASE", "provence") influxToken := getEnv("INFLUX_TOKEN", "")