Installation
Coffer is deployed as three Docker containers: a PostgreSQL database, a Spring Boot backend, and an Nginx-served Angular frontend. Pre-built images are pulled from GitHub Container Registry.
Prerequisites
Section titled “Prerequisites”- Docker and Docker Compose installed
- At least 1 GB of available RAM (512 MB allocated to the JVM by default)
Quick start
Section titled “Quick start”1. Clone the deployment repository
Section titled “1. Clone the deployment repository”git clone https://github.com/verbindolai/coffer-deploy.gitcd coffer-deploy2. Configure environment
Section titled “2. Configure environment”cp .env.example .envEdit .env and set at minimum:
# Required — pick a strong passwordDB_PASSWORD=your_secure_database_password
# Recommended — enables Numista catalog integrationNUMISTA_API_KEY=your_numista_api_keySee Configuration for all available options.
3. Start Coffer
Section titled “3. Start Coffer”docker compose up -dThis pulls the pre-built backend and frontend images, starts PostgreSQL, runs Liquibase migrations automatically, and starts the application.
4. Access Coffer
Section titled “4. Access Coffer”Open http://localhost (or whatever port you configured via FRONTEND_PORT).
The API documentation is available at http://localhost:8080/swagger-ui.html through the backend container.
Updating
Section titled “Updating”Pull the latest images and restart:
docker compose pulldocker compose up -dDatabase migrations are applied automatically on startup via Liquibase.
Stopping
Section titled “Stopping”docker compose downYour data is preserved in Docker volumes (coffer-db-data and coffer-images). To remove all data:
docker compose down -vArchitecture overview
Section titled “Architecture overview”┌──────────────┐ ┌──────────────────┐ ┌─────────────┐│ Frontend │────▶│ Backend │────▶│ PostgreSQL ││ (Nginx:80) │ │ (Spring:8080) │ │ (:5432) │└──────────────┘ └──────────────────┘ └─────────────┘ │ ┌──────┴──────┐ │ External │ │ APIs │ ├─────────────┤ │ Numista │ │ Swissquote │ └─────────────┘The frontend Nginx server handles static file serving and proxies /api requests to the backend. All three services communicate over an internal Docker network (coffer-network).