Solutions

Il existe 2 solutions "simples" pour servir des tiles :

« Vrai » OpenStreetMap Tile Server

En testant cette solution, très vite il semble impossible de pouvoir supporter la génération et le rendu de tile pour un gros dataset comme la France par exemple. Rien que pour la Bretagne, la création de la base de donnée a pris un temps fou (+ de 10h) mais surtout la génération de tiles est très gourmande. Une fois généré cela va beaucoup mieux, mais la solution m'a paru tout de suite beaucoup trop lourde pour pouvoir être envisagée.

OpenMapTiles

Assez vite dans les recherches je tombe sur ce site : https://openmaptiles.com/

En suivant leurs instructions :
docker run --rm -it -v $(pwd):/data -p 8080:80 klokantech/openmaptiles-server
On a alors un setup de server assez simple, et lors d'une étape il nous est demandé de télécharger un "tileset". Par exemple : https://openmaptiles.com/downloads/tileset/osm/europe/france/ Il faut un compte (gratuit) pour pouvoir soit télécharger un tileset récent en « oneshot » pour 210$ ou alors pour un projet perso ou open source, un tileset de 2017 est disponible avec un watermark présent sur les tiles. A la fin du setup, on a effectivement un serveur de tile qui tourne sans problème et qui à la capacité de servir soit des vectors tiles ou des rasters tiles.

Le fichier en question est un .mbtiles (spécifications)

MBTiles is a specification for storing arbitrary tiled map data in SQLite databases for immediate usage and for efficient transfer.
MBTiles is a compact, restrictive specification. It supports only tiled data, including vector or image tiles and interactivity grid tiles. Only the Spherical Mercator projection is supported for presentation (tile display), and only latitude-longitude coordinates are supported for metadata such as bounds and centers.

Je comprends alors que les tiles sont en faite prégénérées dans ce fichier et que le serveur ne fait que les "servir". Or le produit est opensource, il est donc possible de générer soit même ce fichier.

Génération de france.mbtiles

Pour ce qui concerne l'opensource ce site a un équivalent en .org sur lequel on peut trouver https://openmaptiles.org/docs/generate/generate-openmaptiles/

En ce rendant dans le repo je tombe alors sur : https://github.com/openmaptiles/openmaptiles/blob/master/QUICKSTART.md#req

Un premier test avec les données de monaco montre que tout semble marché. Je me lance donc dans la génération de la France avec un zoom de 0 à 14 (recommandé). Je change dans le .env QUICKSTART_MIN_ZOOM=0 et QUICKSTART_MAX_ZOOM=14

git clone https://github.com/openmaptiles/openmaptiles.git
cd openmaptiles
./quickstart.sh france

Le script est assez verbeux et on peut le voir créer la db (~40Go dans le volume docker) nécessaire afin d'ensuite créer le fichier. C'est la génération du fichier lui même qui est la plus longue.

The ./quickstart.sh france  is finished! 
It takes 49978 seconds to complete

Donc ca aura pris environ 14h pour générer le ficher (~3.5Go)

├── BENCHMARKING.md
├── build
│  ├── mapping.yaml
│  ├── openmaptiles.tm2source
│  └── tileset.sql
├── CONTRIBUTING.md
├── data
│  ├── docker-compose-config.yml
│  ├── france.osm.pbf
│  ├── geofabrik.yml
│  ├── osmstat.txt
│  ├── quickstart_checklist.chk
│  └── tiles.mbtiles
├── docker-compose.yml
├── layers
│  ├── aerodrome_label
│  ├── aeroway
│  ├── boundary
│  ├── building
│  ├── housenumber
│  ├── landcover
│  ├── landuse
│  ├── mountain_peak
│  ├── park
│  ├── place
│  ├── poi
│  ├── transportation
│  ├── transportation_name
│  ├── water
│  ├── water_name
│  └── waterway
├── LICENSE.md
├── Makefile
├── openmaptiles.yaml
├── pgdata
├── qa
│  ├── layer_freq.sh
│  ├── layer_numvar_analyze.sh
│  ├── layer_toplength.sh
│  ├── run.sh
│  └── table_sizes.py
├── QUICKSTART.md
├── quickstart.sh
├── README.md
├── UPDATE.md
└── wikidata

Voici la structure du dossier openmaptiles à la fin du script. Le fichier qui nous intéresse est data/tiles.mbtiles. Voici le lien vers celui que j'ai pu générer france.mbtiles
Ne pas oublier les copyrights pour l'exploitation de ce script et du fichier :
© OpenMapTiles  © OpenStreetMap

A la fin il est conseiller de lancer make start-tileserver et on peut effectivement alors avoir accès à notre map.

Servir france.mbtiles

Derrière cette commande make se cache docker run --rm -it -v "$(pwd):/data" -p 8080:80 klokantech/tileserver-gl

La documentation est accessible ici https://tileserver.readthedocs.io/en/latest/index.html

Cette image docker permet de servir les tiles au format vectoriel ou raster.

Il suffit donc de lancer ce service pour avoir une map complètement opérationnelle et exploitable par les différentes librairies raster (Leaflet, Openlayer) ou vectorielles (Mapbox GL JS). En production il est évidemment conseillé de le mettre derrière un cache (varnish etc..).