Add a template-driven assessment system with universal intake, clinical pathways, disease instruments (stroke MVP + extended, diabetes, and ten specialty packs), scoring, patient outcome trends, REST/API + FHIR export, and Enterprise org-level assessment analytics. Seed packs and design/licensing docs ship for deploy and pre-GA review.
3.3 KiB
Ladill Care — deploy runbook
Healthcare management at care.ladill.com (patients, appointments, consultations, lab, pharmacy, billing).
1. Gitea repo + CI
- Repo: ladill-care (
isaacclad/ladill-care) — canonical source; not nested in theladillmonorepo. - Push to
maintriggers.gitea/workflows/deploy.yml(on-hostdeployrunner). - App root:
/var/www/ladill-care.
2. Server app-slot + database
sudo install -d -o deploy -g www-data /var/www/ladill-care
sudo install -d -o deploy -g www-data /var/www/ladill-care/{releases,shared}
sudo mysql -e "CREATE DATABASE ladill_care CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
sudo mysql -e "CREATE USER 'ladill_care'@'127.0.0.1' IDENTIFIED BY '<pw>';"
sudo mysql -e "GRANT ALL ON ladill_care.* TO 'ladill_care'@'127.0.0.1'; FLUSH PRIVILEGES;"
3. Platform wiring (monolith)
On the Ladill platform host:
cd /var/www/ladill.com/current
php artisan ladill:onboard-app care --run-dns
php artisan passport:client --name="Ladill Care" --redirect_uri=https://care.ladill.com/sso/callback
php artisan ladill:launcher:sync --propagate
Apply the generated IDENTITY_API_KEY_CARE, BILLING_API_KEY_CARE,
SERVICE_EVENTS_CARE_*, and SERVICE_EVENTS_INBOUND_SECRET values to the monolith .env, then:
php artisan config:cache
4. Shared .env (/var/www/ladill-care/shared/.env)
Copy .env.example, set production values:
| Variable | Notes |
|---|---|
APP_KEY |
php artisan key:generate --show |
APP_URL |
https://care.ladill.com |
DB_* |
MySQL ladill_care credentials |
LADILL_SSO_CLIENT_ID / LADILL_SSO_CLIENT_SECRET |
Passport client (plain text from passport:client) |
BILLING_API_KEY_CARE |
Same as monolith consumer key |
IDENTITY_API_KEY_CARE |
Same as monolith consumer key |
SERVICE_EVENTS_INBOUND_SECRET |
Same as monolith SERVICE_EVENTS_CARE_SECRET |
SSO secret: use the plain-text value printed once by passport:client — never copy
oauth_clients.secret from the database (Passport stores a bcrypt hash there).
5. nginx + TLS
sudo bash deployment/setup-service-subdomain-nginx.sh care --app /var/www/ladill-care/current
DNS: care.ladill.com → app server (via dns:sync-subdomains on the monolith).
6. First deploy
Push to main or run the Gitea deploy workflow manually. Then verify:
curl -sI https://care.ladill.com | head -1
curl -s -o /dev/null -w '%{http_code}\n' https://care.ladill.com/login
curl -s https://care.ladill.com/api/health
Clinical assessment content packs
After migrate (and on each release that adds packs under database/data/assessments/):
cd /var/www/ladill-care/current
php artisan db:seed --class=Database\\Seeders\\AssessmentTemplateSeeder --force
php artisan db:seed --class=Database\\Seeders\\ClinicalPathwaySeeder --force
# or full: php artisan db:seed --force
Packs are platform-global (no per-tenant copy). Enable the engine per organization via
settings.rollout.assessments_engine = true (see design doc / CareFeatures).
Pathway content lives under database/data/pathways/; assessment instruments under
database/data/assessments/.
7. Optional queue worker
sudo cp deployment/supervisor/ladill-care-worker.conf /etc/supervisor/conf.d/
sudo supervisorctl reread && sudo supervisorctl update