ECHO ships as a Docker Compose project with three core services: a MariaDB database, a Spring Boot backend, and a React frontend. A fourth optional service (Documentation Index
Fetch the complete documentation index at: https://mintlify.com/HelenaLM32/ECHO/llms.txt
Use this file to discover all available pages before exploring further.
admin-init) bootstraps the initial administrator account and only runs when you explicitly invoke it.
Configure environment variables
Copy the example environment file and fill in the required values:Open
.env in your editor and set the following variables. Required values are marked in the table below.| Variable | Description | Required |
|---|---|---|
MYSQL_ROOT_PASSWORD | Root password for the MariaDB instance | Yes |
MYSQL_DATABASE | Name of the database created on startup | Yes |
MYSQL_USER | Application database user | Yes |
MYSQL_PASSWORD | Password for the application database user | Yes |
BACKEND_PORT | Host port the backend binds to (default: 8084) | Yes |
ECHO_JWT_SECRET | Secret used to sign JWT tokens — must be 32+ characters | Yes |
CORS_ALLOWED_ORIGIN | Frontend origin the backend allows CORS from | Yes |
APP_UPLOAD_DIR | Path inside the container where uploads are stored | Yes |
FRONTEND_PORT | Host port the frontend binds to (default: 8083) | Yes |
VITE_API_URL | API prefix used by the frontend (default: /api) | Yes |
TRAEFIK_HOST | Host IP or domain for reverse proxy routing | No |
APP_ADMIN_EMAIL | Email for the bootstrap admin account | No |
APP_ADMIN_USERNAME | Username for the bootstrap admin account | No |
APP_ADMIN_PASSWORD | Plain-text password for the admin (used by admin-init) | No |
APP_ADMIN_PASSWORD_HASH | Bcrypt hash of the admin password | No |
GOOGLE_CLIENT_ID | Google OAuth2 client ID | No |
GOOGLE_CLIENT_SECRET | Google OAuth2 client secret | No |
Uploaded files (images, attachments) are stored at
./uploads on the host, mounted into the backend container at APP_UPLOAD_DIR. This directory persists between container restarts. Back it up separately if you need to preserve user-uploaded content.Build and start the services
MYSQL_* variables from your .env file.Verify all containers are running:db, backend, and frontend all in the running state.Bootstrap the admin account (optional)
The
admin-init service creates the first administrator account. It runs once and exits — it does not stay running.Before running it, set the following variables in your .env:APP_ADMIN_EMAIL— the admin’s email addressAPP_ADMIN_USERNAME— the admin’s usernameAPP_ADMIN_PASSWORD_HASH— a bcrypt hash of the desired password
Stopping and removing containers
Stop all running services:Service overview
The Docker Compose project defines the following services:| Service | Image | Description |
|---|---|---|
db | MariaDB | Relational database. Data persisted in a named volume. |
backend | Spring Boot (Java) | REST API server. Mapped from internal port 8082 to host BACKEND_PORT. |
frontend | React (Vite, Nginx) | Web UI. Mapped from internal port 80 to host FRONTEND_PORT. |
admin-init | Spring Boot task | One-shot service that creates the admin account. Only runs with --profile tools. |