version: "3"
services:

# Core API services are pinned, HA is provided for functions.
    gateway:
        volumes:
            - "/var/run/docker.sock:/var/run/docker.sock"
        ports:
            - 8080:8080
        image: alexellis2/faas-gateway:latest-armhf
        networks:
            - functions
        deploy:
            placement:
                constraints: [node.role == manager]

    prometheus:
        image: alexellis2/prometheus-armhf:latest
        volumes:
            - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
            - ./prometheus/alert.rules:/etc/prometheus/alert.rules

        command: "-config.file=/etc/prometheus/prometheus.yml -storage.local.path=/prometheus -storage.local.memory-chunks=10000 --alertmanager.url=http://alertmanager:9093"
        ports:
            - 9090:9090
        depends_on:
            - gateway
            - alertmanager
        environment:
            no_proxy:   "gateway"
        networks:
            - functions
        deploy:
            placement:
                constraints: [node.role == manager]


    alertmanager:
        image: alexellis2/alertmanager-armhf
        environment:
            no_proxy:   "gateway"
        volumes:
            - ./prometheus/alertmanager.yml:/alertmanager.yml
        command:
            - '-config.file=/alertmanager.yml'
        networks:
            - functions
        ports:
            - 9093:9093
        deploy:
            placement:
                constraints: [node.role == manager]

# Sample functions go here.
    wordcount:
        image: alexellis2/faas-alpinefunction:latest-armhf
        depends_on:
            - gateway
        networks:
            - functions
        environment:
            fprocess:   "wc"
            no_proxy:   "gateway"
            https_proxy: $https_proxy



    echoit:
        image: alexellis2/faas-alpinefunction:latest-armhf
        depends_on:
            - gateway
        networks:
            - functions
        environment:
            fprocess:   "cat"
            no_proxy:   "gateway"
            https_proxy: $https_proxy

    nodeinfo:
        image: alexellis2/faas-nodeinfo:latest-armhf
        depends_on:
            - gateway
        networks:
            - functions
        environment:
            no_proxy:   "gateway"
            https_proxy: $https_proxy

    hubstats:
        image: alexellis2/faas-hubstats:latest-armhf
        depends_on:
            - gateway
        networks:
            - functions
        environment:
            no_proxy:   "gateway"
            https_proxy: $https_proxy

networks:
    functions:
        driver: overlay
        # Docker does not support this option yet - maybe create outside of the stack and reference as "external"?
        #attachable: true
