This PR contains the work done to introduce a _Fluent_-based persistence layer for the Website service, selectable at runtime alongside the existing in-memory default, plus the local dev tooling and docs to support it. To provide further details about the work: * Persistence package * The `Driver` and `TLS` enumerations * The `Configuration` type * The `Service` factory that builds the service * `PrepareDB` for migrations registration * The `Probe` for readiness checks. * App integration * Builds the driver, registers migrations, and attaches `Fluent` to the service lifecycle so it starts/stops with the HTTP server. * Migrate-on-boot is gated to the in-memory backend; MySQL/MariaDB is migrated out of band via --database-migrate so shared databases never race on startup. * The `ConfigReader+Properties` extension maps database.* config keys onto the driver. * Library * Added database configuration constants. * The `HealthController` controller gains a readiness probe: `GET /health/ready` checks whether the database is reachable, separate from the existing liveness check. * Others * Updated the `docker-compose` files to support a database service behind a database profile, and hardened for local development * New database targets on the `Makefile` file and overall documentation updated * Updated the `.env.local`, `Dockerfile`, and `README` files to document the persistence workflow, config keys, and local DB commands Reviewed-on: rock-n-code/loud-amsterdam#13 Co-authored-by: Javier Cicchelli <javier@rock-n-code.com> Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
68 lines
2.1 KiB
Bash
68 lines
2.1 KiB
Bash
# Copy this file to `.env` and adjust values as needed.
|
|
# cp .env.example .env
|
|
#
|
|
# Compose reads `.env` automatically to fill the ${VAR} placeholders in
|
|
# docker-compose.yml. The Website app ALSO reads a `.env` file at runtime via
|
|
# swift-configuration (allowMissing: true), so any extra app config keys placed
|
|
# here are picked up by the running service too.
|
|
|
|
# --- Image / deployment -------------------------------------------------------
|
|
|
|
# Host name of the container running the Website service.
|
|
HOST_CONTAINER=containers.rock-n-code.com
|
|
|
|
# Owner of the container running the Website service.
|
|
HOST_OWNER=loud
|
|
|
|
# Password for authenticating to the container registry.
|
|
HOST_PASSWORD=
|
|
|
|
# Host port mapped to the container's port 8080.
|
|
HOST_PORT=8080
|
|
|
|
# User name for authenticating to the container registry.
|
|
HOST_USER=
|
|
|
|
# Name of the Docker image to pull/run.
|
|
IMAGE_NAME=website
|
|
|
|
# Platform of the Docker image to pull/run.
|
|
IMAGE_PLATFORM=linux/arm64
|
|
|
|
# Tag of the image to pull/run.
|
|
# Use a semver in production; avoid `latest` so rollbacks are unambiguous.
|
|
IMAGE_TAG=latest
|
|
|
|
# --- Application config -------------------------------------------------------
|
|
|
|
# Server name reported by the HTTP service.
|
|
HTTP_SERVER_NAME=LoudWebsite
|
|
|
|
# Log verbosity: trace | debug | info | notice | warning | error | critical
|
|
LOG_LEVEL=info
|
|
|
|
# --- Persistence ----------------------------------------------------------------
|
|
|
|
# Persistence driver: inMemory (default, no infrastructure) or mysql.
|
|
DATABASE_DRIVER=inMemory
|
|
|
|
# MySQL/MariaDB connection, used when DATABASE_DRIVER=mysql.
|
|
# `mariadb` is the local database's Compose service name; use 127.0.0.1 when
|
|
# running the app directly with `swift run`.
|
|
DATABASE_HOST=localhost
|
|
|
|
# Port of the database to connect to.
|
|
DATABASE_PORT=3306
|
|
|
|
# Name of the database to connect to.
|
|
DATABASE_NAME=loud-ams
|
|
|
|
# Username of the database to connect as.
|
|
DATABASE_USERNAME=loud-ams
|
|
|
|
# Provide the real password via the environment or a secret — never commit it.
|
|
DATABASE_PASSWORD=loud-ams
|
|
|
|
# TLS posture when connecting: off | prefer | require (use `require` in production).
|
|
DATABASE_TLS=off
|