Source ReviewPASS
Execution surface of the delivery reviewed item by item. Our own additions were read: docker-compose.yml (the published ports are bound to 127.0.0.1 only; it refuses to start when SECRET_KEY or either database password is missing; the database and Redis publish no ports; by default mail is only printed to the log and not sent), docker/backend/entrypoint.selfhost.sh (applies the database structure and starts gunicorn, and creates no default administrator with a fixed password), backend/crm/selfhost_settings.py (refuses to start when DEBUG is on, a development default key is in use, cross-origin access is open to all or the app connects as the postgres superuser), docker/postgres/init-app-role.sh (creates a non-superuser application role, because row-level security does not apply to a superuser), docker/nginx/default.conf (only forwards and adds the protocol header, and does not terminate HTTPS) and the three scripts under scripts/quickstart (openssl generates random values, .env is mode 600 and an existing one is not changed; the demo users get random passwords; the link script reads only the local log). The upstream Python and front-end sources were not read file by file; the basis is the MIT licence and container isolation.