# JWE v2 — Guide de déploiement auto-hébergé Cible : un petit VPS (1 vCPU / 1 Go RAM suffit) sous Debian/Ubuntu, derrière nginx ou Caddy. Aucun service propriétaire, aucune clé API payante. > **Exception documentée (mode street)** : le 5e mode « An lari a » utilise la visionneuse Mapillary (images CC BY-SA 4.0, lib MIT) et requiert un **token client Mapillary gratuit** — voir §2.1. Sans ce token, les 4 autres modes fonctionnent normalement ; seul le mode street affiche un message d'indisponibilité. ## 1. Application SvelteKit ```bash # Prérequis : Node.js >= 20 (via nodesource ou nvm) git clone https://codeberg.org/OKI/jwe.git cd jwe/app npm ci npm run build # produit app/build (adapter-node) ``` Lancer en production (port 3000 par défaut) : ```bash PORT=3000 node build ``` Service systemd `/etc/systemd/system/jwe.service` : ```ini [Unit] Description=JWE — jeu de géolocalisation OKI After=network.target [Service] Type=simple User=jwe WorkingDirectory=/srv/jwe/app Environment=PORT=3000 Environment=ORIGIN=https://jwe.o-k-i.net Environment=PUBLIC_TILES_URL=https://tiles.o-k-i.net/styles/oki/style.json Environment=PUBLIC_MAPILLARY_TOKEN=MLY|xxxxxxxx|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ExecStart=/usr/bin/node build Restart=on-failure [Install] WantedBy=multi-user.target ``` ## 2.1 Token Mapillary (mode street « An lari a ») 1. Créez un compte sur [mapillary.com](https://www.mapillary.com) puis une application sur le [dashboard développeurs](https://www.mapillary.com/dashboard/developers) : récupérez le **client token** (format `MLY|…|…`). 2. Exposez-le via `PUBLIC_MAPILLARY_TOKEN` (service systemd ci-dessus, ou `app/.env` en développement — voir `app/.env.example`). C'est un **token client** : conçu pour être visible côté navigateur, rate-limité par application — ce n'est pas un secret. 3. Vérifiez périodiquement le corpus street (images parfois retirées par leurs auteurs) : ```bash cd app && node scripts/validate-street.mjs # lit le token depuis .env ``` ## 2. Reverse proxy (exemple nginx) ```nginx server { server_name jwe.o-k-i.net; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } # + TLS via certbot ``` ## 3. Tiles cartographiques auto-hébergées (tileserver-gl) Par défaut l'application utilise OpenFreeMap (libre, sans clé). Pour une souveraineté complète, hébergez vos propres tiles OSM des 4 régions. ### 3.1 Récupérer les extraits OpenStreetMap ```bash mkdir -p /srv/tiles && cd /srv/tiles # Guadeloupe, Martinique, Guyane : extraits Geofabrik wget https://download.geofabrik.de/north-america/guadeloupe-latest.osm.pbf wget https://download.geofabrik.de/north-america/martinique-latest.osm.pbf wget https://download.geofabrik.de/south-america/french-guiana-latest.osm.pbf # La Réunion wget https://download.geofabrik.de/africa/reunion-latest.osm.pbf ``` ### 3.2 Générer les .mbtiles Avec [openmaptiles](https://github.com/openmaptiles/openmaptiles) (Docker requis) : générez un `.mbtiles` par région puis fusionnez-les avec `tile-join` (paquet `tippecanoe`) : ```bash tile-join -o dom-tom.mbtiles guadeloupe.mbtiles martinique.mbtiles guyane.mbtiles reunion.mbtiles ``` (Alternative plus légère : extraire les 4 régions d'un `.mbtiles` Monde basse-résolution `tile-join --bbox=…` par région, puisque la carte de devinette n'a pas besoin d'un zoom très fin partout.) ### 3.3 Servir avec tileserver-gl ```bash docker run --rm -d --name tiles -v /srv/tiles:/data -p 8080:8080 \ maptiler/tileserver-gl dom-tom.mbtiles ``` Copiez le style OKI de l'application (`app/src/lib/map/style-oki.json`) dans `/srv/tiles/styles/oki/`, adaptez son URL de source vers votre `dom-tom.mbtiles`, puis : ```bash Environment=PUBLIC_TILES_URL=https://tiles.o-k-i.net/styles/oki/style.json ``` ### 3.4 Fontes et sprites tileserver-gl sert aussi les fontes (glyphs) et sprites référencés par le style. Les fontes open-source utilisées par le style OKI (ex. Noto Sans) se récupèrent via `openmaptiles/fonts` ou `klokantech/tileserver-gl-fonts`. ## 4. Cache Wikipedia Le endpoint `/api/wiki/[qid]` met en cache les extraits 24 h en mémoire. Aucune configuration requise ; pour un cache partagé entre instances, placez nginx en cache proxy devant `/api/wiki/` (respecte déjà `Cache-Control`). ## 5. Mise à jour ```bash cd jwe && git pull && cd app && npm ci && npm run build systemctl restart jwe ``` L'ajout de lieux (voir `docs/contribution.md`) ne demande qu'un rebuild + restart : le corpus est embarqué dans le build.