Add bundled Docker deployment
This commit is contained in:
@@ -0,0 +1,17 @@
|
|||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
.idea
|
||||||
|
.vscode
|
||||||
|
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
!.env.example
|
||||||
|
|
||||||
|
frontend/node_modules
|
||||||
|
frontend/dist
|
||||||
|
frontend/.vite
|
||||||
|
|
||||||
|
backend/target
|
||||||
|
|
||||||
|
**/*.log
|
||||||
|
.DS_Store
|
||||||
@@ -30,6 +30,13 @@ lefthook install
|
|||||||
cp -n .env.example .env 2>/dev/null || true
|
cp -n .env.example .env 2>/dev/null || true
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
[tasks.maven-shell]
|
||||||
|
description = "Open an interactive shell with mise Maven/Java on PATH"
|
||||||
|
run = """
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
exec "${SHELL:-/bin/bash}" -i
|
||||||
|
"""
|
||||||
|
|
||||||
[tasks.backend]
|
[tasks.backend]
|
||||||
description = "Run the Spring Boot backend"
|
description = "Run the Spring Boot backend"
|
||||||
run = "backend/mvnw -f backend/pom.xml spring-boot:run"
|
run = "backend/mvnw -f backend/pom.xml spring-boot:run"
|
||||||
|
|||||||
+30
@@ -0,0 +1,30 @@
|
|||||||
|
# syntax=docker/dockerfile:1.7
|
||||||
|
|
||||||
|
FROM node:22-alpine AS frontend-build
|
||||||
|
WORKDIR /app/frontend
|
||||||
|
|
||||||
|
COPY frontend/package.json frontend/package-lock.json ./
|
||||||
|
RUN npm ci
|
||||||
|
|
||||||
|
COPY frontend/ ./
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
|
||||||
|
FROM maven:3.9.9-eclipse-temurin-21 AS backend-build
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY backend/pom.xml backend/
|
||||||
|
RUN --mount=type=cache,target=/root/.m2 mvn -f backend/pom.xml -q -DskipTests dependency:go-offline
|
||||||
|
|
||||||
|
COPY backend/ backend/
|
||||||
|
COPY --from=frontend-build /app/frontend/dist/ backend/src/main/resources/static/
|
||||||
|
RUN --mount=type=cache,target=/root/.m2 mvn -f backend/pom.xml -q -DskipTests package spring-boot:repackage
|
||||||
|
|
||||||
|
|
||||||
|
FROM eclipse-temurin:21-jre-alpine AS runtime
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY --from=backend-build /app/backend/target/app-0.0.1-SNAPSHOT.jar app.jar
|
||||||
|
|
||||||
|
EXPOSE 8080
|
||||||
|
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
|
||||||
@@ -46,6 +46,18 @@ mise run frontend
|
|||||||
If you have activated mise in your shell, the direct commands also work:
|
If you have activated mise in your shell, the direct commands also work:
|
||||||
`backend/mvnw -f backend/pom.xml spring-boot:run` and `cd frontend && npm run dev`.
|
`backend/mvnw -f backend/pom.xml spring-boot:run` and `cd frontend && npm run dev`.
|
||||||
|
|
||||||
|
## Docker (all-in-one app + database)
|
||||||
|
|
||||||
|
Build and run the bundled app container plus PostgreSQL:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose -f docker-compose.full.yml up --build
|
||||||
|
```
|
||||||
|
|
||||||
|
- App: http://localhost:8080
|
||||||
|
- API: http://localhost:8080/api
|
||||||
|
- Database: postgres://app:app@localhost:5432/app_dev
|
||||||
|
|
||||||
## Verify everything
|
## Verify everything
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.example.app.common;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
public class SpaForwardController {
|
||||||
|
@GetMapping({"/weekly", "/monthly", "/projects"})
|
||||||
|
public String forwardToIndex() {
|
||||||
|
return "forward:/index.html";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
services:
|
||||||
|
app:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
environment:
|
||||||
|
DATABASE_URL: jdbc:postgresql://db:5432/app_dev
|
||||||
|
DATABASE_USERNAME: app
|
||||||
|
DATABASE_PASSWORD: app
|
||||||
|
LOG_LEVEL: INFO
|
||||||
|
depends_on:
|
||||||
|
db:
|
||||||
|
condition: service_healthy
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: postgres:17-alpine
|
||||||
|
ports:
|
||||||
|
- "5432:5432"
|
||||||
|
environment:
|
||||||
|
POSTGRES_DB: app_dev
|
||||||
|
POSTGRES_USER: app
|
||||||
|
POSTGRES_PASSWORD: app
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -U app -d app_dev"]
|
||||||
|
interval: 5s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 10
|
||||||
|
volumes:
|
||||||
|
- postgres_data:/var/lib/postgresql/data
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
postgres_data:
|
||||||
Reference in New Issue
Block a user