Using the prebuilt container images (GHCR)
This project publishes prebuilt images to GitHub Container Registry (GHCR):
App image: https://github.com/users/darkmusic/packages/container/package/ai-forgot-these-cards-app
Web image (Nginx SPA +
/apireverse proxy): https://github.com/users/darkmusic/packages/container/package/ai-forgot-these-cards-web
Pull examples:
Choose a topology
You have two common topologies:
Core stack: app + database (no Nginx). App serves the UI and
/api.Full stack: web (Nginx) + app + database. Web serves the SPA and proxies
/api/*to the app.
The examples below use Docker CLI directly. If you prefer Docker Compose, you can translate the same settings into a compose file.
Recommended: run the full stack (web + app + Postgres)
Create a network:
Start Postgres:
Start the app container.
Important: name this container app so the web container can reach it as http://app:8080.
Start the web container (Nginx).
Open the app:
Full stack URL: http://localhost:8086
Core stack (app + Postgres only)
If you don’t need Nginx, you can skip the web container and use the app directly.
Use the same db and app docker run commands above, but omit the web container.
SQLite mode with the app image (no Postgres)
SQLite mode uses a persisted .db file; you must mount a writable directory.
Then open: http://localhost:8080
Configuration
The containers are configured via environment variables.
Common ones:
APP_SERVER_PORT(default: 8080)DB_VENDOR(postgresorsqlite)DB_URL(Postgres JDBC URL)POSTGRES_USER,POSTGRES_PASSWORDSQLITE_DB_PATH(SQLite file path)SPRING_AI_OPENAI_API_KEY(hosted AI)SPRING_AI_OPENAI_CHAT_BASE_URL(local/remote OpenAI-compatible server)
Tip: if you already have a .env file, Docker can read it:
Default login
Username:
cardsPassword:
cards
Then create a normal USER account via the Admin UI.
Versioning and tags
For repeatable deployments:
Prefer pinning a specific tag instead of
latest.Keep
ai-forgot-these-cards-appandai-forgot-these-cards-webon the same version.
Example:
If your registry tags use a different scheme (e.g. 0.1.2), use the tags shown in GHCR.