name: ${DSQL_DEPLOYMENT_NAME:-dsql}

services:
    setup:
        build:
            context: ./docker/setup
            dockerfile: Dockerfile
        env_file: .env
        networks:
            datasquirel:
                ipv4_address: 172.72.0.14
        container_name: ${DSQL_DEPLOYMENT_NAME:-dsql}-dsql-setup
        hostname: ${DSQL_DEPLOYMENT_NAME:-dsql}-dsql-setup
        volumes:
            - .:/app
            - ${DSQL_VOLUME_DB_SSL:-../dsql-data/ssl}:/ssl
            - ${DSQL_VOLUME_SSH:-../dsql-data/ssh}:/ssh

    webapp:
        build:
            context: .
            dockerfile: ${DSQL_DOCKERFILE:-Dockerfile}
        env_file: .env
        networks:
            datasquirel:
                ipv4_address: 172.72.0.34
            coolify:
        container_name: ${DSQL_DEPLOYMENT_NAME:-dsql}-dsql-site
        hostname: ${DSQL_DEPLOYMENT_NAME:-dsql}-dsql-site
        volumes:
            - ${DSQL_VOLUME_STATIC:-../dsql-data/static}:/static
            - ${DSQL_VOLUME_APP:-.}:/app
        ports:
            - ${DSQL_PORT:-7070}:${DSQL_PORT:-7070}
        environment:
            - DSQL_SSL_DIR=/app/ssl
        restart: on-failure:${DSQL_WEB_APP_FAIL_COUNTS:-1}
        depends_on:
            setup:
                condition: service_completed_successfully
            db:
                condition: service_started

    static:
        image: nginx:alpine
        env_file: .env
        networks:
            datasquirel:
                ipv4_address: 172.72.0.28
        container_name: ${DSQL_DEPLOYMENT_NAME:-dsql}-dsql-static
        hostname: ${DSQL_DEPLOYMENT_NAME:-dsql}-dsql-static
        volumes:
            - ${DSQL_VOLUME_STATIC:-../dsql-data/static}:/static
            - ./docker/static/conf.d:/etc/nginx/conf.d
        ports:
            - ${DSQL_STATIC_SERVER_PORT}:80
        restart: always

    db:
        image: mariadb
        env_file: .env
        networks:
            datasquirel:
                ipv4_address: 172.72.0.32
        depends_on:
            setup:
                condition: service_completed_successfully
        container_name: ${DSQL_DEPLOYMENT_NAME:-dsql}-dsql-site-database
        volumes:
            - ${DSQL_VOLUME_DB:-../dsql-data/db}:/var/lib/mysql
            - ${DSQL_VOLUME_DB_SSL:-../dsql-data/ssl}:/ssl
            - ./docker/mariadb/master/conf.d:/etc/mysql/conf.d
            - ./docker/mariadb/.bash_history:/root/.bash_history
        environment:
            - MARIADB_ROOT_PASSWORD=${DSQL_MARIADB_ROOT_PASSWORD:-password}
        restart: always

    db-load-balancer:
        image: nginx:alpine
        env_file: .env
        networks:
            datasquirel:
                ipv4_address: 172.72.0.24
        depends_on:
            db:
                condition: service_started
        container_name: ${DSQL_DEPLOYMENT_NAME:-dsql}-dsql-db-load-balancer
        hostname: ${DSQL_DEPLOYMENT_NAME:-dsql}-dsql-db-load-balancer
        volumes:
            - ${DSQL_DB_LOAD_BALANCER_CONFIGURATION_FILE:-../dsql-data/db-load-balancer-config/nginx.conf}:/etc/nginx/nginx.conf
        ports:
            - ${DSQL_DB_EXPOSED_PORT:-33600}:3306
        restart: always

networks:
    datasquirel:
        driver: bridge
        ipam:
            config:
                - subnet: 172.72.0.0/16
                  gateway: 172.72.0.1
    coolify:
        external: true