This project can be run with Docker or Podman. This guide assumes Podman. If you use Docker, replace podman with docker in the commands below.
The following runtime environment is recommended:
| Environment | Notes |
|---|---|
| Docker / Podman | Container runtime |
| Docker Compose | Compose engine |
| JDK 25 (optional) | Required only if developing the backend |
Before you start, complete the following steps.
-
Copy the
.env.templatein the root directory and rename it to.env;cp .env.template .env
-
Update
.envto match your local environment.
During development, you usually only need to start the dependent services, such as the database.
The backend uses Spring Boot’s Docker Compose support. When you start the backend from your IDE, it will start the required containers and load database settings from .env.
Important
Spring Boot Docker Compose is designed for Docker.
To use it with Podman, you may need to install docker-compose, map the socket file, and install podman-docker to emulate the Docker CLI.
For more information, see Troubleshooting.
If Podman does not work for you, or if you prefer to start the services manually, follow these steps:
-
Open
/backend/src/main/resources/application.yaml; -
Set
spring.docker.compose.enabledtofalse; -
Configure the
spring.datasourceproperties to point to your database; -
Run the following command from the project root to start the database.
podman compose upTo build the application JAR and run it in a container:
-
Change to the
/backendto build the JAR;./gradlew bootJar
-
Confirm that the generated JAR exists in
/backend/build/libs; -
Run the following command from the project root.
podman compose -f compose.yaml -f compose.override.yaml upThis command builds an image from /backend/Dockerfile, copies the JAR into the container, and starts the application.
Warning
The default Dockerfile uses a Docker Hardened Image (DHI) as the Java runtime, so authentication is required.
- If you have credentials, log in to
dhi.orgbefore running the command; - If that fails, modify the
FROMinstruction in/backend/Dockerfileto use a public JRE image.
Run the following command.
podman compose -f compose.yaml -f compose.prod.yaml upIn this case, Compose will download the published image from GitHub and deploy it automatically.
Spring Boot Docker Compose support expects a Docker-compatible CLI. When using Podman, the application may fail to start with an error similar to:
Cannot run program "docker"
This happens because Spring Boot invokes the docker command directly.
A possible solution is to install a Docker-compatible wrapper and enable the Podman socket.
Example (Fedora):
# Install a Docker-compatible CLI and a Compose engine
# Spring Boot Docker Compose invokes the `docker` command directly
sudo dnf install podman-docker docker-compose
# Enable the Podman API socket so Docker-compatible clients can connect
systemctl --user enable --now podman.socket
# Tell Docker-compatible tools to use the Podman socket
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/$UID/podman/podman.sockIf the backend is run from IntelliJ IDEA on Windows while the project is stored in WSL2, the following errors may appear:
JMX connector server communication errorPort already in use(random high port)
This is usually caused by IntelliJ IDEA’s remote JMX agent port rather than your application server port.
Recommended workaround for local development:
- Open the Spring Boot run configuration;
- Disable
Enable JMX agent; - Add VM option:
-Dspring.jmx.enabled=false; - Run the backend.
When troubleshooting, check both WSL2 and Windows, since the port may be in use on either side:
In WSL2:
ss -tunlp | grep <PORT>
ps -ef | grep javaIn Windows PowerShell:
Get-NetTCPConnection -LocalPort <PORT> | Select-Object ProcessId, State
tasklist /FI "PID eq <PID>"