
Updated
Define a working service
A running container does not prove that customers can use the application. I start with a short acceptance list: the public page loads, sign-in works, a form can be accepted and the required data is available. Checks should cover the path a visitor uses, not just an internal port.
This portfolio separates the web frontend, Rust API, database and file storage. A successful deployment must check their connection as well as whether each process started. The project source documents that separation; it is not evidence of uninterrupted uptime.
Understand what a restart can do
Docker restart policies respond to a container stopping. They do not correct broken code or repair damaged data. A failed health check does not by itself make ordinary Docker Compose restart a running container. Compose can wait for a dependency declared healthy during startup, which is different from ongoing recovery.
I therefore separate process restarts, application checks and notifications. Repeated restarts need investigation rather than an endless loop that hides the original error.
Keep a release path and a recovery path
Before release, record the code version, build the application and run the relevant checks. Keep the preceding deployable version available. Database changes require their own plan: an older application may not understand a new schema, so reverting an image alone can be insufficient.
| Situation | First question |
|---|---|
| Process stopped | Is a restart appropriate and are logs preserved? |
| Page works, form fails | Can the API and database complete the request? |
| Bad release | Is the previous code compatible with current data? |
| Missing data | Which tested backup covers the affected records? |
Test restoration away from production
PostgreSQL provides logical dumps for database recovery. Files, configuration and access still need their own treatment. Restore into a separate environment, then verify representative records and workflows. Record how long that took and what was missing; do not present an untested time estimate as a promise.
Agree who receives alerts and what response is covered. This is the practical meaning of maintenance: planned checks and recovery work, with clear ownership.
Sources
Docker restart policies · Compose startup checks · PostgreSQL dumps