# WARNING: Do not deploy this tutorial configuration directly to a production environment # # The tutorial docker-compose files have not been written for production deployment and will not # scale. A proper architecture has been sacrificed to keep the narrative focused on the learning # goals, they are just used to deploy everything onto a single Docker machine. All FIWARE components # are running at full debug and extra ports have been exposed to allow for direct calls to services. # They also contain various obvious security flaws - passwords in plain text, no load balancing, # no use of HTTPS and so on. # # This is all to avoid the need of multiple machines, generating certificates, encrypting secrets # and so on, purely so that a single docker-compose file can be read as an example to build on, # not use directly. # # When deploying to a production environment, please refer to the Helm Repository # for FIWARE Components in order to scale up to a proper architecture: # # see: https://github.com/FIWARE/helm-charts/ # version: "3.8" services: # Orion is an NGSI-v2 context broker orion-v2: labels: org.fiware: 'tutorial' image: quay.io/fiware/orion:${ORION_VERSION} hostname: orion container_name: fiware-orion depends_on: - mongo-db networks: - default expose: - "${ORION_PORT}" ports: - "${ORION_PORT}:${ORION_PORT}" # localhost:1026 command: -dbhost mongo-db -logLevel DEBUG healthcheck: test: curl --fail -s http://orion:${ORION_PORT}/version || exit 1 interval: 5s # IoT-Agent is configured for the UltraLight Protocol # # This deliberately fixed to v1.7.0 # see: https://github.com/telefonicaid/iotagent-ul/issues/320 # # For v1.8 and v1.9 a dummy resource must be added when provisioning # iot-agent: labels: org.fiware: 'tutorial' image: quay.io/fiware/iotagent-ul:${ULTRALIGHT_VERSION} hostname: iot-agent container_name: fiware-iot-agent depends_on: - mongo-db - mosquitto networks: - default expose: - "${IOTA_NORTH_PORT}" ports: - "${IOTA_NORTH_PORT}:${IOTA_NORTH_PORT}" # localhost:4041 environment: - IOTA_CB_HOST=orion # name of the context broker to update context - IOTA_CB_PORT=${ORION_PORT} # port the context broker listens on to update context - IOTA_NORTH_PORT=${IOTA_NORTH_PORT} - IOTA_REGISTRY_TYPE=mongodb #Whether to hold IoT device info in memory or in a database - IOTA_LOG_LEVEL=INFO # The log level of the IoT Agent - IOTA_TIMESTAMP=true # Supply timestamp information with each measurement - IOTA_CB_NGSI_VERSION=v2 # use NGSIv2 when sending updates for active attributes - IOTA_AUTOCAST=true # Ensure Ultralight number values are read as numbers not strings - IOTA_MONGO_HOST=mongo-db # The host name of MongoDB - IOTA_MONGO_PORT=${MONGO_DB_PORT} # The port mongoDB is listening on - IOTA_MONGO_DB=iotagentul # The name of the database used in mongoDB - IOTA_MQTT_HOST=mosquitto # The host name of the MQTT Broker - IOTA_MQTT_PORT=1883 # The port the MQTT Broker is listening on to receive topics - IOTA_DEFAULT_RESOURCE= # Default is blank. I'm using MQTT so I don't need a resource - IOTA_DEFAULT_TRANSPORT=MQTT - IOTA_PROVIDER_URL=http://iot-agent:${IOTA_NORTH_PORT} healthcheck: interval: 5s # Tutorial acts as a series of dummy IoT Sensors over IOTA Tangle tutorial: labels: org.fiware: 'tutorial' image: quay.io/fiware/tutorials.context-provider hostname: iot-sensors container_name: fiware-tutorial depends_on: - orion-v2 - iot-agent networks: default: aliases: - tutorial - context-provider expose: - "${TUTORIAL_APP_PORT}" - "${TUTORIAL_DUMMY_DEVICE_PORT}" ports: - "${TUTORIAL_APP_PORT}:${TUTORIAL_APP_PORT}" # localhost:3000 - "${TUTORIAL_DUMMY_DEVICE_PORT}:${TUTORIAL_DUMMY_DEVICE_PORT}" # localhost:3001 environment: - "MONGO_URL=mongodb://mongo-db:27017" - "DEBUG=tutorial:*" - "WEB_APP_PORT=${TUTORIAL_APP_PORT}" # Port used by the content provider proxy and web-app for viewing data - "IOTA_HTTP_HOST=iot-agent" - "IOTA_HTTP_PORT=${IOTA_SOUTH_PORT}" - "DUMMY_DEVICES_PORT=${TUTORIAL_DUMMY_DEVICE_PORT}" # Port used by the dummy IOT devices to receive commands - "DUMMY_DEVICES_TRANSPORT=IOTA" # Default transport used by dummy IoT devices - "DUMMY_DEVICES_API_KEYS=1068318794,3020035,3314136,3089326" - "IOTA_NODE=https://chrysalis-nodes.iota.cafe" - "IOTA_MESSAGE_INDEX=fiware" - "CONTEXT_BROKER=http://orion:${ORION_PORT}/v2" # URL of the context broker to update context - "NGSI_LD_PREFIX=urn:ngsi-ld:" # - "DUMMY_DEVICES_RATE=3000" - "OPENWEATHERMAP_KEY_ID=" - "TWITTER_CONSUMER_KEY=" - "TWITTER_CONSUMER_SECRET=" deploy: resources: limits: cpus: '0.2' memory: 160M reservations: cpus: '0.1' memory: 40M # Database mongo-db: labels: org.fiware: 'tutorial' image: mongo:${MONGO_DB_VERSION} hostname: mongo-db container_name: db-mongo expose: - "${MONGO_DB_PORT}" ports: - "${MONGO_DB_PORT}:${MONGO_DB_PORT}" # localhost:27017 networks: - default volumes: - mongo-db:/data healthcheck: test: ["CMD","mongosh", "--eval", "db.adminCommand('ping')"] interval: 5s timeout: 5s retries: 3 start_period: 5s iota-gateway: image: iota-gateway hostname: iota-gateway container_name: iota-gateway build: context: iota-gateway dockerfile: Dockerfile networks: - default environment: - "DEBUG=gateway:*" - "MQTT_BROKER_URL=mqtt://mosquitto" - "IOTA_NODE=https://chrysalis-nodes.iota.cafe" - "IOTA_MESSAGE_INDEX=fiware" - "MQTT_TOPIC_PROTOCOL=ul" deploy: resources: limits: cpus: '0.2' memory: 160M reservations: cpus: '0.1' memory: 40M # Other services mosquitto: image: eclipse-mosquitto:1.6.14 hostname: mosquitto container_name: mosquitto expose: - "1883" - "9001" ports: - "1883:1883" - "9001:9001" volumes: - ./mosquitto/mosquitto.conf:/mosquitto/config/mosquitto.conf networks: - default networks: default: labels: org.fiware: 'tutorial' ipam: config: - subnet: 172.18.1.0/24 volumes: mongo-db: ~