services:
  nyuukyou:
    build: yume-mods/nyuukyou
    restart: always
    user: "${MISSKEY_UID}:${MISSKEY_GID}"
    profiles: [web]
    links:
      - web
    depends_on:
      web:
        condition: service_healthy
    networks:
      - internal_network
      - external_network
    ports:
      - "3001:3001"
    volumes:
      - ./nyuukyou:/store
    
  web:
    build: 
      context: .
      args:
        - UID: "${MISSKEY_UID}"
        - GID: "${MISSKEY_GID}"
    profiles: [web]
    restart: always
    user: "${MISSKEY_UID}:${MISSKEY_GID}"
    links:
      - db
      - redis
#     - mcaptcha
#     - meilisearch
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy
    ports:
      - "3000:3000"
    networks:
      - internal_network
      - external_network
    # env_file:
    #   - .config/docker.env
    volumes:
      - ./files:/misskey/files
      - ./.config:/misskey/.config:ro

  redis:
    restart: always
    image: redis:7-alpine
    user: "${MISSKEY_UID}:${MISSKEY_GID}"
    networks:
      - internal_network
    volumes:
      - ./redis:/data
    healthcheck:
      test: "redis-cli ping"
      interval: 5s
      retries: 20

  db:
    restart: always
    image: l1drm/postgres-pgroonga:alpine-15-znver4
    user: "${MISSKEY_UID}:${MISSKEY_GID}"
    shm_size: 2gb
    networks:
      - internal_network
    env_file:
      - .config/docker.env
    volumes:
      - ./db:/var/lib/postgresql/data
    healthcheck:
      test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
      interval: 5s
      retries: 20

  replikey:
    restart: always
    image: l1drm/replikey:latest
    profiles: [replikey-master]
    user: "${MISSKEY_UID}:${MISSKEY_GID}"
    links:
      - db
      - redis
    networks:
      - internal_network
      - external_network
    ports:
      - "5443:5443"
    volumes:
      - ./replikey:/etc/replikey:ro
    command: [
        "network",
        "reverse-proxy",
        "--listen",
        "0.0.0.0:5443",
        "--cert",
        "/etc/replikey/cert.pem",
        "--key",
        "/etc/replikey/key.pem",
        "--ca",
        "/etc/replikey/ca.pem",
        "--redis-sni",
        "${MTLS_REDIS_SNI}",
        "--redis-target",
        "redis:6379",
        "--postgres-sni",
        "${MTLS_POSTGRES_SNI}",
        "--postgres-target",
        "db:5432",
      ]
  
  replikey-postgres-slave:
    restart: always
    image: l1drm/replikey:latest
    profiles: [replikey-slave]
    user: "${MISSKEY_UID}:${MISSKEY_GID}"
    links:
      - db
      - redis
    networks:
      - internal_network
      - external_network
    ports:
      # - "4001:4001"
    volumes:
      - ./replikey:/etc/replikey:ro
    command: [
        "network",
        "forward-proxy",
        "--listen",
        "0.0.0.0:4001",
        "--sni",
        "${MTLS_POSTGRES_SNI}",
        "--target",
        "db:5432",
        "--cert",
        "/etc/replikey/cert.pem",
        "--key",
        "/etc/replikey/key.pem",
        "--ca",
        "/etc/replikey/ca.pem",
      ]

  replikey-redis-slave:
    restart: always
    image: l1drm/replikey:latest
    profiles: [replikey-slave]
    user: "${MISSKEY_UID}:${MISSKEY_GID}"
    links:
      - db
      - redis
    networks:
      - internal_network
      - external_network
    ports:
      # - "4002:4002"
    volumes:
      - ./replikey:/etc/replikey:ro
    command: [
        "network",
        "forward-proxy",
        "--listen",
        "0.0.0.0:4002",
        "--sni",
        "${MTLS_REDIS_SNI}",
        "--target",
        "redis:6379",
        "--cert",
        "/etc/replikey/cert.pem",
        "--key",
        "/etc/replikey/key.pem",
        "--ca",
        "/etc/replikey/ca.pem",
      ]

#  mcaptcha:
#    restart: always
#    image: mcaptcha/mcaptcha:latest
#    networks:
#      internal_network:
#      external_network:
#        aliases:
#          - localhost
#    ports:
#      - 7493:7493
#    env_file:
#      - .config/docker.env
#    environment:
#      PORT: 7493
#      MCAPTCHA_redis_URL: "redis://mcaptcha_redis/"
#    depends_on:
#      db:
#        condition: service_healthy
#      mcaptcha_redis:
#        condition: service_healthy
#
#  mcaptcha_redis:
#    image: mcaptcha/cache:latest
#    networks:
#      - internal_network
#    healthcheck:
#      test: "redis-cli ping"
#      interval: 5s
#      retries: 20

#  meilisearch:
#    restart: always
#    image: getmeili/meilisearch:v1.3.4
#    environment:
#      - MEILI_NO_ANALYTICS=true
#      - MEILI_ENV=production
#    env_file:
#      - .config/meilisearch.env
#    networks:
#      - internal_network
#    volumes:
#      - ./meili_data:/meili_data

networks:
  internal_network:
    internal: true
  external_network: