Hermes
Lightweight, multi-tenant object storage console and API for S3-compatible backends (MinIO, AWS S3). Manage orgs, users, groups, and roles; browse/upload/delete objects via a clean UI; explore a protected OpenAPI spec — all in one container.
Image: eduard1001171985/hermes:v1.2.0
Exposes: 8080/tcp
Health: GET /healthz
Runs as non-root
Features
Multi-tenant: Organizations, Users, Groups, Roles
Fine-grained permissions: Pull (read) and Push (write)
Super Admin role with full access
Per-organization S3/MinIO configuration (endpoint, keys, bucket, etc.)
Buckets UI to manage configs and browse/upload/delete objects
Protected API docs: embedded (/docs) and standalone Swagger (/swagger)
Cookie-based auth with signup/login flows
JSON REST API with OpenAPI spec
Quick Start (Docker)
Basic run (assuming an existing PostgreSQL database):
# Replace values to point at your PostgreSQL instance
docker run --rm -p 8080:8080 \
-e DB_HOST=localhost \
-e DB_PORT=5432 \
-e DB_USER=postgres \
-e DB_PASSWORD=postgres \
-e DB_NAME=hermes \
--name hermes \
eduard1001171985/hermes:v1.2.0
Copy
Then open:
First-time setup:
Click “Sign up” to create your first Organization and Admin user.
The initial user is a Super Admin (has Pull and Push). Additional users can be granted roles later.
Environment Variables
Database (PostgreSQL):
DB_HOST (default: localhost)
DB_PORT (default: 5432)
DB_USER (default: postgres)
DB_PASSWORD (default: postgres)
DB_NAME (default: hermes)
DB_SSLMODE (default: disable)
Logging:
HERMES_LOG_FORMAT: json (default) or console
HERMES_LOG_LEVEL: debug | info (default) | warn | error
HERMES_LOG_TIME: rfc3339 (default) or epoch
Notes:
No S3 credentials are needed via env vars; storage backends are configured per organization inside the UI.
Ports & Health
Container port: 8080
Liveness/Readiness: GET /healthz
Authentication, Roles, Permissions
Cookie-based authentication
Roles grant capabilities:
Pull: view buckets, list/download objects
Push: manage storages, upload/delete objects
Super Admin is a special system role granting both Pull and Push
API docs require authentication and at least one role
API & OpenAPI
Base path: /api/v1
OpenAPI JSON: /openapi.json (protected)
Embedded docs: /docs
Standalone Swagger UI: /swagger
S3/MinIO Integration
Configure per-organization in the UI: endpoint, region (optional), accessKey, secretKey, useSSL, bucket
Browse, upload, and delete objects according to your role capabilities
Docker Compose (example)
Minimal example using an external PostgreSQL service:
version: "3.9"
services:
hermes:
image: eduard1001171985/hermes:v1.2.0
ports:
- "8080:8080"
environment:
DB_HOST: your-postgres-host
DB_PORT: "5432"
DB_USER: postgres
DB_PASSWORD: postgres
DB_NAME: hermes
Copy
Kubernetes/OpenShift
Container listens on 8080 and provides /healthz for probes
Designed to run as non-root
Provide DB connection via ConfigMap/Secret-style env vars
S3/MinIO is configured in-app per organization
Security
Runs as a non-root user
No in-container persistent write requirements (DB is external)
Tags
v1.2.0 (recommended)
latest (if available)
License
MIT
Project URL
GitHub repository: https://github.com/arencloud/hermes