Skip to content

Installation

Coffer is deployed as three Docker containers: a PostgreSQL database, a Spring Boot backend, and an Nginx-served Angular frontend.

  • Docker and Docker Compose installed
  • Git
  • At least 1 GB of available RAM (512 MB allocated to the JVM by default)

You need all three repositories in the same parent directory:

Terminal window
mkdir coffer && cd coffer
git clone https://github.com/verbindolai/coffer2.git
git clone https://github.com/verbindolai/coffer2-ui.git
git clone https://github.com/verbindolai/coffer-deploy.git
Terminal window
cd coffer-deploy
cp .env.example .env

Edit .env and set at minimum:

Terminal window
# Required — pick a strong password
DB_PASSWORD=your_secure_database_password
# Recommended — enables Numista catalog integration
NUMISTA_API_KEY=your_numista_api_key

See Configuration for all available options.

Terminal window
docker compose up -d --build

This builds both the backend and frontend from source, starts PostgreSQL, runs Liquibase migrations automatically, and starts the application.

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.

Pull the latest changes and rebuild:

Terminal window
cd coffer-deploy
git -C ../coffer2 pull
git -C ../coffer2-ui pull
docker compose up -d --build

Database migrations are applied automatically on startup via Liquibase.

Terminal window
docker compose down

Your data is preserved in Docker volumes (coffer-db-data and coffer-images). To remove all data:

Terminal window
docker compose down -v
┌──────────────┐ ┌──────────────────┐ ┌─────────────┐
│ 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).