Инструмент для разработчиков и QA — веб-интерфейс для просмотра и управления подключениями к базам данных. Предназначен для развёртывания в Kubernetes или Docker.
- Backend: Micronaut 4.x
- Views: Thymeleaf + HTMX
- Auth: HTTP Basic (логин/пароль из environment)
- Storage: H2 (миграции Flyway)
- i18n: английский и русский
| Тип | Возможности |
|---|---|
| PostgreSQL / CockroachDB / YugabyteDB | Просмотр баз, схем, таблиц; выполнение SQL; редактирование строк |
| MySQL / MariaDB | Просмотр баз и таблиц; выполнение SQL; редактирование строк (если у таблицы есть PK или unique-индекс) |
| MS SQL Server | Просмотр баз, схем, таблиц; выполнение SQL; редактирование строк (если у таблицы есть PK или unique-индекс) |
| Oracle Database | Просмотр схем и таблиц; выполнение SQL; редактирование строк по ROWID |
| MongoDB | Просмотр баз и коллекций; выполнение запросов |
| Redis / Dragonfly / Valkey / KeyDB | Просмотр баз и ключей; типы и значения |
| ClickHouse | Просмотр баз и таблиц; выполнение SQL |
| Cassandra / ScyllaDB | Просмотр keyspace и таблиц; выполнение CQL; редактирование строк (если у таблицы есть primary key) |
| RabbitMQ | Просмотр очередей; просмотр сообщений (peek, только чтение, без редактирования) |
| Kafka | Просмотр топиков и партиций; просмотр записей (только чтение) |
| Elasticsearch / OpenSearch | Просмотр индексов; поиск (Query DSL); просмотр и редактирование документов по _id (без удаления) |
Подключения хранятся в H2. В настройках можно добавлять подключения, проверять их и удалять.
- HTTP Basic Auth (учётные данные из env)
- Светлая и тёмная тема (переключатель в шапке и на странице входа)
- Боковая панель со списком сохранённых подключений и быстрым доступом в Настройки
- Добавление, проверка и удаление подключений для каждого типа БД
- Просмотр метаданных (схемы, таблицы, коллекции, ключи) с постраничной навигацией
- Выполнение SQL (PostgreSQL / CockroachDB / YugabyteDB, MySQL / MariaDB, MS SQL Server, Oracle, ClickHouse, Cassandra / ScyllaDB CQL) и запросов (MongoDB)
- Редактирование и сохранение строк в детальном просмотре (PostgreSQL по ctid, MySQL/MS SQL Server при наличии PK/unique, Oracle по ROWID, MongoDB, Redis / Dragonfly / Valkey / KeyDB, Cassandra / ScyllaDB при наличии primary key, Elasticsearch / OpenSearch — документ по _id)
- HTMX для частичного обновления без перезагрузки страницы
- Локализация: EN и RU (по браузеру или пути)
./gradlew runПриложение: http://localhost:8080
| Переменная | Описание | По умолчанию |
|---|---|---|
PANOPTICUM_USER |
Логин для Basic Auth | admin |
PANOPTICUM_PASSWORD |
Пароль для Basic Auth | admin |
PANOPTICUM_DB_PATH |
Путь к файлам H2 | ./data/panopticum |
PANOPTICUM_CONNECTIONS_JSON |
JSON-массив подключений для загрузки при первом старте (см. ниже) | — |
ADMIN_LOCK |
При true запрещает добавление и удаление подключений (UI и API) |
false |
READ_ONLY |
При true запрещает изменение данных на страницах detail и через API (обновление строк, сохранение ключей Redis) |
false |
Если при старте приложения таблица db_connections пуста, приложение читает переменную окружения PANOPTICUM_CONNECTIONS_JSON и добавляет указанные подключения в H2. Если в базе уже есть хотя бы одно подключение, переменная не используется.
Значение — JSON-массив объектов подключений. Каждый объект можно задать одним из двух способов:
- Явные поля:
name,type,host,port,database,username,password. Поддерживаемые значенияtype:postgresql,mongodb,redis,clickhouse,mysql,sqlserver,oracle,cassandra,rabbitmq,kafka,elasticsearch. - JDBC-строка: поля
nameиjdbcUrl(илиurl). По URL извлекаются тип, хост, порт, база, пользователь и пароль. Поддерживается для PostgreSQL, MySQL, MS SQL Server, Oracle и ClickHouse (напримерjdbc:postgresql://user:pass@host:5432/dbname,jdbc:sqlserver://host:1433;databaseName=db;user=sa;password=secret,jdbc:oracle:thin:@//host:1521/XEPDB1).
Пример:
[
{"name": "prod-pg", "jdbcUrl": "jdbc:postgresql://app:secret@pg.svc:5432/mydb"},
{"name": "prod-mysql", "jdbcUrl": "jdbc:mysql://app:secret@mysql.svc:3306/mydb"},
{"name": "prod-mssql", "jdbcUrl": "jdbc:sqlserver://mssql.svc:1433;databaseName=mydb;user=sa;password=secret"},
{"name": "prod-oracle", "jdbcUrl": "jdbc:oracle:thin:app/secret@//oracle.svc:1521/XEPDB1"},
{"name": "analytics", "jdbcUrl": "jdbc:clickhouse://clickhouse.svc:8123/default"},
{"name": "docs", "type": "mongodb", "host": "mongo.svc", "port": 27017, "database": "mydb", "username": "app", "password": "secret"},
{"name": "cache", "type": "redis", "host": "redis.svc", "port": 6379},
{"name": "events-db", "type": "cassandra", "host": "cassandra.svc", "port": 9042, "database": "mykeyspace", "username": "cassandra", "password": "secret"},
{"name": "broker", "type": "rabbitmq", "host": "rabbitmq.svc", "port": 15672, "username": "guest", "password": "guest"},
{"name": "streaming", "type": "kafka", "host": "kafka.svc", "port": 9092},
{"name": "search", "type": "elasticsearch", "host": "es.svc", "port": 9200, "username": "elastic", "password": "secret"}
]Для Helm: поместите JSON в Secret и смонтируйте его в переменную окружения PANOPTICUM_CONNECTIONS_JSON (например через valueFrom.secretKeyRef). Для JSON с паролями используйте Secret, а не ConfigMap.
./gradlew buildJAR: build/libs/panopticum-all.jar
Образы публикуются автоматически при пуше тега (см. CI/CD). Запуск:
docker pull ghcr.io/thesharque/panopticum:latest
docker run -d --name panopticum \
-p 8080:8080 \
-v panopticum-data:/data \
-e PANOPTICUM_USER=admin \
-e PANOPTICUM_PASSWORD=changeme \
ghcr.io/thesharque/panopticum:latestДля фиксированной версии используйте тег, например ghcr.io/thesharque/panopticum:v4.1.0. Если пакет приватный, сначала выполните вход: echo $GITHUB_TOKEN | docker login ghcr.io -u ВАШ_ЛОГИН_GITHUB --password-stdin.
Образ на Docker Hub: sharque/panopticum
docker pull sharque/panopticum:latest
docker run -d --name panopticum \
-p 8080:8080 \
-v panopticum-data:/data \
-e PANOPTICUM_USER=admin \
-e PANOPTICUM_PASSWORD=changeme \
sharque/panopticum:latestdocker build -t panopticum:latest .
docker run -d --name panopticum \
-p 8080:8080 \
-v panopticum-data:/data \
-e PANOPTICUM_USER=admin \
-e PANOPTICUM_PASSWORD=changeme \
panopticum:latestОткройте http://localhost:8080. Для Kubernetes используйте те же переменные окружения и смонтируйте том на /data для сохранения данных H2.
Пуш тега версии (например v4.1.0) запускает GitHub Actions: один билд Docker-образа и пуш в:
- GitHub Container Registry:
ghcr.io/<owner>/panopticum:<tag> - Docker Hub:
<DOCKERHUB_USERNAME>/panopticum:<tag>(если включено переменной и секретами)
git tag v4.1.0
git push origin v4.1.0Docker Hub: чтобы также пушить в Docker Hub, задайте переменную репозитория ENABLE_DOCKERHUB = true (Settings → Secrets and variables → Actions → Variables) и добавьте секреты DOCKERHUB_USERNAME (логин Docker Hub) и DOCKERHUB_TOKEN (токен). Без этого workflow выполнится и будет пушить только в GHCR.
Образы будут доступны как ghcr.io/<your-org>/panopticum:v0.1 и :latest (и на Docker Hub как <DOCKERHUB_USERNAME>/panopticum:v0.1 / :latest при настройке). Для деплоя (Kubernetes или pull на сервере) добавьте job или отдельный workflow с нужным тегом образа.