diff --git a/docker-compose.yml b/docker-compose.yml index 05e3df7..d4fd4f2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -35,12 +35,22 @@ services: # default and enabled from the Admin console; this is the only email # secret and it is never stored in the DB. Leave unset until configured. SMTP_PASSWORD: ${SMTP_PASSWORD:-} + # Optional — read-only SQL Server connection to the Micron asset catalog, + # which backs the asset picker in the work package creator. Leave unset and + # the picker cleanly falls back to manual entry (see server/assets_db.py). + # Use a db_datareader login: the app only ever SELECTs. + MICRON_DB_URL: ${MICRON_DB_URL:-} restart: unless-stopped depends_on: db: condition: service_healthy # waits for postgres to accept connections networks: - internal + # Reaching the Micron database means leaving this compose project, and + # `internal` is deliberately egress-free. `outbound` is attached to the api + # container ONLY — the database and backup containers stay sealed. Detach it + # again if you are not using the Micron asset picker. + - outbound db: image: postgres:16-alpine @@ -98,4 +108,12 @@ networks: name: proxy external: true internal: - internal: true # no outbound internet access from api/db \ No newline at end of file + internal: true # no route off the host for anything on this network alone + outbound: + # An ordinary bridge network, i.e. one that HAS a default gateway. `internal` + # above removes the gateway entirely, which blocks not just the internet but + # the LAN and the VPN too — so the api container needs this second network to + # reach the Micron asset database. Attached to `api` alone: `db` and `backup` + # remain on `internal` only and still have no way off the host. + # Detach it from api if you are not using the Micron asset picker. + driver: bridge \ No newline at end of file diff --git a/html/help.js b/html/help.js index dc0a901..8554462 100644 --- a/html/help.js +++ b/html/help.js @@ -141,7 +141,7 @@

Key fields