Template
feat: make "only the app publishes a port" a binding rule
A published database port puts the data on the public internet, and Docker's own iptables rules bypass ufw — the server looks firewalled while the port is open. Previously this was only a comment in compose.yaml, which an agent adding a db service later is free to ignore. Anchored at every point where a service could be added or shipped: - rules/security.md: the rule, the reasoning, and the audit commands - rules/backend.md + architecture SKILL: constraint when picking the data layer - agents/backend-dev.md: non-negotiable for any service it adds - agents/qa-engineer.md: a published port is a Critical finding - skills/deploy: blocking pre-flight audit - compose.yaml: db example now uses expose:, with depends_on healthcheck - docs/DEPLOYMENT.md + README: SSH tunnel instead of publishing for debugging
This commit is contained in:
@@ -36,6 +36,10 @@ The non-negotiables:
|
||||
as a fallback
|
||||
- Every new env var lands in `.env.example` in the same change
|
||||
- Whatever you add must run inside the Docker Compose stack
|
||||
- **Any service you add to `compose.yaml` gets no `ports:` entry.** Only `app`
|
||||
publishes a port. A database, cache or queue is reached by service name over the
|
||||
compose network (`db:5432`) and must stay unreachable from the host. Publishing it
|
||||
exposes the data to the internet and bypasses the server's firewall.
|
||||
|
||||
## Tests
|
||||
For each route handler, write a Vitest test next to it
|
||||
|
||||
Reference in New Issue
Block a user