βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Browser / Client β
βββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β HTTP :80
βββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Nginx reverse proxy β
β /static/ β shared staticfiles volume β
β / β ambrosia_dashboard:8000 β
βββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Django / Gunicorn app (container :8000) β
β Dashboard + view modes Risk charts + chart pages β
β Climate data API Pathogen concentration API β
β Vocabulary / NUTS / models User auth + admin β
β Ambra chart assistant Health endpoint (/status) β
βββββββββ¬ββββββββββββββββ¬βββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ
β β β
β SQL/PostGIS β broker/result β HTTPS
β β β
βββββββββΌβββββββββ ββββββΌβββββββββββ βββββββΌββββββββββββββββββββββββββββββββββ
β PostgreSQL 16 β β Redis 7 β β External services β
β + PostGIS β β broker/result β β SCiO vocabulary / NUTS / models APIs β
β Climate data β ββββββ¬βββββββββββ β SCiO pathogen concentration API β
β Pathogen data β β β LLM chat completions endpoint β
β Vocabularies β β βββββββββββββββββββββββββββββββββββββββββ
β Users / admin β β
βββββββββ¬βββββββββ β Celery broker/result
β β
βββββββββΌβββββββββ ββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββ
β pgAdmin :5050 β β Celery worker + embedded beat β
β DB management β β Auto-resumes pending pathogen sync every 5 minutes β
ββββββββββββββββββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Docker (v20.10+)
- Docker Compose (v2.0+)
- Git
git clone https://github.com/ambrosia2024/dashboard.git
cd dashboardcp .env.sample .envEdit .env with your configuration:
# Django
DJANGO_SECRET_KEY=your-secure-secret-key-here
# Database (PostgreSQL + PostGIS)
POSTGRES_DB=ambrosia
POSTGRES_USER=amb_admin
POSTGRES_PASSWORD=your-secure-db-password
POSTGRES_HOST=ambrosia_postgres
POSTGRES_PORT=5432
# pgAdmin (optional)
PGADMIN_DEFAULT_EMAIL=admin@yourdomain.com
PGADMIN_DEFAULT_PASSWORD=your-secure-password
# Feature Flags
EMAIL_VERIFICATION_ENABLED=false
# External APIs (optional)
SCIO_VOCAB_API_BASE=
# Ambra (Scaleway Serverless API)
SCW_SECRET_KEY=your-scaleway-iam-api-key
β οΈ Security Note: Generate a strongDJANGO_SECRET_KEYusing:python -c "import secrets; print(secrets.token_urlsafe(50))"
docker compose up -dThis will:
- π³ Pull and build required Docker images
- ποΈ Initialize PostgreSQL with PostGIS extensions
- π§ Run Django migrations automatically
- π¦ Collect static files
- π Start Nginx reverse proxy
| Service | URL | Description |
|---|---|---|
| Dashboard | http://localhost/ | Main web application |
| Admin Panel | http://localhost/admin/ | Django admin interface |
| pgAdmin | http://localhost:5050/ | Database management (optional) |
| Health Check | http://localhost/status | Service health endpoint |
docker compose exec ambrosia_dashboard python manage.py createsuperuser| Variable | Required | Default | Description |
|---|---|---|---|
DJANGO_SECRET_KEY |
Yes | - | Django security key |
POSTGRES_DB |
Yes | ambrosia | Database name |
POSTGRES_USER |
Yes | amb_admin | Database user |
POSTGRES_PASSWORD |
Yes | - | Database password |
POSTGRES_HOST |
Yes | ambrosia_postgres | Database host |
POSTGRES_PORT |
No | 5432 | Database port |
EMAIL_VERIFICATION_ENABLED |
No | false | Enable email verification |
SCIO_VOCAB_API_BASE |
No | dev.api... | Vocabulary API endpoint |
SCW_SECRET_KEY |
For Ambra | - | Scaleway IAM API key |
SCW_AI_BASE_URL |
No | api.scaleway.ai/.../v1 | Scaleway Serverless API base URL |
SCW_AI_MODEL |
No | qwen3.5-397b-a17b | Model used by Ambra |
SCW_AI_REASONING_EFFORT |
No | none | none skips the model's hidden reasoning pass; raise to low/medium/high for deeper (slower) answers |
SCW_AI_MAX_TOKENS |
No | 1024 | Answer length cap |
ALLOWED_HOSTS |
No | localhost | Comma-separated allowed hosts |
The application supports customizable dashboard layouts:
- Access Django Admin: http://localhost/admin/
- Navigate to Lumenix β Dashboard view modes
- Create modes like "Farmer View", "Policy Advisor View", "Distributor View"
- Assign charts to each mode via Dashboard view charts
Use the helper script to create or synchronize the local virtual environment from requirements.txt:
# Recreate .venv from scratch
scripts/sync_env.sh recreate
# Or synchronize an existing .venv exactly to requirements.txt
scripts/sync_env.sh sync# Create virtual environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Setup local PostgreSQL with PostGIS
# Then configure DATABASES in config/settings.py
# Run migrations
python manage.py migrate
# Collect static files
python manage.py collectstatic
# Start development server
python manage.py runserverdocker compose exec ambrosia_dashboard python manage.py test# Create migration
docker compose exec ambrosia_dashboard python manage.py makemigrations
# Apply migration
docker compose exec ambrosia_dashboard python manage.py migrateTo sync plant and pathogen vocabularies from SCiO API:
docker compose exec ambrosia_dashboard python manage.py sync_vocabulary plants
docker compose exec ambrosia_dashboard python manage.py sync_vocabulary pathogensIssue: Database connection failed
# Check database health
docker compose ps
docker compose logs ambrosia_postgresIssue: Static files not loading
# Rebuild and collect static
docker compose down
docker compose up -d --buildIssue: Permission denied on volumes
# Fix volume permissions
docker compose down -v
docker volume prune # β οΈ Warning: Deletes all unused volumes
docker compose up -d# View all logs
docker compose logs -f
# View specific service
docker compose logs -f ambrosia_dashboard