{"product_id":"django-clinic-appointments-docker-stack","title":"Clinic Appointment System - Django + MySQL Docker Stack with Prometheus, Grafana \u0026 Loki","description":"\u003cp\u003eA complete, self-hosted clinic appointment stack: a \u003cstrong\u003eDjango 5.2\u003c\/strong\u003e admin app for patients, doctors, specialties and appointments on \u003cstrong\u003eMySQL 8.4\u003c\/strong\u003e, behind \u003cstrong\u003eNginx\u003c\/strong\u003e, monitored with \u003cstrong\u003ePrometheus + Grafana\u003c\/strong\u003e and with centralised logs in \u003cstrong\u003eLoki + Promtail\u003c\/strong\u003e. 11 Docker Compose services in three layers you can bring up one by one.\u003c\/p\u003e\u003ch3\u003eWhat you get\u003c\/h3\u003e\u003cul\u003e\n\u003cli\u003eDjango admin with CRUD for patients, doctors, specialties and appointments, with search and filters\u003c\/li\u003e\n\u003cli\u003eDouble-booking protection: a doctor or a patient cannot have two overlapping appointments, and cancelled appointments free the slot\u003c\/li\u003e\n\u003cli\u003e15 to 60 minute slots, doctors can be switched off from new bookings, and completed or no-show can only be set after the appointment starts\u003c\/li\u003e\n\u003cli\u003eBulk actions to mark appointments completed, no-show or cancelled, plus date, status and doctor filters\u003c\/li\u003e\n\u003cli\u003eOverview dashboard with the schedule per doctor for today, bookings for the next 7 days and outcomes of the last 30 days\u003c\/li\u003e\n\u003cli\u003e\n\u003ccode\u003e\/healthz\u003c\/code\u003e endpoint with a database check, and a restyled, fully English admin UI\u003c\/li\u003e\n\u003cli\u003eScripts that generate secrets (\u003ccode\u003e.env\u003c\/code\u003e with mode 600, never overwritten)\u003c\/li\u003e\n\u003cli\u003eHardened containers: non-root app, read-only root filesystem, dropped capabilities, internal-only database network, ports bound to localhost, Nginx security headers\u003c\/li\u003e\n\u003cli\u003ePre-provisioned Grafana datasources and an overview dashboard (containers, Nginx, MySQL)\u003c\/li\u003e\n\u003cli\u003eLog pipeline with an end-to-end check script\u003c\/li\u003e\n\u003cli\u003eDemo data command and automated tests\u003c\/li\u003e\n\u003c\/ul\u003e\u003ch3\u003eGood to know\u003c\/h3\u003e\u003cul\u003e\n\u003cli\u003eNeeds a Linux host with Docker Engine and Compose v2, and about 4 GB RAM (8 GB recommended).\u003c\/li\u003e\n\u003cli\u003eNo HTTPS out of the box. Add TLS before any public deployment.\u003c\/li\u003e\n\u003cli\u003eLanguage and time zone are set in \u003ccode\u003esettings.py\u003c\/code\u003e (English, UTC by default).\u003c\/li\u003e\n\u003c\/ul\u003e\u003cp\u003eDownload: one .zip with the source code only (Python, templates, CSS\/JS, Docker Compose, Dockerfile, Nginx, Prometheus, Grafana, Loki and Promtail configuration, scripts and tests). No documentation files are included.\u003c\/p\u003e","brand":"Snippet Crate","offers":[{"title":"Personal","offer_id":52041123823862,"sku":"SPF-DJCAS-PER","price":29.0,"currency_code":"USD","in_stock":true},{"title":"Commercial","offer_id":52041123856630,"sku":"SPF-DJCAS-COM","price":79.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0831\/7776\/7158\/files\/clinic-clinic-cover-square-2048x2048.png?v=1792987249","url":"https:\/\/snippetcrate.com\/products\/django-clinic-appointments-docker-stack","provider":"Snippet Crate","version":"1.0","type":"link"}