x-logging:
      &default-logging
      driver: "json-file"
      options:
          max-size: "200k"
          max-file: "10"

networks:
    default:
        ipam:
            config:
                - subnet: 10.10.0.0/24
    xray:
        ipam:
            config:
                - subnet: 10.10.1.0/24
volumes:
    adguard:

services:
    up:
        image: mercurykd/vpnbot-ng:1.1
        build:
            context: dockerfile
            dockerfile: nginx.dockerfile
            args:
                image: ${IMAGE}
        volumes:
            - ./config/.profile:/root/.ashrc:ro
            - ./config/upstream.conf:/etc/nginx/nginx.conf
            - ./scripts/start_upstream.sh:/start_upstream.sh
            - ./ssh:/ssh
            - ./config/sshd_config:/etc/ssh/sshd_config
            - ./logs/:/logs/
        ports:
            - 443:443/tcp
            - 443:443/udp
        hostname: upstream
        container_name: upstream-${VER}
        depends_on:
            php:
                condition: service_healthy
            ad:
                condition: service_started
            ss:
                condition: service_started
        env_file:
            - path: ./.env
              required: true # default
            - path: ./override.env
              required: false
        stop_grace_period: 1s
        command: ["/bin/sh", "/start_upstream.sh"]
        networks:
            default:
                ipv4_address: 10.10.0.10
        logging: *default-logging
    ng:
        image: mercurykd/vpnbot-ng:1.1
        build:
            context: dockerfile
            dockerfile: nginx.dockerfile
            args:
                image: ${IMAGE}
        volumes:
            - ./config/.profile:/root/.ashrc:ro
            - ./config/nginx.conf:/etc/nginx/nginx.conf
            - ./config/include.conf:/etc/nginx/include.conf
            - ./config/nginx_default.conf:/nginx_default.conf
            - ./scripts/start_ng.sh:/start_ng.sh
            - ./certs/:/certs/
            - ./ssh:/ssh
            - ./config/sshd_config:/etc/ssh/sshd_config
            - ./logs/:/logs/
            - ./app/webapp:/app
        ports:
            - 80:80
        hostname: nginx
        container_name: nginx-${VER}
        depends_on:
            up:
                condition: service_started
        env_file:
            - path: ./.env
              required: true # default
            - path: ./override.env
              required: false
        stop_grace_period: 1s
        command: ["/bin/sh", "/start_ng.sh"]
        networks:
            default:
                ipv4_address: 10.10.0.2
            xray:
                ipv4_address: 10.10.1.2
        logging: *default-logging
    php:
        image: mercurykd/vpnbot-php:1.5
        build:
            dockerfile: dockerfile/php.dockerfile
            args:
                image: ${IMAGE}
        ports:
            - 127.0.0.1:8081:8080
        volumes:
            - ./config/.profile:/root/.ashrc:ro
            - ./config/php.ini:/etc/php81/php.ini
            - ./config/:/config/
            - ./certs/:/certs/
            - ./ssh:/ssh
            - ./app:/app
            - ./logs/:/logs/
            - ./scripts/start_php.sh:/start_php.sh
            - ./scripts/check_file.sh:/check_file.sh
            - ./version:/version
            - ./mirror:/mirror
            - ./.env:/mirror/.env
            - ./update:/update
            - ./.git:/.git
            - ./singbox_windows:/singbox
            - /var/run/docker.sock:/var/run/docker.sock:ro
        environment:
            IP: ${IP}
            VER: ${VER}
        env_file:
            - path: ./.env
              required: true # default
            - path: ./override.env
              required: false
        hostname: php
        container_name: php-${VER}
        # restart: unless-stopped
        stop_grace_period: 1s
        command: ["/bin/sh", "/start_php.sh"]
        working_dir: /app
        networks:
            default:
                ipv4_address: 10.10.0.7
        extra_hosts:
            - "host.docker.internal:host-gateway"
        logging: *default-logging
        healthcheck:
            test: ["CMD", "/bin/sh", "/check_file.sh"]
            interval: 5s
            timeout: 5s
            retries: 5
    service:
        image: mercurykd/vpnbot-php:1.5
        build:
            dockerfile: dockerfile/php.dockerfile
            args:
                image: ${IMAGE}
        volumes:
            - ./config/.profile:/root/.ashrc:ro
            - ./config/php.ini:/etc/php81/php.ini
            - ./config/:/config/
            - ./certs/:/certs/
            - ./ssh:/ssh
            - ./app:/app
            - ./logs/:/logs/
            - ./update:/update
            - ./scripts/start_service.sh:/start_service.sh
            - /var/run/docker.sock:/var/run/docker.sock:ro
        environment:
            IP: ${IP}
            VER: ${VER}
        env_file:
            - path: ./.env
              required: true # default
            - path: ./override.env
              required: false
        hostname: service
        container_name: service-${VER}
        # restart: unless-stopped
        stop_grace_period: 1s
        command: ["/bin/sh", "/start_service.sh"]
        working_dir: /app
        networks:
            default:
                ipv4_address: 10.10.0.15
        logging: *default-logging
        depends_on:
            - up
            - ng
            - php
            - proxy
            - wg
            - wg1
            - ad
            - ss
            - tg
            - xr
            - oc
            - np
    proxy:
        image: mercurykd/vpnbot-ss:1.2
        build:
            dockerfile: dockerfile/shadowsocks.dockerfile
            args:
                image: ${IMAGE}
        volumes:
            - ./config/.profile:/root/.ashrc:ro
            - ./config/sslocal.json:/config.json
            - ./ssh:/ssh
            - ./config/sshd_config:/etc/ssh/sshd_config
            - ./scripts/start_proxy.sh:/start_proxy.sh
        hostname: proxy
        container_name: proxy-${VER}
        depends_on:
            php:
                condition: service_healthy
        networks:
            default:
                ipv4_address: 10.10.0.3
        environment:
            TZ: ${TZ}
        env_file:
            - path: ./.env
              required: true # default
            - path: ./override.env
              required: false
        stop_grace_period: 1s
        command: ["/bin/sh", "/start_proxy.sh"]
        logging: *default-logging
    wg:
        image: mercurykd/vpnbot-wg:1.1
        build:
            dockerfile: dockerfile/wireguard.dockerfile
            args:
                image: ${IMAGE}
        volumes:
            - ./config/.profile:/root/.ashrc:ro
            - ./config/wg0.conf:/etc/wireguard/wg0.conf
            - ./config/pac.json:/pac.json
            - ./scripts/start_wg.sh:/start_wg.sh
            - ./scripts/reset_wg.sh:/reset_wg.sh
            - ./scripts/block_torrent.sh:/block_torrent.sh
            - ./scripts/block_exchange.sh:/block_exchange.sh
            - ./ssh:/ssh
            - ./config/sshd_config:/etc/ssh/sshd_config
        hostname: wireguard
        container_name: wireguard-${VER}
        depends_on:
            php:
                condition: service_healthy
        ports:
            - ${WGPORT}:${WGPORT}/udp
        env_file:
            - path: ./.env
              required: true # default
            - path: ./override.env
              required: false
        environment:
            ADDRESS: ${WGADDRESS}
        cap_add:
            - NET_ADMIN
        devices:
            - /dev/net/tun:/dev/net/tun
        stop_grace_period: 1s
        command: ["/bin/sh", "/start_wg.sh"]
        networks:
            default:
                ipv4_address: 10.10.0.4
        logging: *default-logging
    wg1:
        image: mercurykd/vpnbot-wg:1.1
        build:
            dockerfile: dockerfile/wireguard.dockerfile
            args:
                image: ${IMAGE}
        volumes:
            - ./config/.profile:/root/.ashrc:ro
            - ./config/wg1.conf:/etc/wireguard/wg0.conf
            - ./config/pac.json:/pac.json
            - ./scripts/start_wg.sh:/start_wg.sh
            - ./scripts/reset_wg.sh:/reset_wg.sh
            - ./scripts/block_torrent.sh:/block_torrent.sh
            - ./scripts/block_exchange.sh:/block_exchange.sh
            - ./ssh:/ssh
            - ./config/sshd_config:/etc/ssh/sshd_config
        hostname: wireguard1
        container_name: wireguard1-${VER}
        depends_on:
            php:
                condition: service_healthy
        ports:
            - ${WG1PORT}:${WG1PORT}/udp
        env_file:
            - path: ./.env
              required: true # default
            - path: ./override.env
              required: false
        environment:
            ADDRESS: ${WG1ADDRESS}
        cap_add:
            - NET_ADMIN
        devices:
            - /dev/net/tun:/dev/net/tun
        stop_grace_period: 1s
        command: ["/bin/sh", "/start_wg.sh"]
        networks:
            default:
                ipv4_address: 10.10.0.14
        logging: *default-logging
    ad:
        image: mercurykd/vpnbot-ad:1.1
        build:
            dockerfile: dockerfile/adguard.dockerfile
            args:
                image: ${IMAGE}
        ports:
            - 853:853
        volumes:
            - ./config/.profile:/root/.ashrc:ro
            - type: volume
              target: /opt/adguardhome/work
              source: adguard
            - ./ssh:/ssh
            - ./config/sshd_config:/etc/ssh/sshd_config
            - ./config/:/config/
            - ./certs/:/certs/
            - ./logs/:/logs/
            - ./scripts/start_ad.sh:/start_ad.sh
        hostname: adguard
        container_name: adguard-${VER}
        depends_on:
            php:
                condition: service_healthy
        env_file:
            - path: ./.env
              required: true # default
            - path: ./override.env
              required: false
        stop_grace_period: 1s
        networks:
            default:
                ipv4_address: 10.10.0.5
        cap_add:
            - NET_ADMIN
        entrypoint: ["/bin/sh", "/start_ad.sh"]
        logging: *default-logging
    ss:
        image: mercurykd/vpnbot-ss:1.2
        build:
            dockerfile: dockerfile/shadowsocks.dockerfile
            args:
                image: ${IMAGE}
        volumes:
            - ./config/.profile:/root/.ashrc:ro
            - ./config/ssserver.json:/config.json
            - ./ssh:/ssh
            - ./config/sshd_config:/etc/ssh/sshd_config
            - ./scripts/start_ss.sh:/start_ss.sh
        hostname: shadowsocks
        container_name: shadowsocks-${VER}
        depends_on:
            php:
                condition: service_healthy
        ports:
            - ${SSPORT}:${SSPORT}/tcp
            - ${SSPORT}:${SSPORT}/udp
        env_file:
            - path: ./.env
              required: true # default
            - path: ./override.env
              required: false
        stop_grace_period: 1s
        command: ["/bin/sh", "/start_ss.sh"]
        networks:
            default:
                ipv4_address: 10.10.0.6
        logging: *default-logging
    tg:
        image: mercurykd/vpnbot-tg:1.1
        build:
            dockerfile: dockerfile/telegram.dockerfile
        volumes:
            - ./config/.profile:/root/.ashrc:ro
            - ./ssh:/ssh
            - ./config/sshd_config:/etc/ssh/sshd_config
            - ./scripts/start_tg.sh:/start_tg.sh
            - ./config/mtprotosecret:/mtprotosecret
        hostname: telegram
        container_name: mtproto-${VER}
        depends_on:
            php:
                condition: service_healthy
        ports:
            - ${TGPORT}:${TGPORT}
        environment:
            IP: ${IP}
        env_file:
            - path: ./.env
              required: true # default
            - path: ./override.env
              required: false
        stop_grace_period: 1s
        command: ["/bin/sh", "/start_tg.sh"]
        networks:
            default:
                ipv4_address: 10.10.0.8
        logging: *default-logging
    xr:
        image: mercurykd/vpnbot-xr:1.3
        build:
            dockerfile: dockerfile/xray.dockerfile
            args:
                image: ${IMAGE}
        volumes:
            - ./config/.profile:/root/.ashrc:ro
            - ./ssh:/ssh
            - ./config/sshd_config:/etc/ssh/sshd_config
            - ./config/xray.json:/xray.json
            - ./scripts/start_xray.sh:/start_xray.sh
        hostname: xray
        container_name: xray-${VER}
        depends_on:
            php:
                condition: service_healthy
        env_file:
            - path: ./.env
              required: true # default
            - path: ./override.env
              required: false
        stop_grace_period: 1s
        command: ["/bin/sh", "/start_xray.sh"]
        networks:
            default:
                ipv4_address: 10.10.0.9
            xray:
                ipv4_address: 10.10.1.9
        logging: *default-logging
    oc:
        image: mercurykd/vpnbot-oc:1.2
        build:
            dockerfile: dockerfile/ocserv.dockerfile
            args:
                image: ${IMAGE}
        volumes:
            - ./config/.profile:/root/.ashrc:ro
            - ./ssh:/ssh
            - ./config/sshd_config:/etc/ssh/sshd_config
            - ./config:/etc/ocserv
            - ./certs:/certs
            - ./scripts/start_oc.sh:/start_oc.sh
        hostname: ocserv
        container_name: openconnect-${VER}
        depends_on:
            php:
                condition: service_healthy
        env_file:
            - path: ./.env
              required: true # default
            - path: ./override.env
              required: false
        stop_grace_period: 1s
        command: ["/bin/sh", "/start_oc.sh"]
        cap_add:
            - NET_ADMIN
        devices:
            - /dev/net/tun:/dev/net/tun
        networks:
            default:
                ipv4_address: 10.10.0.11
        logging: *default-logging
        deploy:
            resources:
                limits:
                    cpus: '0.50'
                    memory: 200M
    np:
        image: mercurykd/vpnbot-np:1.1
        build:
            dockerfile: dockerfile/naive.dockerfile
            args:
                image: ${IMAGE}
        volumes:
            - ./config/.profile:/root/.ashrc:ro
            - ./ssh:/ssh
            - ./config/sshd_config:/etc/ssh/sshd_config
            - ./config:/config
            - ./certs:/certs
            - ./scripts/start_np.sh:/start_np.sh
        hostname: naive
        container_name: naive-${VER}
        depends_on:
            php:
                condition: service_healthy
        env_file:
            - path: ./.env
              required: true # default
            - path: ./override.env
              required: false
        stop_grace_period: 1s
        command: ["/bin/sh", "/start_np.sh"]
        cap_add:
            - NET_ADMIN
        networks:
            default:
                ipv4_address: 10.10.0.12
        logging: *default-logging
    wp:
        image: mercurykd/vpnbot-wp:1.2
        build:
            dockerfile: dockerfile/warp.dockerfile
            args:
                image: ${IMAGE}
        cap_add:
            - NET_ADMIN
        devices:
            - /dev/net/tun:/dev/net/tun
        volumes:
            - ./config/.profile:/root/.ashrc:ro
            - ./ssh:/ssh
            - ./config/sshd_config:/etc/ssh/sshd_config
            - ./config:/config
            - ./certs:/certs
            - ./scripts/start_wp.sh:/start_wp.sh
        hostname: warp
        container_name: warp-${VER}
        depends_on:
            php:
                condition: service_healthy
        env_file:
            - path: ./.env
              required: true # default
            - path: ./override.env
              required: false
        stop_grace_period: 1s
        command: ["/bin/sh", "/start_wp.sh"]
        networks:
            default:
                ipv4_address: 10.10.0.13
        logging: *default-logging
