Build 3001262204: add gravitee stack

This commit is contained in:
2026-01-30 22:07:03 +13:00
parent 138069590b
commit 05d5d908cf
6 changed files with 160 additions and 3 deletions

2
.gitignore vendored
View File

@@ -10,3 +10,5 @@ backend/.pytest_cache/
frontend/node_modules/
frontend/.next/
*.log
gravitee/**
!gravitee/README.md

View File

@@ -45,6 +45,18 @@ Then open:
3) Log in at http://localhost:3000.
4) Visit Settings to confirm service health.
### Gravitee APIM (optional)
If you want API management in front of Magent, you can run the Gravitee stack alongside
the main container:
```bash
docker compose -f docker-compose.yml -f docker-compose.gravitee.yml up -d
```
Then open the Management UI at http://localhost:8084 and create a new API that points to
`http://magent:8000`. The Gravitee gateway will be available at http://localhost:8082.
### Docker environment variables (sample)
```bash

View File

@@ -1,2 +1,2 @@
BUILD_NUMBER = "3001262148"
CHANGELOG = '2026-01-22\\n- Initial commit\\n- Ignore build artifacts\\n- Update README\\n- Update README with Docker-first guide\\n\\n2026-01-23\\n- Fix cache titles via Jellyseerr media lookup\\n- Split search actions and improve download options\\n- Fallback manual grab to qBittorrent\\n- Hide header actions when signed out\\n- Add feedback form and webhook\\n- Fix cache titles and move feedback link\\n- Show available status on landing when in Jellyfin\\n- Add default branding assets when missing\\n- Use bundled branding assets\\n- Remove password fields from users page\\n- Add Docker Hub compose override\\n- Fix backend Dockerfile paths for root context\\n- Copy public assets into frontend image\\n- Use backend branding assets for logo and favicon\\n\\n2026-01-24\\n- Route grabs through Sonarr/Radarr only\\n- Document fix buttons in how-it-works\\n- Clarify how-it-works steps and fixes\\n- Map Prowlarr releases to Arr indexers for manual grab\\n- Improve request handling and qBittorrent categories\\n\\n2026-01-25\\n- Add site banner, build number, and changelog\\n- Automate build number tagging and sync\\n- Improve mobile header layout\\n- Move account actions into avatar menu\\n- Add user stats and activity tracking\\n- Add Jellyfin login cache and admin-only stats\\n- Tidy request sync controls\\n- Seed branding logo from bundled assets\\n- Serve bundled branding assets by default\\n- Harden request cache titles and cache-only reads\\n- Build 2501262041\\n\\n2026-01-26\\n- Fix cache title hydration\\n- Fix sync progress bar animation\\n\\n2026-01-27\\n- Add cache control artwork stats\\n- Improve cache stats performance (build 271261145)\\n- Fix backend cache stats import (build 271261149)\\n- Clarify request sync settings (build 271261159)\\n- Bump build number to 271261202\\n- Fix request titles in snapshots (build 271261219)\\n- Fix snapshot title fallback (build 271261228)\\n- Add cache load spinner (build 271261238)\\n- Bump build number (process 2) 271261322\\n- Add service test buttons (build 271261335)\\n- Fallback to TMDB when artwork cache fails (build 271261524)\\n- Hydrate missing artwork from Jellyseerr (build 271261539)\\n\\n2026-01-29\\n- release: 2901262036\\n- release: 2901262044\\n- release: 2901262102\\n- Hardcode build number in backend\\n- Bake build number and changelog\\n- Update full changelog\\n- Tidy full changelog\\n- Build 2901262240: cache users\n\n2026-01-30\n- Merge backend and frontend into one container'
BUILD_NUMBER = "3001262204"
CHANGELOG = '2026-01-22\\n- Initial commit\\n- Ignore build artifacts\\n- Update README\\n- Update README with Docker-first guide\\n\\n2026-01-23\\n- Fix cache titles via Jellyseerr media lookup\\n- Split search actions and improve download options\\n- Fallback manual grab to qBittorrent\\n- Hide header actions when signed out\\n- Add feedback form and webhook\\n- Fix cache titles and move feedback link\\n- Show available status on landing when in Jellyfin\\n- Add default branding assets when missing\\n- Use bundled branding assets\\n- Remove password fields from users page\\n- Add Docker Hub compose override\\n- Fix backend Dockerfile paths for root context\\n- Copy public assets into frontend image\\n- Use backend branding assets for logo and favicon\\n\\n2026-01-24\\n- Route grabs through Sonarr/Radarr only\\n- Document fix buttons in how-it-works\\n- Clarify how-it-works steps and fixes\\n- Map Prowlarr releases to Arr indexers for manual grab\\n- Improve request handling and qBittorrent categories\\n\\n2026-01-25\\n- Add site banner, build number, and changelog\\n- Automate build number tagging and sync\\n- Improve mobile header layout\\n- Move account actions into avatar menu\\n- Add user stats and activity tracking\\n- Add Jellyfin login cache and admin-only stats\\n- Tidy request sync controls\\n- Seed branding logo from bundled assets\\n- Serve bundled branding assets by default\\n- Harden request cache titles and cache-only reads\\n- Build 2501262041\\n\\n2026-01-26\\n- Fix cache title hydration\\n- Fix sync progress bar animation\\n\\n2026-01-27\\n- Add cache control artwork stats\\n- Improve cache stats performance (build 271261145)\\n- Fix backend cache stats import (build 271261149)\\n- Clarify request sync settings (build 271261159)\\n- Bump build number to 271261202\\n- Fix request titles in snapshots (build 271261219)\\n- Fix snapshot title fallback (build 271261228)\\n- Add cache load spinner (build 271261238)\\n- Bump build number (process 2) 271261322\\n- Add service test buttons (build 271261335)\\n- Fallback to TMDB when artwork cache fails (build 271261524)\\n- Hydrate missing artwork from Jellyseerr (build 271261539)\\n\\n2026-01-29\\n- release: 2901262036\\n- release: 2901262044\\n- release: 2901262102\\n- Hardcode build number in backend\\n- Bake build number and changelog\\n- Update full changelog\\n- Tidy full changelog\\n- Build 2901262240: cache users\n\n2026-01-30\n- Merge backend and frontend into one container\n- Add optional Gravitee APIM stack for API management'

111
docker-compose.gravitee.yml Normal file
View File

@@ -0,0 +1,111 @@
services:
mongodb:
image: mongo:7.0
container_name: magent-gravitee-mongodb
restart: always
volumes:
- ./gravitee/mongodb/data:/data/db
networks:
- gravitee_storage
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.16.1
container_name: magent-gravitee-elasticsearch
restart: always
volumes:
- ./gravitee/elasticsearch/data:/var/lib/elasticsearch/data
environment:
- http.host=0.0.0.0
- transport.host=0.0.0.0
- xpack.security.enabled=false
- cluster.name=gravitee
- bootstrap.memory_lock=true
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
nofile: 65536
networks:
- gravitee_storage
gravitee_gateway:
image: graviteeio/apim-gateway:latest
container_name: magent-gravitee-gateway
restart: always
ports:
- "8082:8082"
depends_on:
- mongodb
- elasticsearch
volumes:
- ./gravitee/apim-gateway/logs:/opt/graviteeio-gateway/logs
- ./gravitee/apim-gateway/plugins:/opt/graviteeio-gateway/plugins-ext
environment:
- gravitee_management_mongodb_uri=mongodb://mongodb:27017/gravitee?serverSelectionTimeoutMS=5000&connectTimeoutMS=5000&socketTimeoutMS=5000
- gravitee_ratelimit_mongodb_uri=mongodb://mongodb:27017/gravitee?serverSelectionTimeoutMS=5000&connectTimeoutMS=5000&socketTimeoutMS=5000
- gravitee_reporters_elasticsearch_endpoints_0=http://elasticsearch:9200
- gravitee_plugins_path_0=/opt/graviteeio-gateway/plugins
- gravitee_plugins_path_1=/opt/graviteeio-gateway/plugins-ext
networks:
- gravitee_storage
- gravitee_frontend
- default
gravitee_management_api:
image: graviteeio/apim-management-api:latest
container_name: magent-gravitee-mgmtapi
restart: always
ports:
- "8083:8083"
- "8072:8072"
depends_on:
- mongodb
- elasticsearch
volumes:
- ./gravitee/apim-management-api/plugins:/opt/graviteeio-management-api/plugins-ext
environment:
- gravitee_management_mongodb_uri=mongodb://mongodb:27017/gravitee?serverSelectionTimeoutMS=5000&connectTimeoutMS=5000&socketTimeoutMS=5000
- gravitee_analytics_elasticsearch_endpoints_0=http://elasticsearch:9200
- gravitee_installation_standalone_portal_url=http://localhost:8085
- gravitee_plugins_path_0=/opt/graviteeio-management-api/plugins
- gravitee_plugins_path_1=/opt/graviteeio-management-api/plugins-ext
- gravitee_integration_enabled=true
networks:
- gravitee_storage
- gravitee_frontend
gravitee_management_ui:
image: graviteeio/apim-management-ui:latest
container_name: magent-gravitee-mgmtui
restart: always
ports:
- "8084:8080"
depends_on:
- gravitee_management_api
volumes:
- ./gravitee/apim-management-ui/logs:/var/log/nginx
environment:
- MGMT_API_URL=http://localhost:8083/management/organizations/DEFAULT/environments/DEFAULT/
networks:
- gravitee_frontend
gravitee_portal_ui:
image: graviteeio/apim-portal-ui:latest
container_name: magent-gravitee-portal
restart: always
ports:
- "8085:8080"
depends_on:
- gravitee_management_api
volumes:
- ./gravitee/apim-portal-ui/logs:/var/log/nginx
environment:
- PORTAL_API_URL=http://localhost:8083/portal/environments/DEFAULT
networks:
- gravitee_frontend
networks:
gravitee_frontend:
gravitee_storage:

View File

@@ -1,7 +1,7 @@
{
"name": "magent-frontend",
"private": true,
"version": "3001262148",
"version": "3001262204",
"scripts": {
"dev": "next dev",
"build": "next build",

32
gravitee/README.md Normal file
View File

@@ -0,0 +1,32 @@
# Gravitee APIM (optional)
This folder is used by the optional Gravitee APIM stack defined in `docker-compose.gravitee.yml`.
The services will create their own data directories under `gravitee/` when started.
## Start Gravitee with Magent
Run Magent and Gravitee together:
```bash
docker compose -f docker-compose.yml -f docker-compose.gravitee.yml up -d
```
Gravitee services:
- Gateway: http://localhost:8082
- Management API: http://localhost:8083
- Management UI: http://localhost:8084
- Developer portal: http://localhost:8085
Default credentials for the Management UI are typically `admin / admin` on first boot.
Change the password on first login.
## Create a Magent API in Gravitee
1) Open the Management UI at http://localhost:8084.
2) Create a new API (v4 or v2).
3) Set the backend endpoint to `http://magent:8000`.
4) Add a path mapping for `/api` if you want the gateway to front the Magent API.
5) Deploy the API.
Once deployed, route requests through `http://localhost:8082`.