version: "3.8"
name: ${PROJECT_NAME}

services:
    docpress:
        profiles:
            - docpress
            - tibi-dev
        image: node:20
        volumes:
            - ./:/data
            - ./tmp:/tmp
            - ./tmp/nonexistent:/nonexistent
            - ./tmp/.npm:/.npm
            - ./tmp/.yarn:/.yarn
        working_dir: /data/docs
        command: sh -c "yarn install && yarn docpress:serve"
        expose:
            - 3000
        labels:
            - traefik.enable=true
            - online.testversion.code.subdomain=${PROJECT_NAME}-docpress
        user: ${UID}:${GID}

    yarnstart:
        profiles:
            - tibi
            - tibi-dev
        image: node:20
        volumes:
            - ./:/data
            - ./tmp:/tmp
            - ./tmp/nonexistent:/nonexistent
            - ./tmp/.npm:/.npm
            - ./tmp/.yarn:/.yarn
        working_dir: /data
        command: sh -c "yarn install && API_BASE=http://tibiserver:8080/api/v1/_/${TIBI_NAMESPACE} yarn start${START_SCRIPT}"
        expose:
            - 3000
        labels:
            - traefik.enable=true
            - online.testversion.code.subdomain=${PROJECT_NAME}
            - traefik.http.routers.${PROJECT_NAME}-yarnstart.middlewares=${PROJECT_NAME}-yarnstart
            - traefik.http.middlewares.${PROJECT_NAME}-yarnstart.basicauth.usersfile=${PWD}/.basic-auth-web
        user: ${UID}:${GID}

    tibiserver:
        profiles:
            - tibi
        image: gitbase.de/cms/tibi-server
        volumes:
            - ./:/data
        environment:
            DB_DIAL: mongodb://mongo
            DB_PREFIX: ${TIBI_PREFIX}
            MAIL_HOST: maildev:25
            SECURITY_ALLOWABSOLUTEPATHS: "true"
            SECURITY_ALLOWUPPERPATHS: "true"
        depends_on:
            - mongo
        expose:
            - 8080
        labels:
            - traefik.enable=true
            - traefik.http.services.${PROJECT_NAME}-tibiserver.loadbalancer.server.port=8080
            - online.testversion.code.subdomain=${PROJECT_NAME}-tibiserver

    tibiserver-dev:
        hostname: tibiserver
        build:
            context: ./
            dockerfile: ./../../cms/tibi-server/Dockerfile.air
        profiles:
            - tibi-dev
        volumes:
            - ./:/data
            - ./../../cms/tibi-server:/tibi-server
            - ./../../../../tmp/go/pkg:/go/pkg
        working_dir: /tibi-server
        environment:
            GOCACHE: /tmp/
            DB_DIAL: mongodb://mongo
            DB_PREFIX: ${TIBI_PREFIX}
            MAIL_HOST: maildev:25
            SECURITY_ALLOWABSOLUTEPATHS: "true"
            SECURITY_ALLOWUPPERPATHS: "true"
        depends_on:
            - mongo
        user: ${UID}:${GID}
        expose:
            - 8080
        labels:
            - traefik.enable=true
            - traefik.http.services.${PROJECT_NAME}-tibiserver.loadbalancer.server.port=8080
            - online.testversion.code.subdomain=${PROJECT_NAME}-tibiserver

    tibiadmin:
        profiles:
            - tibi
        image: gitbase.de/cms/tibi-admin
        environment:
            INDEX: spa.html
            WEBROOT: /data
            API: /api:http://tibiserver:8080/api/v1
            PORT: 80
        depends_on:
            - tibiserver
        expose:
            - 80
        labels:
            - traefik.enable=true
            - online.testversion.code.subdomain=${PROJECT_NAME}-tibiadmin
            - traefik.http.routers.${PROJECT_NAME}-tibiadmin.middlewares=${PROJECT_NAME}-tibiadmin
            - traefik.http.middlewares.${PROJECT_NAME}-tibiadmin.basicauth.usersfile=${PWD}/.basic-auth-code

    tibiadmin-dev:
        profiles:
            - tibi-dev
        image: node:20
        volumes:
            - ./../../cms/tibi-admin:/data
        working_dir: /data
        command: sh -c "yarn install && API_BASE=http://tibiserver:8080/api/v1 yarn start:code-server"
        expose:
            - 3000
        labels:
            - traefik.enable=true
            - online.testversion.code.subdomain=${PROJECT_NAME}-tibiadmin-dev
            - traefik.http.routers.${PROJECT_NAME}-tibiadmin-dev.middlewares=${PROJECT_NAME}-tibiadmin-dev
            - traefik.http.middlewares.${PROJECT_NAME}-tibiadmin-dev.basicauth.usersfile=${PWD}/.basic-auth-code
        user: ${UID}:${GID}

    mongo:
        profiles:
            - tibi
            - tibi-dev
        image: gitbase.de/server/mongo:4.2
        volumes:
            - ./tmp/mongo-data:/data/db
        user: ${UID}:${GID}

    adminmongo:
        profiles:
            - tibi
            - tibi-dev
        image: gitbase.de/server/adminmongo
        environment:
            CONN_NAME: mongo
            DB_HOST: mongo
            PORT: 1234
        expose:
            - 1234
        labels:
            - traefik.enable=true
            - online.testversion.code.subdomain=${PROJECT_NAME}-adminmongo
            - traefik.http.routers.${PROJECT_NAME}-adminmongo.middlewares=${PROJECT_NAME}-adminmongo
            - traefik.http.middlewares.${PROJECT_NAME}-adminmongo.basicauth.usersfile=${PWD}/.basic-auth-code

    maildev:
        profiles:
            - tibi
            - tibi-dev
        image: maildev/maildev
        command: node bin/maildev --web 1080 --smtp 25 -v --hide-extensions=STARTTLS
        expose:
            - 1080
        labels:
            - traefik.enable=true
            - online.testversion.code.subdomain=${PROJECT_NAME}-maildev
            - traefik.http.services.${PROJECT_NAME}-maildev.loadbalancer.server.port=1080
            - traefik.http.routers.${PROJECT_NAME}-maildev.middlewares=${PROJECT_NAME}-maildev
            - traefik.http.middlewares.${PROJECT_NAME}-maildev.basicauth.usersfile=${PWD}/.basic-auth-code

    chisel:
        profiles:
            - chisel
        image: jpillora/chisel
        expose:
            - 8080
        labels:
            - traefik.enable=true
            - online.testversion.code.subdomain=${PROJECT_NAME}-chisel
        command: server --port 8080 --auth coder:coder