T-4: add JPA, Liquibase, Testcontainers, and deployment docs
Set up development infrastructure for TDD: JPA + Liquibase for database migrations, Testcontainers for integration tests against real PostgreSQL, profile-based configuration (prod/local), and README deployment documentation with docker-compose example. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
67
README.md
67
README.md
@@ -47,6 +47,7 @@ A privacy-focused, self-hostable web app for event announcements and RSVPs. An a
|
||||
|
||||
- Java (latest LTS) + Maven wrapper (`./mvnw`, included)
|
||||
- Node.js (latest LTS) + npm
|
||||
- Docker (for running backend tests via Testcontainers)
|
||||
|
||||
### Project structure
|
||||
|
||||
@@ -68,6 +69,26 @@ cd backend && ./mvnw test
|
||||
cd frontend && npm run test:unit
|
||||
```
|
||||
|
||||
### Running the backend locally
|
||||
|
||||
**Option A: Without external PostgreSQL (Testcontainers)**
|
||||
|
||||
```bash
|
||||
cd backend && ./mvnw spring-boot:test-run
|
||||
```
|
||||
|
||||
Starts the app with a Testcontainers-managed PostgreSQL that is created and destroyed automatically. Requires Docker.
|
||||
|
||||
**Option B: With external PostgreSQL**
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
cp src/main/resources/application-local.properties.example \
|
||||
src/main/resources/application-local.properties
|
||||
# Edit application-local.properties if your PostgreSQL uses different credentials
|
||||
./mvnw spring-boot:run -Dspring-boot.run.profiles=local
|
||||
```
|
||||
|
||||
### Building
|
||||
|
||||
```bash
|
||||
@@ -129,6 +150,52 @@ ArchUnit enforces hexagonal boundaries: domain must not depend on adapters, appl
|
||||
|---------------------|------------------|-------------------|
|
||||
| Prettier | `npm run format` | Formatting issues |
|
||||
|
||||
## Deployment
|
||||
|
||||
### Docker Compose
|
||||
|
||||
The app ships as a single Docker image. It requires an external PostgreSQL database.
|
||||
|
||||
```yaml
|
||||
services:
|
||||
db:
|
||||
image: postgres:17-alpine
|
||||
environment:
|
||||
POSTGRES_DB: fete
|
||||
POSTGRES_USER: fete
|
||||
POSTGRES_PASSWORD: changeme
|
||||
volumes:
|
||||
- fete-db:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U fete"]
|
||||
interval: 5s
|
||||
timeout: 3s
|
||||
retries: 5
|
||||
|
||||
app:
|
||||
image: git.bahamut.nitrix.one/nitrix/fete:latest
|
||||
ports:
|
||||
- "8080:8080"
|
||||
environment:
|
||||
DATABASE_URL: jdbc:postgresql://db:5432/fete
|
||||
DATABASE_USERNAME: fete
|
||||
DATABASE_PASSWORD: changeme
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
|
||||
volumes:
|
||||
fete-db:
|
||||
```
|
||||
|
||||
### Environment variables
|
||||
|
||||
| Variable | Required | Default | Description |
|
||||
|---------------------|----------|---------|-----------------------------------|
|
||||
| `DATABASE_URL` | Yes | — | JDBC connection string |
|
||||
| `DATABASE_USERNAME` | Yes | — | Database username |
|
||||
| `DATABASE_PASSWORD` | Yes | — | Database password |
|
||||
|
||||
## License
|
||||
|
||||
GPL — see [LICENSE](LICENSE) for details.
|
||||
|
||||
Reference in New Issue
Block a user