# 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 Custom XML Protocol iot-agent: image: quay.io/fiware/iotagent-xml build: context: iot-agent dockerfile: Dockerfile hostname: iot-agent container_name: fiware-iot-agent depends_on: - mongo-db networks: - default expose: - "${IOTA_NORTH_PORT}" - "${IOTA_SOUTH_PORT}" ports: - "${IOTA_NORTH_PORT}:${IOTA_NORTH_PORT}" # localhost:4041 - "${IOTA_SOUTH_PORT}:${IOTA_SOUTH_PORT}" # localhost:7896 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=DEBUG # 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=iotagentxml # The name of the database used in mongoDB - IOTA_HTTP_PORT=${IOTA_SOUTH_PORT} # The port used for device traffic over HTTP - IOTA_PROVIDER_URL=http://iot-agent:${IOTA_NORTH_PORT} - IOTA_DEFAULT_RESOURCE=/iot/xml healthcheck: interval: 5s # Tutorial acts as a series of dummy IoT Sensors over HTTP 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=HTTP" # Default transport used by dummy Io devices - "DUMMY_DEVICES_API_KEY=4jggokgpepnvsb2uv4s40d59ov" - "DUMMY_DEVICES_PAYLOAD=XML" - "CONTEXT_BROKER=http://orion:${ORION_PORT}/v2" # URL of the context broker to update context - "OPENWEATHERMAP_KEY_ID=" - "TWITTER_CONSUMER_KEY=" - "TWITTER_CONSUMER_SECRET=" # 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 networks: default: labels: org.fiware: 'tutorial' ipam: config: - subnet: 172.18.1.0/24 volumes: mongo-db: ~