Skip to content

Quick Start

Deploy Strawly in approximately 5 minutes.

1. Clone the deployment repository

git clone https://git.strawly.app/Strawly/deployment.git
cd deployment

2. Install script dependencies

npm install

3. Configure your modules

Open strawly-deployment.yml and set which modules you want enabled:

modules:
  optimizations-azure:
    enabled: true   # set to false to skip this module

See Modules Overview for the full configuration reference.

4. Generate the Docker Compose file

npm run generate-compose

This reads strawly-deployment.yml and produces docker-compose.generated.yml.

5. Set up your environment file

cp .env.example .env

Open .env and fill in the values. The first admin account is created from ADMIN_EMAIL and ADMIN_PASSWORD on startup:

ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=your-strong-admin-password
POSTGRES_DB=strawly
POSTGRES_USER=strawly

Generate strong random values for the database password and signing keys:

./scripts/generate-secrets.sh

Paste the printed values into POSTGRES_PASSWORD, JWT_SECRET, and CREDENTIALS_ENCRYPTION_KEY in .env.

Keep .env out of version control

.env holds your database password and signing keys. Confirm it is listed in .gitignore (it is by default in the deployment repository) and set restrictive permissions:

chmod 600 .env

ADMIN_EMAIL and ADMIN_PASSWORD can be removed from .env once the admin account exists.

If you enabled the Azure module, see Azure Optimizations for credential setup instructions.

See Environment Variables for the full reference.

6. Pull images and deploy

docker compose -f docker-compose.generated.yml pull
docker compose -f docker-compose.generated.yml up -d

Services start in this order automatically:

  1. PostgreSQL
  2. Migrations (applies schema, runs once)
  3. Seeder (system roles and admin account, runs once)
  4. Backend
  5. Modules (parallel)
  6. Frontend

7. Seed the module registry

Populate the module registry from strawly-deployment.yml so the UI shows your enabled modules:

npm run seed-modules

Re-run this whenever you enable or disable a module.

8. Verify health

npm run health-check

Or check manually:

curl http://localhost:3001/health   # Backend
curl http://localhost:3000/         # Frontend
curl http://localhost:3002/health   # Azure module (if enabled)

9. Log in

Open http://localhost:3000 in your browser and log in with the email and password you set in ADMIN_EMAIL and ADMIN_PASSWORD.

10. Load demo data (optional)

To populate the app with sample opportunities, savings, commitments, and three demo accounts for evaluation, run:

docker compose -f docker-compose.generated.yml run --rm seeder npx tsx prisma/seed.demo.ts

The command is safe to re-run — it will not create duplicates. The demo accounts use publicly known passwords (admin123, practitioner123, viewer123). The seed script will refuse to run when NODE_ENV=production is set, but do not run this on any instance with real data.

Next steps