FROM python:3.12-slim LABEL maintainer="nesquena" LABEL description="Hermes Web UI — browser interface for Hermes Agent" # Install system packages ENV DEBIAN_FRONTEND=noninteractive # Make use of apt-cacher-ng if available RUN if [ "A${BUILD_APT_PROXY:-}" != "A" ]; then \ echo "Using APT proxy: ${BUILD_APT_PROXY}"; \ printf 'Acquire::http::Proxy "%s";\n' "$BUILD_APT_PROXY" > /etc/apt/apt.conf.d/01proxy; \ fi \ && apt-get update \ && apt-get install -y --no-install-recommends ca-certificates wget gnupg \ && rm -rf /var/lib/apt/lists/* \ && apt-get clean RUN apt-get update -y --fix-missing --no-install-recommends \ && apt-get install -y --no-install-recommends \ apt-utils \ locales \ ca-certificates \ sudo \ curl \ rsync \ && apt-get upgrade -y \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # UTF-8 RUN localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 ENV LANG=en_US.utf8 ENV LC_ALL=C # Set environment variables ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PYTHONIOENCODING=utf-8 WORKDIR /apptoo # Every sudo group user does not need a password RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers # Create a new group for the hermeswebui and hermeswebuitoo users RUN groupadd -g 1024 hermeswebui \ && groupadd -g 1025 hermeswebuitoo # The hermeswebui (resp. hermeswebuitoo) user will have UID 1024 (resp. 1025), # be part of the hermeswebui (resp. hermeswebuitoo) and users groups and be sudo capable (passwordless) RUN useradd -u 1024 -d /home/hermeswebui -g hermeswebui -s /bin/bash -m hermeswebui \ && usermod -G users hermeswebui \ && adduser hermeswebui sudo RUN useradd -u 1025 -d /home/hermeswebuitoo -g hermeswebuitoo -s /bin/bash -m hermeswebuitoo \ && usermod -G users hermeswebuitoo \ && adduser hermeswebuitoo sudo RUN chown -R hermeswebuitoo:hermeswebuitoo /apptoo USER root COPY --chmod=555 docker_init.bash /hermeswebui_init.bash RUN touch /.within_container # Remove APT proxy configuration and clean up APT downloaded files RUN rm -rf /var/lib/apt/lists/* /etc/apt/apt.conf.d/01proxy \ && apt-get clean USER root # Pre-install uv system-wide so the container doesn't need internet access at runtime. # Installing as root places uv in /usr/local/bin, available to all users. # The init script will skip the download when uv is already on PATH. RUN curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR=/usr/local/bin sh USER hermeswebuitoo COPY . /apptoo # Default to binding all interfaces (required for container networking) ENV HERMES_WEBUI_HOST=0.0.0.0 ENV HERMES_WEBUI_PORT=8787 EXPOSE 8787 CMD ["/hermeswebui_init.bash"]