name: yuki services: bot: image: ghcr.io/yuanyeyoutao/yuki:${YUKI_VERSION:?missing} init: true restart: unless-stopped env_file: - path: .env required: false extra_hosts: - "host.docker.internal:host-gateway" environment: HTTP_PROXY: "${http_proxy-${HTTP_PROXY-}}" http_proxy: "${http_proxy-${HTTP_PROXY-}}" HTTPS_PROXY: "${https_proxy-${HTTPS_PROXY-}}" https_proxy: "${https_proxy-${HTTPS_PROXY-}}" ALL_PROXY: "${all_proxy-${ALL_PROXY-}}" all_proxy: "${all_proxy-${ALL_PROXY-}}" NO_PROXY: "${no_proxy-${NO_PROXY-localhost,127.0.0.1,::1,bot,snowluma}}" no_proxy: "${no_proxy-${NO_PROXY-localhost,127.0.0.1,::1,bot,snowluma}}" CODE_MODE_ENABLED: "false" COMPOSE_PROFILES: ${COMPOSE_PROFILES:-} APP_HOST: 0.0.0.0 APP_PORT: 8080 DATABASE_URL: sqlite+aiosqlite:////app/data/yuki.db MODEL_PROFILES_FILE: /app/webui-config/model_profiles.toml SOUL_FILE: /app/character/SOUL.md WORKSPACE_DIRECTORY: /app/workspace CONVERSATION_MEDIA_CACHE_DIRECTORY: /app/data/conversation-media-cache SOCIAL_TRANSFER_DIRECTORY: /app/social-transfer SOCIAL_GATEWAY_TRANSFER_DIRECTORY: /yuki-transfer SANDBOX_SOCKET: /run/yuki-sandbox/manager.sock SNOWLUMA_CONFIG_OUTPUT: /app/snowluma-data/config/onebot.json SNOWLUMA_REVERSE_WS_URL: ws://bot:8080/onebot/v11/snowluma/ws SNOWLUMA_UID: ${SNOWLUMA_UID:-1000} SNOWLUMA_GID: ${SNOWLUMA_GID:-1000} ONEBOT_ACCESS_TOKEN: ${ONEBOT_ACCESS_TOKEN:-} expose: - "8080" volumes: - ./data:/app/data - ./character:/app/character - ./workspace:/app/workspace - ./social-transfer:/app/social-transfer - /run/yuki-sandbox:/run/yuki-sandbox:ro - ./snowluma-data:/app/snowluma-data - ./config:/app/config:ro - ./webui-config:/app/webui-config:ro - ./plugins:/app/plugins:ro networks: - yuki-network healthcheck: test: - CMD - python - -c - "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8080/livez', timeout=3)" interval: 10s timeout: 5s retries: 5 start_period: 15s stop_grace_period: 20s snowluma: profiles: ["snowluma"] image: ${SNOWLUMA_IMAGE:-motricseven7/snowluma:latest} # The upstream setup starts a web viewer unconditionally. Desktop talks to x11vnc. command: - /bin/sh - -ec - | if [ -f /opt/noVNC/utils/novnc_proxy ]; then ln -sf /bin/true /opt/noVNC/utils/novnc_proxy fi exec /root/start.sh restart: unless-stopped init: true depends_on: bot: condition: service_healthy shm_size: ${SNOWLUMA_SHM_SIZE:-1gb} cap_add: - SYS_PTRACE security_opt: - seccomp=unconfined environment: VNC_PASSWD: ${SNOWLUMA_VNC_PASSWORD:-replace-with-a-long-random-vnc-password} SNOWLUMA_UID: ${SNOWLUMA_UID:-1000} SNOWLUMA_GID: ${SNOWLUMA_GID:-1000} SNOWLUMA_WEBUI_HOST: 0.0.0.0 SNOWLUMA_WEBUI_PORT: 5099 SNOWLUMA_LOG_LEVEL: ${SNOWLUMA_LOG_LEVEL:-info} SNOWLUMA_SCREEN: ${SNOWLUMA_SCREEN:-1920x1080x24} SNOWLUMA_HOOK_AUTOLOAD: ${SNOWLUMA_HOOK_AUTOLOAD:-1} SNOWLUMA_EXTRA_QQ_HOMES: ${SNOWLUMA_EXTRA_QQ_HOMES:-} SNOWLUMA_QQ_FLAGS: ${SNOWLUMA_QQ_FLAGS:---disable-gpu --disable-software-rasterizer --disable-gpu-compositing} ports: - "${SNOWLUMA_WEBUI_BIND_ADDRESS:-127.0.0.1}:${SNOWLUMA_WEBUI_HOST_PORT:-5099}:5099" volumes: - ./snowluma-data:/app/data - ./snowluma-qq-config:/app/.config - ./snowluma-qq-data:/app/.local/share - ./snowluma-extra-accounts:/app/qq-accounts - ./social-transfer:/yuki-transfer:ro networks: - yuki-network stop_grace_period: 30s networks: yuki-network: name: yuki-network driver: bridge