Security, Infrastructure & OperationsInfrastructureHeroku (Shared Model)
Heroku Architecture
Dynos, deployment environments, GitHub→Heroku pipeline, Postgres and Redis add-ons
Shared Model (SaaS)
Heroku is the hosting platform for the Shared Model. The Enterprise Model runs on dedicated AWS infrastructure — see Deployment Models.
Deployment Environments
The SSM.ro platform operates three distinct environments:
| Environment | URL | Access | Data |
|---|---|---|---|
| Production | https://www.appssm.ro | Public — HTTPS (TLS 1.2+) | Real production data |
| Staging | Internal — not publicly exposed | Restricted — HTTP Basic Auth at the edge; credentials issued only to authorized staff | Test data only — never production/customer data |
| Development | Local (developer workstation) | Developer's local network only — not exposed to the internet | Local test data |
Staging never contains production or customer data.
Heroku Components
Web Dynos
- Host the web application
- Autoscaling configured
- Authentication: username + password; optional TOTP 2FA (code from an authenticator app or sent by email); per-organization OIDC SSO (optional or exclusive)
- Session timeout: 30 minutes of inactivity; with the “remember me” option the session does not expire through inactivity for 2 weeks
Worker Dynos (Asynchronous Jobs)
- Asynchronous job processing
- Responsibilities: document signing orchestration, notification sending, daily archive export, scheduled tasks
- Job queue based on Heroku Redis
Heroku Postgres (Managed)
- Main relational database, on the Heroku Postgres Standard plan
- TLS in transit, encryption at rest
- Continuous Point-in-Time Recovery (PITR) (WAL) + daily snapshots with 30-day retention
- Hosts the customer activity log table (3-month retention, downloadable by tenant)
- Continuous Protection enabled — allows rollback to a specific point in time
Heroku Redis (Managed)
- Application cache + asynchronous job queue
- TLS in transit
- Private within the Heroku network (not accessible from outside)
Build & Release Pipeline
Developer → Pull Request on GitHub
│ mandatory review (branch protection on main)
▼
Merge into main branch
│ webhook automatically triggered
▼
Heroku Build
buildpack runs → produces release artifact (slug)
│
▼
Heroku Release
rolling restart of web dynos + worker dynos
│
▼
Versioned release with audit log in Heroku Releases
│ one-click rollback availableCritical patches follow the same flow on an expedited schedule.
Postgres Backups — Retention Limits
The platform uses the Heroku Postgres Standard plan, which retains up to 25 manual backups.
In addition to manual backups, PITR (Continuous Protection) is active: every change is backed up continuously, allowing restoration to any point within the last few days.
Cross-Cutting Heroku Controls
- All inbound traffic: HTTPS/TLS 1.2+ via Heroku Router with Let's Encrypt wildcard certificates (managed by the technical support team)
- Internal traffic (App ↔ Postgres/Redis): private Heroku network, TLS in transit
- Secrets: stored exclusively in Heroku config vars — never in source code
- Versioned releases with audit log and rollback available