captainVersion: 4
services:
    $$cap_appname-db:
        image: postgres:$$cap_postgres_version
        environment:
            POSTGRES_USER: $$cap_db_user
            POSTGRES_PASSWORD: $$cap_db_pass
            POSTGRES_DB: fusionauth
        restart: unless-stopped
        volumes:
            - $$cap_appname-db-data:/var/lib/postgresql/data
        caproverExtra:
            notExposeAsWebApp: 'true'
    $$cap_appname-elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:$$cap_elasticsearch_version
        volumes:
            - $$cap_appname-elasticsearch-data:/usr/share/elasticsearch/data
        restart: always
        environment:
            ES_JAVA_OPTS: -Xms512m -Xmx512m
            cluster.name: $$cap_elasticsearch_cluster_name
            http.port: $$cap_container_search_port
            node.master: $$cap_elasticsearch_node_master
            node.data: $$cap_elasticsearch_node_data
            discovery.type: single-node
            discovery.zen.minimum_master_nodes: $$cap_elasticsearch_minimum_master_nodes
            discovery.zen.ping.unicast.hosts: $$cap_elasticsearch_unicast_hosts
        caproverExtra:
            containerHttpPort: $$cap_container_search_port
    $$cap_appname-fusionauth:
        image: fusionauth/fusionauth-app:$$cap_fusionauth_version
        depends_on:
            - $$cap_appname-db
            - $$cap_appname-elasticsearch
        environment:
            DATABASE_URL: jdbc:postgresql://srv-captain--$$cap_appname-db:5432/fusionauth
            DATABASE_ROOT_USER: $$cap_db_user
            DATABASE_ROOT_PASSWORD: $$cap_db_pass
            DATABASE_USER: $$cap_db_user
            DATABASE_PASSWORD: $$cap_db_pass
            FUSIONAUTH_MEMORY: $$cap_fusion_memory
            FUSIONAUTH_SEARCH_SERVERS: http://srv-captain--$$cap_appname-elasticsearch:9200
            FUSIONAUTH_URL: http://srv-captain--$$cap_appname-fusionauth:9011
        restart: unless-stopped
        volumes:
            - $$cap_appname-fusionauth-config:/usr/local/fusionauth/config
        caproverExtra:
            containerHttpPort: $$cap_container_port
caproverOneClickApp:
    variables:
        - id: $$cap_db_user
          label: Database user
          defaultValue: fusion
          validRegex: /^([a-zA-Z0-9])+$/
        - id: $$cap_db_pass
          label: Database password
          description: ''
          validRegex: /.{1,}/
        - id: $$cap_fusionauth_version
          label: FusionAuth Version
          defaultValue: 1.7.2
          description: 'See tags at: https://hub.docker.com/r/fusionauth/fusionauth-app/tags'
          validRegex: /^([^\s^\/])+$/
        - id: $$cap_fusion_memory
          label: Fusion Memory
          defaultValue: 256M
          description: ''
          validRegex: /^([a-zA-Z0-9])+$/
        - id: $$cap_postgres_version
          label: Postgres Version
          defaultValue: '9.6'
          description: ''
          validRegex: /^([^\s^\/])+$/
        - id: $$cap_container_port
          label: Container TCP Port
          defaultValue: '9011'
          description: Internal port for Fusion Auth container to listens to.
          validRegex: /^([0-9])+$/
        - id: $$cap_container_search_port
          label: Container TCP Port
          defaultValue: '9200'
          description: Internal port for Elasticsearch the container listens to.
          validRegex: /^([0-9])+$/
        - id: $$cap_elasticsearch_version
          label: 'Elasticsearch Version Tag '
          description: 'Check out the releases overview: https://www.elastic.co/de/downloads/elasticsearch'
          defaultValue: 6.7.1
          validRegex: /^([^\s^\/])+$/
        - id: $$cap_elasticsearch_cluster_name
          label: Cluster Name
          description: Only nodes within the same cluster name can be combined
          defaultValue: elasticsearch-cluster
          validRegex: /^([^\s^\/])+$/
        - id: $$cap_elasticsearch_unicast_hosts
          label: Unicasts hosts
          description: 'References to other node to attach to. (for example: srv-captain--XXX)'
          defaultValue: 'false'
          validRegex: /^([^\s^\/])+$/
        - id: $$cap_elasticsearch_node_data
          label: Node Data
          description: Should the node used for storing data? (true / false)
          defaultValue: 'true'
          validRegex: /^([^\s^\/])+$/
        - id: $$cap_elasticsearch_node_master
          label: Node Master
          description: Define node as master-eligible (usual first node YES, others NO).
          defaultValue: 'true'
          validRegex: /^([^\s^\/])+$/
        - id: $$cap_elasticsearch_minimum_master_nodes
          label: Minimum Master Nodes
          description: 'Define minimum amount of master (N) ( best practice: ceil(N/2 + 1) ).'
          defaultValue: '1'
          validRegex: /^([0-9])+$/
    instructions:
        start: >-
            NOTE: This app requires at least 4GB of RAM. Without this requirement it fails to start up.


            FusionAuth is a modern platform for Customer Identity and Access Management (CIAM). FusionAuth provides APIs and a responsive web user interface to support login, registration, localized email, multi-factor authentication, reporting and much more. See: https://fusionauth.io/docs/v1/tech/getting-started/ and https://github.com/FusionAuth/fusionauth-containers
        end: FusionAuth is deployed and available as srv-captain--$$cap_appname-fusionauth:9011 to other apps
    displayName: FusionAuth
    isOfficial: true
    description: FusionAuth is a scalable, identity and user management platform built for devs
    documentation: 'Adapted from: https://github.com/FusionAuth/fusionauth-containers'
