services:
  # guacd
  guacd:
    container_name: guacd_cub
    image: guacamole/guacd:1.6.0
    networks:
      - guacnetwork
    restart: always
    volumes:
      - ./drive:/drive:rw
      - ./session-recording:/var/lib/guacamole/recordings:rw

  # postgres
  postgres:
    container_name: postgres_cub
    env_file:
      - .env
    image: postgres:15.2-alpine
    environment:
      PGDATA: /var/lib/postgresql/data/guacamole
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_USER: ${POSTGRES_USER}
    networks:
      - guacnetwork
    restart: always
    volumes:
      - ./initdb:/docker-entrypoint-initdb.d:z
      - ./data:/var/lib/postgresql/data:Z

  # guacamole
  guacamole:
    container_name: guacamole_cub
    group_add:
      - "1000"
    depends_on:
      - guacd
      - postgres
    environment:
      TOTP_ENABLED: "true"
      RECORDING_ENABLED: "true"
      GUACD_HOSTNAME: guacd
      POSTGRESQL_ENABLED: "true"
      REMOTE_IP_VALVE_ENABLED: "true"
      POSTGRESQL_DATABASE: ${POSTGRES_DB}
      POSTGRESQL_HOSTNAME: postgres
      POSTGRESQL_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRESQL_USERNAME: ${POSTGRES_USER}
    image: guacamole/guacamole:1.6.0
    networks:
      - guacnetwork
    restart: always
    volumes:
      - ./session-recording:/var/lib/guacamole/recordings:rw

  # nginx
  nginx:
    container_name: nginx_cub
    restart: always
    image: nginx:latest
    volumes:
      - ./nginx/templates:/etc/nginx/templates:ro
      - ./nginx/ssl/self.cert:/etc/nginx/ssl/self.cert:ro
      - ./nginx/ssl/self-ssl.key:/etc/nginx/ssl/self-ssl.key:ro
    ports:
      - 8443:443
    networks:
      - guacnetwork

networks:
  guacnetwork:
    driver: bridge