Opérations

Auto-hébergement d'AfriMap Engine

AfriMap est conçu pour être auto-hébergé. Un seul docker compose up lance l'ensemble du stack. Ce guide couvre l'installation, la configuration et la mise en production.

Prérequis

ComposantMinimumRecommandé (production)
CPU4 cores8+ cores (Valhalla est CPU-intensif)
RAM8 GB16+ GB (Valhalla charge le graphe en mémoire)
Disque40 GB SSD100+ GB SSD (PostGIS + Elasticsearch + tuiles)
Docker24.0+Dernière version stable
Docker Composev2.20+Dernière version stable

Installation rapide

TerminalÉtape 1 — Cloner et configurer
# Cloner le dépôt git clone https://github.com/rellinxe27/afri-map.git cd afri-map # Copier la config d'exemple cp .env.example .env # Éditer les variables essentielles nano .env
TerminalÉtape 2 — Télécharger les données
# OSM Côte d'Ivoire (~120 MB) ./data/scripts/download_osm.sh # Overture Maps pour la CI (POI, bâtiments) ./data/scripts/download_overture.sh # Construire les tuiles de routing Valhalla ./data/scripts/build_valhalla.sh
TerminalÉtape 3 — Lancer le stack
# Démarrer tous les services docker compose up -d # Vérifier la santé curl http://localhost:8090/v1/health # Avec monitoring (Prometheus + Grafana) docker compose --profile monitoring up -d

Services Docker

ServicePortImageRôle
gateway8090Build Go customAPI Gateway, auth, routing des requêtes
valhalla8002ghcr.io/valhalla/valhallaMoteur de routing C++
pelias-api4000pelias/apiGéocodeur (API)
martin3000ghcr.io/maplibre/martinServeur de tuiles vectorielles MVT
postgres5432postgis/postgis:16-3.4Base spatiale + TimescaleDB
redis6379redis:7-alpineCache, rate limit, positions temps réel
tts5500Build Python customEdge TTS (voix fr/en)
coqui5501Build Python customCoqui XTTS v2 (voix locales)

Variables d'environnement

Terminal.env
# ── Gateway ──────────────────────────────────── GATEWAY_PORT=8090 DATABASE_URL=postgres://afrimap:secret@postgres:5432/afrimap?sslmode=disable REDIS_URL=redis://redis:6379 VALHALLA_URL=http://valhalla:8002 PELIAS_URL=http://pelias-api:4000 MARTIN_URL=http://martin:3000 TTS_URL=http://tts:5500 COQUI_URL=http://coqui:5501 # ── Sécurité ────────────────────────────────── ADMIN_BOOTSTRAP_KEY=afm_admin_changeme PORTAL_SESSION_SECRET=changeme-in-production # ── PostgreSQL ──────────────────────────────── POSTGRES_USER=afrimap POSTGRES_PASSWORD=secret POSTGRES_DB=afrimap # ── Monitoring (optionnel) ──────────────────── GRAFANA_ADMIN_PASSWORD=changeme GF_SECURITY_ADMIN_USER=admin

Pipeline de données

Les scripts dans data/scripts/ gèrent le téléchargement, la transformation et l'import des données :

1. download_osm.sh

Télécharge l'extrait OSM Côte d'Ivoire depuis Geofabrik (~120 MB PBF). Exécutez-le une fois à l'installation, puis lors des mises à jour mensuelles de données.

2. download_overture.sh

Utilise DuckDB pour extraire les bâtiments, POI et adresses Overture pour la Côte d'Ivoire via un filtre bbox.

3. build_valhalla.sh

Construit les tuiles de routing Valhalla à partir du PBF OSM. Prend ~10-20 minutes pour la CI. Les tuiles sont montées dans le conteneur Valhalla.

4. import_pelias.sh

Importe les données dans Pelias (Elasticsearch). Inclut OSM, Overture et les données locales (quartiers, landmarks, marchés).

5. seed_local.sh

Charge les fichiers GeoJSON locaux (quartiers informels, landmarks, marchés) dans PostGIS. Ces données enrichissent les résultats de géocodage et de navigation.

Checklist mise en production

Changer tous les mots de passe par défaut dans .env
Configurer un reverse proxy (Caddy ou Nginx) avec TLS/HTTPS
Restreindre l'accès à /metrics (Prometheus scraping uniquement)
Configurer les backups PostgreSQL automatiques (voir Monitoring)
Activer le monitoring Prometheus + Grafana (--profile monitoring)
Configurer les alertes (error rate > 1%, p99 > 500ms)
Déployer la page de statut (static/status.html) sur un CDN séparé
Configurer le DNS : api.afrimap.ci, portal.afrimap.ci, status.afrimap.ci