O projeto possui:
Dockerfile;docker-compose.yml..env.example.
O Dockerfile usa build multi-stage:
- imagem Maven com Temurin 17 para compilar o projeto;
- imagem JRE Alpine para executar o jar final;
- usuario nao-root para execucao;
- exposicao da porta
8080; - profile padrao
dev.
O docker-compose.yml sobe dois servicos:
taskmanager-api
taskmanager-postgres
Mapeamento de portas:
taskmanager-api: 8081:8080
taskmanager-postgres: 5432:5432
Assim, a aplicacao fica acessivel em:
http://localhost:8081
O banco PostgreSQL fica acessivel localmente em:
host: localhost
port: 5432
database: trackio
user: trackio
password: trackio
Esses valores sao definidos por variaveis de ambiente e podem ser alterados no arquivo .env.
O PostgreSQL usa o volume nomeado:
taskmanager-postgres-data
Esse volume preserva os dados entre reinicios dos containers.
Criar o arquivo local de ambiente:
Copy-Item .env.example .envSubir os containers:
docker compose down
docker compose build
docker compose up -dValidar a configuracao efetiva:
docker compose configVer logs:
docker compose logs -fParar:
docker compose downParar e remover tambem os dados persistidos:
docker compose down -vUsado por padrao fora do Docker. Mantem H2 em memoria e H2 Console ativo.
.\mvnw.cmd spring-boot:runMantem H2 em memoria para execucao de testes automatizados.
.\mvnw.cmd testUsado pelo Docker Compose. Configura PostgreSQL via .env:
APP_PORT=8081
POSTGRES_HOST_PORT=5432
POSTGRES_DB=trackio
POSTGRES_USER=trackio
POSTGRES_PASSWORD=trackio
SPRING_PROFILES_ACTIVE=docker
SPRING_DATASOURCE_URL=jdbc:postgresql://taskmanager-postgres:5432/trackio
SPRING_DATASOURCE_USERNAME=trackio
SPRING_DATASOURCE_PASSWORD=trackio
Preparado para deploy com PostgreSQL externo. Deve receber variaveis de ambiente da plataforma:
SPRING_PROFILES_ACTIVE=prod
SPRING_DATASOURCE_URL=jdbc:postgresql://host:5432/database
SPRING_DATASOURCE_USERNAME=usuario
SPRING_DATASOURCE_PASSWORD=senha
SPRING_JPA_HIBERNATE_DDL_AUTO=update
- ainda nao possui migracoes de banco com Flyway ou Liquibase;
- credenciais do
.env.examplesao locais e didaticas; - profile
proddepende de variaveis da plataforma de deploy;
- adicionar Flyway ou Liquibase;
- validar build e execucao em CI.