diff --git a/.github/workflows/build-docker.yml b/.github/workflows/build-docker.yml index 3fb2e10..0276584 100644 --- a/.github/workflows/build-docker.yml +++ b/.github/workflows/build-docker.yml @@ -149,6 +149,16 @@ jobs: source ./tool.sh build_image openclaw latest docker_openclaw/openclaw.Dockerfile && push_image openclaw + ## Hermes Agent + job-hermes: + name: "hermes" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - run: | + source ./tool.sh + build_image hermes latest docker_hermes/hermes.Dockerfile && push_image hermes + ## DevBox - base job-base-dev: name: "developer,base-dev" @@ -217,6 +227,7 @@ jobs: "job-base-dev", "job-nocobase", "job-openclaw", + "job-hermes", "job-logent", "job-storebox", "job-searxng", diff --git a/docker_devbox/dev.Dockerfile b/docker_devbox/dev.Dockerfile index 2d1fa1e..8eca792 100644 --- a/docker_devbox/dev.Dockerfile +++ b/docker_devbox/dev.Dockerfile @@ -40,10 +40,6 @@ RUN set -eux && source /opt/utils/script-utils.sh \ ## ----------------------------- If installing R IDEs: R_rstudio and R_rshiny && source /opt/utils/script-devbox-rstudio.sh \ && for profile in $(echo $ARG_PROFILE_R | tr "," "\n") ; do ( setup_R_${profile} ) ; done \ - ## ----------------------------- Install supervisord - && source /opt/utils/script-setup-sys.sh && setup_supervisord \ - ## ----------------------------- Install caddy - && source /opt/utils/script-setup-net.sh && setup_caddy 2.11.2 \ ## Clean up and display components version information... && list_installed_packages && install__clean diff --git a/docker_devbox/work/start-supervisord.sh b/docker_devbox/work/start-supervisord.sh deleted file mode 100644 index f81c589..0000000 --- a/docker_devbox/work/start-supervisord.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -[ $BASH ] && [ -f /etc/profile ] && [ -z $ENTER_PROFILE ] && . /etc/profile - -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -LOG_FORMAT=json exec supervisord -c /etc/supervisord/supervisord.conf diff --git a/docker_gui/gui_linux.Dockerfile b/docker_gui/gui_linux.Dockerfile index c8c861f..9c5a779 100644 --- a/docker_gui/gui_linux.Dockerfile +++ b/docker_gui/gui_linux.Dockerfile @@ -27,7 +27,10 @@ RUN set -eux && chmod +x /opt/utils/*.sh \ fi \ && mv /opt/utils/docker-entrypoint.sh /opt/selkies/docker-entrypoint.sh \ && mv /opt/utils/install_list_selkies.apt /opt/selkies/ \ - && chmod +x /opt/selkies/docker-entrypoint.sh + && chmod +x /opt/selkies/docker-entrypoint.sh \ + ## Build pixelflux wheel into /opt/selkies + && apt install -y build-essential cmake pkg-config libx11-dev libxext-dev libxfixes-dev libjpeg-dev libx264-dev libyuv-dev libavcodec-dev libavutil-dev libva-dev \ + && cd / && pip wheel --no-cache-dir --no-binary :all: pixelflux -w /opt/selkies # Stage 2: runtime image @@ -40,9 +43,6 @@ COPY --from=builder /opt/selkies /opt/selkies RUN set -eux && cd /opt/selkies \ && source /opt/utils/script-utils.sh \ && install_apt /opt/selkies/install_list_selkies.apt \ - && apt install -y build-essential cmake pkg-config libx11-dev libxext-dev libxfixes-dev libjpeg-dev libx264-dev libyuv-dev libavcodec-dev libavutil-dev libva-dev \ - && pip install --no-cache-dir --no-binary :all: pixelflux \ - && apt purge -y build-essential cmake pkg-config libx11-dev libxext-dev libxfixes-dev libjpeg-dev libx264-dev libyuv-dev libavcodec-dev libavutil-dev libva-dev \ && pip install --no-cache-dir ./*.whl \ && if [ -f /opt/selkies/lib/selkies_joystick_interposer.so ]; then \ ln -sf /opt/selkies/lib/selkies_joystick_interposer.so /usr/lib/selkies_joystick_interposer.so ; \ @@ -52,6 +52,7 @@ RUN set -eux && cd /opt/selkies \ && ln -sf /opt/selkies/lib/libudev.so.1.0.0-fake /usr/lib/libudev.so.1 \ && ln -sf /opt/selkies/lib/libudev.so.1.0.0-fake /usr/lib/libudev.so ; \ fi \ + && rm -f /opt/selkies/*.whl \ && list_installed_packages && install__clean ENV PATH=/opt/selkies:/opt/conda/bin:${PATH} diff --git a/docker_hermes/README.md b/docker_hermes/README.md new file mode 100644 index 0000000..1ecc71c --- /dev/null +++ b/docker_hermes/README.md @@ -0,0 +1,61 @@ +# Hermes Agent Docker Image + +This directory contains the Dockerfile for building the [Hermes Agent](https://github.com/nousresearch/hermes-agent) Docker image. + +## Optimization Features + +- **Multi-stage Build**: Significantly reduces image size by separating the build environment from the runtime environment. +- **Persistent Storage**: All user data, configurations, and logs are stored in `/root/workspace`. +- **Runtime Environment**: Uses the base Python environment instead of a virtual environment for simplicity and efficiency. + +## Quick Start + +### Build Image + +```bash +docker build -f hermes.Dockerfile -t hermes-agent:latest . +``` + +### Run with Docker Compose + +```bash +cd demo +docker compose up -d +``` + +### Run Manually + +```bash +# Run with persistent volume +docker run -d \ + --name hermes \ + --hostname hermes \ + -p 8000:8000 \ + -v /path/to/your/data:/root/workspace \ + hermes-agent:latest +``` + +## Environment Variables + +| Variable | Default | Description | +|----------|---------|-------------| +| HERMES_HOME | `/root/workspace` | Home directory for hermes data | +| HOME | `/root/workspace` | System HOME environment variable | +| PLAYWRIGHT_BROWSERS_PATH | `/opt/hermes/.playwright` | Path for Playwright browsers | + +## Volumes + +- `/root/workspace` - Persistent data directory for hermes configuration, memories, and skills. This should be mapped to a host directory for data persistence. + +## Build Arguments + +| Argument | Default | Description | +|----------|---------|-------------| +| BASE_NAMESPACE | (empty) | Namespace for the base image | +| BASE_IMG | `node` | Base image name (expected to have Node and Python) | + +## Documentation + +For more information about Hermes Agent, see: +- [Official Documentation](https://hermes-agent.nousresearch.com/docs/) +- [GitHub Repository](https://github.com/nousresearch/hermes-agent) diff --git a/docker_hermes/demo/docker-compose.yml b/docker_hermes/demo/docker-compose.yml new file mode 100644 index 0000000..b095988 --- /dev/null +++ b/docker_hermes/demo/docker-compose.yml @@ -0,0 +1,16 @@ +name: "svc-hermes" + +services: + hermes: + container_name: svc-hermes + hostname: svc-hermes + image: "quay.io/labnow/hermes:latest" + pull_policy: if_not_present + restart: unless-stopped + network_mode: host + environment: + - TZ=Asia/Shanghai + - HERMES_DASHBOARD=true # Set to true to start the dashboard alongside the gateway + volumes: + - /data/hermes:/opt/data + diff --git a/docker_hermes/hermes.Dockerfile b/docker_hermes/hermes.Dockerfile new file mode 100644 index 0000000..51fcfc0 --- /dev/null +++ b/docker_hermes/hermes.Dockerfile @@ -0,0 +1,66 @@ +# Distributed under the terms of the Modified BSD License. + +ARG BASE_NAMESPACE +ARG BASE_IMG="node" + +# --- Building Stage --- +FROM ${BASE_NAMESPACE:+$BASE_NAMESPACE/}${BASE_IMG} AS builder + +LABEL maintainer="postmaster@labnow.ai" + +# Build-time environment +ENV NODE_ENV=development +WORKDIR /build + +# Clone source +RUN git clone --depth 1 --branch main https://github.com/nousresearch/hermes-agent.git . + +# Install Node dependencies and build frontend +RUN set -eux \ + && export npm_config_install_links=false \ + && npm install --include=dev --prefer-offline --no-audit \ + && (cd web && npm run build) \ + && (cd ui-tui && npm run build) \ + && mkdir -p hermes_cli/tui_dist && cp ui-tui/dist/entry.js hermes_cli/tui_dist/ + +# Build Python wheel +RUN set -eux \ + && python3 -m pip install --upgrade pip build \ + && python3 -m build --wheel --outdir dist + +# --- Runtime Stage --- +FROM ${BASE_NAMESPACE:+$BASE_NAMESPACE/}${BASE_IMG} + +LABEL maintainer="postmaster@labnow.ai" + +# Production environment +ENV NODE_ENV=production +ENV HERMES_HOME=/root/workspace +ENV HERMES_WEB_DIST=/usr/local/lib/python3.12/dist-packages/hermes_cli/web_dist +ENV HERMES_TUI_DIR=/usr/local/lib/python3.12/dist-packages/hermes_cli/tui_dist +ENV PATH="/opt/node/bin:/opt/conda/bin:/root/.local/bin:${PATH}" +ENV HOME=/root/workspace +WORKDIR /root/workspace +ENV PLAYWRIGHT_BROWSERS_PATH=/opt/hermes/.playwright + +# Copy utilities and tools +COPY work /opt/utils/ +RUN chmod +x /opt/utils/*.sh && cp /opt/utils/start-hermes.sh /usr/local/bin/start-hermes.sh + +# Copy build artifacts from builder +COPY --from=builder /build/dist/*.whl /tmp/ + +# Install Runtime dependencies +RUN set -eux \ + && pip install --no-cache-dir /tmp/*.whl \ + && npx playwright install --with-deps chromium --only-shell \ + ## Install supervisord (Go version) + && source /opt/utils/script-setup-sys.sh && setup_supervisord \ + && source /opt/utils/script-utils.sh && install_apt /opt/utils/install_list_hermes.apt \ + && install__clean \ + && rm -rf /tmp/*.whl + +# Data persistence +VOLUME /root/workspace + +CMD ["start-hermes.sh"] diff --git a/docker_hermes/work/install_list_hermes.apt b/docker_hermes/work/install_list_hermes.apt new file mode 100644 index 0000000..48ac66a --- /dev/null +++ b/docker_hermes/work/install_list_hermes.apt @@ -0,0 +1,9 @@ +iputils-ping +ripgrep +ffmpeg +libffi-dev +libolm-dev +procps +openssh-client +docker-cli +xz-utils diff --git a/docker_hermes/work/start-hermes.sh b/docker_hermes/work/start-hermes.sh new file mode 100644 index 0000000..4b66cbb --- /dev/null +++ b/docker_hermes/work/start-hermes.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash +set -eu + +# Setup data directory +HERMES_HOME="${HERMES_HOME:-/root/workspace}" +mkdir -p "$HERMES_HOME" + +for sub in cron sessions logs hooks memories skills skins plans workspace home pairing platforms/pairing logs/gateways; do + mkdir -p "$HERMES_HOME/$sub" +done + +# Seed initial config files +seed_one() { + local dest=$1 + local src=$2 + if [ ! -f "$HERMES_HOME/$dest" ] && [ -f "/opt/hermes/$src" ]; then + cp "/opt/hermes/$src" "$HERMES_HOME/$dest" + fi +} +seed_one ".env" ".env.example" +seed_one "config.yaml" "cli-config.yaml.example" +seed_one "SOUL.md" "docker/SOUL.md" + +if [ -f "$HERMES_HOME/.env" ]; then + chmod 600 "$HERMES_HOME/.env" 2>/dev/null || true +fi + +# Run schema migration +if [ -f "$HERMES_HOME/config.yaml" ]; then + python3 -m scripts.docker_config_migrate || true +fi + +# Seed bootstrap auth.json and gateway_state.json +if [ ! -f "$HERMES_HOME/auth.json" ] && [ -n "${HERMES_AUTH_JSON_BOOTSTRAP:-}" ]; then + printf '%s' "$HERMES_AUTH_JSON_BOOTSTRAP" > "$HERMES_HOME/auth.json" + chmod 600 "$HERMES_HOME/auth.json" +fi +if [ ! -f "$HERMES_HOME/gateway_state.json" ] && [ "${HERMES_GATEWAY_BOOTSTRAP_STATE:-}" = "running" ]; then + printf '{"gateway_state":"running"}\n' > "$HERMES_HOME/gateway_state.json" + chmod 644 "$HERMES_HOME/gateway_state.json" +fi + +# Sync bundled skills +if [ -d "/opt/hermes/skills" ]; then + python3 -m tools.skills_sync || true +fi + +# Find agent-browser Playwright binary and set env +if [ -z "${AGENT_BROWSER_EXECUTABLE_PATH:-}" ] && [ -n "${PLAYWRIGHT_BROWSERS_PATH:-}" ] && [ -d "$PLAYWRIGHT_BROWSERS_PATH" ]; then + browser_bin=$(find "$PLAYWRIGHT_BROWSERS_PATH" -type f -executable \( -name 'chrome' -o -name 'chromium' -o -name 'chrome-headless-shell' -o -name 'headless_shell' -o -name 'chromium-browser' \) 2>/dev/null | head -n 1) + if [ -n "$browser_bin" ]; then + export AGENT_BROWSER_EXECUTABLE_PATH="$browser_bin" + echo "[start-hermes] Set AGENT_BROWSER_EXECUTABLE_PATH=$browser_bin" + fi +fi + +# Configure environments for command invocation +export HOME=/root/workspace +cd /root/workspace + +# If arguments are passed, route them +if [ $# -gt 0 ]; then + # If the first argument is an executable in PATH, execute it directly (e.g. bash, sh, sleep) + if command -v "$1" >/dev/null 2>&1; then + exec "$@" + else + # Otherwise, pass to hermes CLI + exec hermes "$@" + fi +fi + +# No arguments: start supervisord to run both gateway and dashboard (if requested) +exec /opt/utils/supervisord.sh diff --git a/docker_hermes/work/supervisord.sh b/docker_hermes/work/supervisord.sh new file mode 100644 index 0000000..601b51d --- /dev/null +++ b/docker_hermes/work/supervisord.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash +# Generate /etc/supervisord.conf dynamically and run supervisord +set -eu + +# Set up dashboard parameters +dash_host="${HERMES_DASHBOARD_HOST:-0.0.0.0}" +dash_port="${HERMES_DASHBOARD_PORT:-9119}" + +insecure="" +case "${HERMES_DASHBOARD_INSECURE:-}" in + 1|true|TRUE|True|yes|YES|Yes) insecure="--insecure" ;; +esac + +dashboard_autostart="false" +case "${HERMES_DASHBOARD:-}" in + 1|true|TRUE|True|yes|YES|Yes) dashboard_autostart="true" ;; +esac + +# Generate /etc/supervisord.conf +cat < /etc/supervisord.conf +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:gateway] +command=exec hermes gateway run --replace +directory=/opt/data +autostart=true +autorestart=true +stdout_logfile=/dev/stdout +stderr_logfile=/dev/stderr +stdout_logfile_maxbytes=0 +stderr_logfile_maxbytes=0 + +[program:dashboard] +command=exec hermes dashboard --host ${dash_host} --port ${dash_port} --no-open ${insecure} +directory=/opt/data +autostart=${dashboard_autostart} +autorestart=true +stdout_logfile=/dev/stdout +stderr_logfile=/dev/stderr +stdout_logfile_maxbytes=0 +stderr_logfile_maxbytes=0 +EOF + +echo "[start-hermes] Starting supervisord..." +exec supervisord -c /etc/supervisord.conf diff --git a/docker_litellm/README.md b/docker_litellm/README.md new file mode 100644 index 0000000..ea6e4f3 --- /dev/null +++ b/docker_litellm/README.md @@ -0,0 +1,47 @@ +# LiteLLM Docker Image + +This directory contains the Dockerfile for building the [LiteLLM](https://github.com/BerriAI/litellm) Docker image, following the LabNow optimized multi-stage build pattern. + +## Optimization Features + +- **Multi-stage Build**: Separates the UI compilation and Python packaging from the runtime environment to keep the final image slim. +- **Persistent Storage**: Uses `/root/workspace` for all configurations and data. +- **Ready to Use**: Includes the LiteLLM Proxy with the Admin UI pre-compiled. + +## Quick Start + +### Build Image + +```bash +docker build -f litellm.Dockerfile -t litellm-labnow:latest . +``` + +### Run Manually + +```bash +# Run with persistent volume +docker run -d \ + --name litellm \ + -p 4000:4000 \ + -v /path/to/your/config:/root/workspace \ + litellm-labnow:latest +``` + +By default, it will look for a `config.yaml` in the workspace. If not found, a basic one will be created. + +## Environment Variables + +| Variable | Default | Description | +|----------|---------|-------------| +| LITELLM_HOME | `/root/workspace` | Home directory for LiteLLM data | +| HOME | `/root/workspace` | System HOME environment variable | + +## Volumes + +- `/root/workspace` - Persistent directory for `config.yaml` and other LiteLLM data. + +## Documentation + +For more information about LiteLLM, see: +- [Official Documentation](https://docs.litellm.ai/) +- [GitHub Repository](https://github.com/BerriAI/litellm) diff --git a/docker_litellm/litellm.Dockerfile b/docker_litellm/litellm.Dockerfile new file mode 100644 index 0000000..6ee0115 --- /dev/null +++ b/docker_litellm/litellm.Dockerfile @@ -0,0 +1,66 @@ +# Distributed under the terms of the Modified BSD License. + +ARG BASE_NAMESPACE +ARG BASE_IMG="node" + +# --- Building Stage --- +FROM ${BASE_NAMESPACE:+$BASE_NAMESPACE/}${BASE_IMG} AS builder + +LABEL maintainer="postmaster@labnow.ai" + +# Build-time environment +ENV NODE_ENV=development +WORKDIR /build + +# Clone source +RUN git clone --depth 1 --branch main https://github.com/BerriAI/litellm.git . + +# Build UI (Dashboard) +RUN set -eux \ + && cd ui/litellm-dashboard \ + && npm install \ + && npm run build \ + && mkdir -p ../../litellm/proxy/_experimental/out \ + && cp -r out/* ../../litellm/proxy/_experimental/out/ + +# Build Python wheel +RUN set -eux \ + && python3 -m pip install --upgrade pip build \ + && python3 -m build --wheel --outdir dist + +# --- Runtime Stage --- +FROM ${BASE_NAMESPACE:+$BASE_NAMESPACE/}${BASE_IMG} + +LABEL maintainer="postmaster@labnow.ai" + +# Production environment +ENV NODE_ENV=production +ENV LITELLM_HOME=/root/workspace +ENV PATH="/opt/node/bin:/opt/conda/bin:/root/.local/bin:${PATH}" +ENV HOME=/root/workspace + +WORKDIR /root/workspace + +# Copy utilities and tools +COPY work /opt/utils/ +RUN chmod +x /opt/utils/*.sh && cp /opt/utils/start-litellm.sh /usr/local/bin/start-litellm.sh + +# Copy build artifacts from builder +COPY --from=builder /build/dist/*.whl /tmp/ + +# Install Runtime dependencies +RUN set -eux \ + && pip install --no-cache-dir /tmp/*.whl \ + && pip install --no-cache-dir 'litellm[proxy]' \ + ## Install supervisord (Go version) if needed or use simple entrypoint + && source /opt/utils/script-setup-sys.sh && setup_supervisord \ + && source /opt/utils/script-utils.sh && install_apt /opt/utils/install_list_litellm.apt \ + && install__clean \ + && rm -rf /tmp/*.whl + +# Data persistence +VOLUME /root/workspace + +EXPOSE 4000 + +CMD ["start-litellm.sh"] diff --git a/docker_litellm/work/install_list_litellm.apt b/docker_litellm/work/install_list_litellm.apt new file mode 100644 index 0000000..fe2c6b7 --- /dev/null +++ b/docker_litellm/work/install_list_litellm.apt @@ -0,0 +1 @@ +# Add any apt packages here diff --git a/docker_litellm/work/start-litellm.sh b/docker_litellm/work/start-litellm.sh new file mode 100644 index 0000000..c4739f4 --- /dev/null +++ b/docker_litellm/work/start-litellm.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +set -eu + +# Setup workspace directory +LITELLM_HOME="${LITELLM_HOME:-/root/workspace}" +mkdir -p "$LITELLM_HOME" + +export HOME="$LITELLM_HOME" +cd "$LITELLM_HOME" + +# Default config if not exists +if [ ! -f "config.yaml" ]; then + echo "Creating default config.yaml..." + cat < config.yaml +model_list: + - model_name: gpt-3.5-turbo + litellm_params: + model: gpt-3.5-turbo +EOF +fi + +# If arguments are passed, route them +if [ $# -gt 0 ]; then + if command -v "$1" >/dev/null 2>&1; then + exec "$@" + else + exec litellm "$@" + fi +fi + +# No arguments: start litellm proxy +exec litellm --config config.yaml --port 4000 --host 0.0.0.0 diff --git a/docker_searxng/demo/docker-compose.searxng-standalone.yml b/docker_searxng/demo/docker-compose.searxng-standalone.yml index bd47f84..0a60b67 100644 --- a/docker_searxng/demo/docker-compose.searxng-standalone.yml +++ b/docker_searxng/demo/docker-compose.searxng-standalone.yml @@ -4,7 +4,7 @@ networks: services: svc-searxng: container_name: svc-searxng - image: docker.io/labnow/searxng:latest + image: quay.io/labnow/searxng:latest restart: unless-stopped networks: - net-searxng @@ -13,8 +13,6 @@ services: # volumes: # - ./searxng/settings.yml:/etc/searxng/settings.yml:rw # - ./searxng/limiter.toml:/etc/searxng/limiter.toml:rw - # - ./searxng/Caddyfile:/etc/searxng/Caddyfile:rw - # - ./searxng/supervisord.conf:/etc/searxng/supervisord.conf:rw environment: - SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost:8000}/ - SEARXNG_HOSTNAME=${SEARXNG_HOSTNAME:-http://localhost:8000} @@ -22,8 +20,6 @@ services: - UWSGI_WORKERS=${SEARXNG_UWSGI_WORKERS:-4} - UWSGI_THREADS=${SEARXNG_UWSGI_THREADS:-4} # user: root - # command: ["/opt/searxng/start-supervisord.sh"] - # command: ["tail", "-f", "/dev/null"] # cap_drop: ["ALL"] # cap_add: ["AUDIT_WRITE", "CHOWN", "SETGID", "SETUID", "NET_BIND_SERVICE"] logging: diff --git a/docker_searxng/demo/docker-compose.searxng-with-proxy.yml b/docker_searxng/demo/docker-compose.searxng-with-proxy.yml index 03814ea..fd001f2 100644 --- a/docker_searxng/demo/docker-compose.searxng-with-proxy.yml +++ b/docker_searxng/demo/docker-compose.searxng-with-proxy.yml @@ -5,7 +5,7 @@ services: svc-searxng: container_name: svc-searxng hostname: svc-searxng - image: docker.io/labnow/searxng:latest + image: quay.io/labnow/searxng:latest restart: unless-stopped networks: ["net-searxng"] ports: @@ -13,8 +13,6 @@ services: volumes: - ./searxng/settings.yml:/etc/searxng/settings.yml:rw # - ./searxng/limiter.toml:/etc/searxng/limiter.toml:rw - # - ./searxng/Caddyfile:/etc/searxng/Caddyfile:rw - # - ./searxng/supervisord.conf:/etc/searxng/supervisord.conf:rw environment: - SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost:8000}/ - SEARXNG_HOSTNAME=${SEARXNG_HOSTNAME:-http://localhost:8000} @@ -22,7 +20,6 @@ services: - UWSGI_WORKERS=${SEARXNG_UWSGI_WORKERS:-4} - UWSGI_THREADS=${SEARXNG_UWSGI_THREADS:-4} # user: root - # command: ["/opt/searxng/start-supervisord.sh"] # command: ["tail", "-f", "/dev/null"] # cap_drop: ["ALL"] # cap_add: ["AUDIT_WRITE", "CHOWN", "SETGID", "SETUID", "NET_BIND_SERVICE"] @@ -33,7 +30,7 @@ services: max-file: "1" svc-clash: - image: docker.io/labnow/clash + image: quay.io/labnow/clash container_name: svc-clash hostname: svc-clash restart: unless-stopped @@ -47,5 +44,3 @@ services: - "9090:9090" # volumes: # - ./clash/config.yaml:/opt/clash/config/config.yaml - environment: - - PROXY_PROVIDER="https://subs.zeabur.app/clash"