Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

EcoRadar

EcoRadar

Platformă open-source pentru agregarea, verificarea și vizualizarea datelor publice de mediu din România.

Licență AGPL-3.0 Acces public Fără cont

Next.js 16 TypeScript PostgreSQL cu PostGIS Docker Compose Stocare S3

Interfața aplicației EcoRadar

Despre proiect

EcoRadar aduce într-un singur loc informații de mediu relevante pentru România:

  • vreme, avertizări și radar meteorologic;
  • calitatea aerului măsurată și modelată;
  • incendii și anomalii termice detectate prin satelit;
  • inundații observate și prognoze hidrologice;
  • vegetație, atmosferă, umiditatea solului și zăpadă;
  • biodiversitate și specii alogene invazive;
  • puncte comunitare de reciclare;
  • date fizice și biogeochimice pentru Marea Neagră.

Platforma este publică și nu include autentificare, conturi, administrare, plăți, analytics, notificări comerciale sau colectare de date personale. Fiecare operator își poate rula propria instanță și își configurează baza de date, stocarea și accesul la sursele externe.

Funcționalități

  • hartă interactivă pentru județe și localități;
  • căutare geografică și selecție directă pe hartă;
  • rezumate pentru județe și localități;
  • indicatori grupați pe categorii de mediu;
  • comparații între mai multe zone și exporturi;
  • evenimente de mediu și context istoric;
  • API-uri publice pentru geografii, indicatori și surse;
  • importuri independente pentru fiecare furnizor de date;
  • păstrarea metadatelor, atribuirii, licenței și prospețimii sursei;
  • stocare S3 pentru artefacte originale, previzualizări și agregări istorice;
  • rulare locală completă prin Docker Compose.

Surse de date

Domeniu Surse integrate Acces
Vreme și radar ANM endpointuri publice
Calitatea aerului EEA și CAMS public / token ADS pentru CAMS
Incendii NASA FIRMS și EFFIS MAP_KEY pentru FIRMS
Inundații GFM și GloFAS public / token EWDS pentru GloFAS
Satelit, sol și zăpadă Copernicus Data Space client OAuth
Biodiversitate GBIF și EASIN endpointuri publice
Reciclare OpenStreetMap și Geofabrik endpointuri publice
Date marine Copernicus Marine cont Copernicus Marine
Geografii administrative Eurostat GISCO endpointuri publice

Licența AGPL acoperă codul aplicației, nu și datele descărcate. Fiecare sursă își păstrează licența, atribuirea și condițiile proprii. Detaliile sunt documentate în docs/DATA_SOURCES.md.

EcoRadar nu reprezintă oficial instituțiile și programele enumerate. Pentru decizii operaționale trebuie consultate sursele oficiale.

Arhitectură

  • Next.js 16 și React 18 pentru interfața publică și rutele API;
  • TypeScript pentru aplicație, importatoare și comenzile operaționale;
  • PostgreSQL 16 cu PostGIS pentru date relaționale și geospațiale;
  • MapLibre GL și MapTiler pentru vizualizarea cartografică;
  • stocare compatibilă S3 pentru fișiere și agregări;
  • MinIO ca implementare S3 inclusă pentru dezvoltare locală;
  • Python 3.11, GDAL și biblioteci științifice pentru date raster și multidimensionale;
  • Docker Compose pentru aplicație, bază de date, stocare și joburi;
  • Vitest și Playwright pentru verificări unitare și end-to-end.
Surse publice și API-uri externe
              │
              ▼
       Importuri / worker
          │         │
          ▼         ▼
PostgreSQL/PostGIS   Stocare S3
          │         │
          └────┬────┘
               ▼
       Next.js API + Web
               │
               ▼
        Hartă și pagini publice

Descrierea completă a componentelor și fluxurilor se găsește în docs/ARCHITECTURE.md.

Rulare locală cu Docker

Cerințe

  • Docker Desktop sau Docker Engine;
  • Docker Compose;
  • minimum 4 GB RAM disponibili pentru containere.

Instalare

git clone https://github.com/gd-moarph/EcoRadar.git
cd EcoRadar
cp .env.example .env
docker compose up --build -d

În PowerShell:

git clone https://github.com/gd-moarph/EcoRadar.git
Set-Location EcoRadar
Copy-Item .env.example .env
docker compose up --build -d

Serviciile locale vor fi disponibile la:

Serviciu Adresă
Aplicație http://localhost:3000
Verificare disponibilitate http://localhost:3000/api/sanatate/viu
MinIO Console http://localhost:9001
PostgreSQL localhost:5432

Starea containerelor:

docker compose ps -a
docker compose logs -f web

Containerele migrate și minio-init se opresc cu codul 0 după finalizarea operațiilor. Acesta este comportamentul normal.

Oprirea aplicației fără ștergerea datelor:

docker compose down

Configurare

Copiază .env.example în .env și completează doar integrările pe care dorești să le folosești. Fișierul .env este exclus din Git și nu trebuie publicat.

Variabilă Rol
NEXT_PUBLIC_SITE_URL URL-ul public al aplicației
NEXT_PUBLIC_SOURCE_URL repository-ul sau arhiva sursei versiunii publicate
DATABASE_URL conexiunea principală PostgreSQL/PostGIS
DIRECT_DATABASE_URL conexiunea directă folosită de migrații
STORAGE_ENDPOINT endpointul MinIO sau al serviciului S3 compatibil
STORAGE_REGION regiunea stocării
STORAGE_ACCESS_KEY_ID identificatorul de acces S3
STORAGE_SECRET_ACCESS_KEY cheia secretă S3
NEXT_PUBLIC_MAPTILER_API_KEY cheia publică pentru harta MapTiler
SOURCE_USER_AGENT identificarea aplicației în cererile către surse

Cheile pentru FIRMS, ADS, EWDS și Copernicus sunt necesare numai importurilor corespunzătoare. Ghidul GHID_UTILIZARE.md explică fiecare variabilă, de unde se obțin credențialele și cum se configurează MinIO sau AWS S3.

Verificarea configurației:

corepack pnpm env:verifica

Inițializarea datelor

Migrațiile creează automat schema bazei de date la pornirea stackului Docker. O instalare nouă trebuie să importe mai întâi geografiile administrative:

docker compose --profile jobs run --rm worker pnpm import:geografii

Importuri uzuale:

docker compose --profile jobs run --rm -e WORKER_JOB=anm worker
docker compose --profile jobs run --rm -e WORKER_JOB=eea worker
docker compose --profile jobs run --rm -e WORKER_JOB=biodiversity worker
docker compose --profile jobs run --rm -e WORKER_JOB=recycling worker

Valorile acceptate pentru WORKER_JOB sunt:

anm, anm-radar, eea, cams, fires, floods, land, satellite,
biodiversity, recycling, marine, history-daily, history-monthly, history-yearly

Lista completă a importurilor, accesul necesar și recomandările de programare sunt în GHID_UTILIZARE.md.

Dezvoltare locală

Pentru a rula aplicația pe sistemul local și numai infrastructura în Docker:

cp .env.example .env
corepack pnpm install
corepack pnpm local:start
corepack pnpm db:migrate
corepack pnpm dev

Comenzi principale:

Comandă Acțiune
pnpm dev pornește serverul Next.js în modul development
pnpm db:migrate aplică migrațiile SQL din db/migrations
pnpm storage:bootstrap creează bucketurile necesare
pnpm import:geografii importă județele și localitățile
pnpm worker rulează jobul ales prin WORKER_JOB
pnpm production:smoke verifică baza de date și stocarea
pnpm typecheck verifică toate pachetele TypeScript
pnpm test rulează testele Vitest
pnpm build construiește toate pachetele și aplicația web

Testele API care verifică setul complet de geografii și datele importate sunt omise implicit, deoarece o instalare nouă pornește fără aceste date. După efectuarea importurilor, ele pot fi activate setând temporar ECORADAR_RUN_IMPORTED_DATA_TESTS=true înainte de pnpm test.

Structura repository-ului

EcoRadar/
├── apps/
│   ├── web/                 # aplicația Next.js și API-urile publice
│   └── worker/              # utilitare Python pentru importuri
├── packages/
│   ├── config/              # configurare și validarea mediului
│   ├── db/                  # clientul PostgreSQL
│   ├── live/                # integrările cu sursele de date
│   ├── shared/              # tipuri și utilitare comune
│   └── storage/             # adaptorul pentru stocare S3
├── db/migrations/           # schema și migrațiile SQL
├── scripts/                 # importuri, agregări și operații
├── docs/                    # documentație tehnică
├── compose.yaml             # stackul local complet
├── Dockerfile               # imaginea aplicației web
└── Dockerfile.worker        # imaginea joburilor de import

API public

Exemple de rute disponibile:

  • GET /api/sanatate/viu
  • GET /api/sanatate/gata
  • GET /api/geografii/cautare
  • GET /api/geografii/harta
  • GET /api/v1/indicatori
  • GET /api/v1/evenimente
  • GET /api/v1/surse/stare
  • GET /api/v1/judete/{cod}/rezumat
  • GET /api/v1/localitati/{cod}/rezumat

Rutele sunt implementate în apps/web/src/app/api. Răspunsurile păstrează contextul sursei și al prospețimii atunci când aceste informații sunt disponibile.

Deployment

Aplicația poate fi găzduită pe orice platformă care oferă:

  • o imagine Docker pentru serviciul web;
  • PostgreSQL cu extensia PostGIS;
  • stocare compatibilă S3;
  • joburi programate sau cron pentru importuri;
  • variabile de mediu și gestionarea securizată a secretelor.

Exemplele pentru Docker Compose, Railway și AWS sunt în docs/DEPLOYMENT.md.

Pentru o instalare publică modificată, NEXT_PUBLIC_SOURCE_URL trebuie să indice către codul sursă corespunzător versiunii rulate.

Documentație

Document Conținut
GHID_UTILIZARE.md instalare, .env, chei API, importuri și diagnosticare
docs/ARCHITECTURE.md componente, pachete și fluxuri de date
docs/DATA_SOURCES.md surse, licențe și atribuiri
docs/DEPLOYMENT.md opțiuni de găzduire și producție
CONTRIBUTING.md reguli pentru contribuții
SECURITY.md raportarea vulnerabilităților
THIRD_PARTY_NOTICES.md notificări pentru componente terțe

Contribuții

Contribuțiile sunt binevenite prin pull request. Înainte de trimitere:

  1. creează o ramură separată;
  2. păstrează modificările concentrate pe o singură problemă;
  3. adaugă sau actualizează testele relevante;
  4. rulează typecheck-ul, testele și buildul de producție;
  5. descrie comportamentul modificat și modul de verificare.

Consultă CONTRIBUTING.md și CODE_OF_CONDUCT.md înainte de prima contribuție.

Securitate

Nu publica parole, tokenuri, chei API sau fișiere .env. Vulnerabilitățile trebuie raportate în mod privat conform SECURITY.md, nu într-un issue public.

Licență

Copyright © 2026 Gabriel Dumitru.

Codul este distribuit sub GNU Affero General Public License v3.0, exclusiv versiunea 3 (AGPL-3.0-only). Orice versiune modificată oferită utilizatorilor printr-o rețea trebuie să pună la dispoziție codul sursă corespunzător, conform condițiilor licenței.

Datele importate nu sunt relicențiate prin AGPL. Operatorul trebuie să respecte separat licența, atribuirea, termenii și limitele fiecărei surse.

Autor

Aplicația a fost dezvoltată de Gabriel Dumitru.

About

Platformă open-source pentru agregarea, verificarea și vizualizarea datelor publice de mediu din România.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages