Skip to main content

260205-Installation base de données Paris dans Alteris

Allons peupler cette base de données. Nous allons créer une table pour stocker tes zones géographiques et y insérer notre fameux carré de test autour de Paris.

Connecte-toi à ton VPS et suis ces étapes :

Étape 1 : Connexion à la base de données

Nous allons nous connecter avec l'utilisateur que tu as créé (alteris_user).

  1. Lance cette commande :

    Bash
    psql -U alteris_user -d alteris_db -h localhost
    
  2. Saisis le mot de passe que tu as défini pour cet utilisateur. (Le curseur ne bougera pas quand tu tapes, c'est normal sous Linux, valide avec Entrée).

Tu devrais voir l'invite de commande changer pour : alteris_db=>

Étape 2 : Création de la table et insertion des données

Une fois connecté, copie et colle tout ce bloc de code d'un seul coup. Il va créer la table et ajouter la zone.

SQL
-- 1. On crée la table 'zones_interet'
CREATE TABLE zones_interet (
    id SERIAL PRIMARY KEY,
    nom VARCHAR(100),
    geom GEOMETRY(Polygon, 4326)
);

-- 2. On insère le carré autour de Paris
INSERT INTO zones_interet (nom, geom)
VALUES (
    'Zone Paris Test',
    ST_GeomFromText('POLYGON((2.25 48.80, 2.45 48.80, 2.45 48.90, 2.25 48.90, 2.25 48.80))', 4326)
);

Étape 3 : Vérification

Pour être sûr que la donnée est bien enregistrée, tape cette commande :

SQL
SELECT nom, ST_AsText(geom) FROM zones_interet;

Si tu vois une ligne avec "Zone Paris Test" et une suite de coordonnées, c'est gagné !

Tu peux ensuite quitter l'interface SQL en tapant :

SQL
\q


Résumé de l'état actuel :

  • [x] Base PostGIS prête.

  • [x] Données de test insérées (si tu as fait l'étape ci-dessus).

  • [x] Node.js installé (lors de l'étape précédente).

Si tu as bien réussi l'insertion, nous pouvons passer à la création des fichiers du serveur (Code). Tu me confirmes ?

C'est parfait ! Tu as maintenant :

  1. ✅ Le serveur web (Nginx).

  2. ✅ Le moteur Node.js.

  3. ✅ La base de données spatiale avec ta zone de test.

Nous sommes dans la dernière ligne droite : le codage de l'application.

Tu es déjà dans le bon dossier (/var/www/alteris-geomatic). Nous allons créer deux fichiers.

Étape 1 : Le fichier de connexion (db.js)

Ce fichier permet à Node.js d'ouvrir la porte de ta base de données.

  1. Crée le fichier :

    Bash
    nano db.js
    
  2. Copie-colle le code suivant. ⚠️ IMPORTANT : Remplace 'METTRE_TON_MOT_DE_PASSE_ICI' par le vrai mot de passe que tu as défini pour alteris_user.

    JavaScript
    const { Pool } = require('pg');
    
    const pool = new Pool({
      user: 'alteris_user',
      host: 'localhost',
      database: 'alteris_db',
      password: 'METTRE_TON_MOT_DE_PASSE_ICI', 
      port: 5432,
    });
    
    module.exports = pool;
    
  3. Sauvegarde et quitte : Ctrl + O, Entrée, Ctrl + X.


Étape 2 : Le fichier Serveur (server.js)

C'est le cerveau. Il reçoit le point GPS, demande à PostGIS s'il est dans la zone, et renvoie la réponse.

  1. Crée le fichier :

    Bash
    nano server.js
    
  2. Copie-colle ce code complet :

    JavaScript
    const express = require('express');
    const bodyParser = require('body-parser');
    const pool = require('./db'); // On importe ta connexion db.js
    
    const app = express();
    const PORT = 3000;
    
    app.use(bodyParser.json());
    
    // Route de vérification simple
    app.get('/', (req, res) => {
        res.send('Serveur Alteris Géomatique opérationnel 🟢');
    });
    
    // --- LE CŒUR DU SYSTÈME ---
    app.post('/api/check-zone', async (req, res) => {
      try {
        const geoJsonInput = req.body;
        console.log("📍 Requête reçue :", JSON.stringify(geoJsonInput));
    
        // Vérification de sécurité
        if (!geoJsonInput || !geoJsonInput.coordinates) {
          return res.status(400).json({ 
              error: "Format invalide.", 
              exemple: {type: 'Point', coordinates: [2.35, 48.85]} 
          });
        }
    
        // Requête SQL vers PostGIS
        // ST_Contains renvoie TRUE si la geometry contient le point
        const query = `
          SELECT nom 
          FROM zones_interet 
          WHERE ST_Contains(
            geom, 
            ST_SetSRID(ST_GeomFromGeoJSON($1), 4326)
          );
        `;
    
        const result = await pool.query(query, [JSON.stringify(geoJsonInput)]);
    
        // Réponse au client
        if (result.rows.length > 0) {
          res.json({
            status: "success",
            message: `Le point est DANS la zone : ${result.rows[0].nom}`,
            in_zone: true,
            zone: result.rows[0]
          });
        } else {
          res.json({
            status: "success",
            message: "Le point est HORS de toute zone connue.",
            in_zone: false
          });
        }
    
      } catch (err) {
        console.error("Erreur serveur :", err);
        res.status(500).json({ error: "Erreur interne du serveur" });
      }
    });
    
    // Démarrage
    app.listen(PORT, () => {
      console.log(`🚀 Application lancée sur le port ${PORT}`);
    });
    
  3. Sauvegarde et quitte : Ctrl + O, Entrée, Ctrl + X.


Étape 3 : Allumage des moteurs (PM2)

On lance l'application en tâche de fond.

Bash
# Lancer le serveur
pm2 start server.js --name alteris-api

# Sauvegarder pour qu'il redémarre si le VPS reboote
pm2 save
pm2 startup


Étape 4 : Le test final

C'est le moment de vérité ! Testons depuis ton VPS (ou ton PC) si tout fonctionne via ton nom de domaine.

Test positif (Dans Paris) :

Bash
curl -X POST https://alteris.juxjux.ovh/api/check-zone \
-H "Content-Type: application/json" \
-d '{"type": "Point", "coordinates": [2.35, 48.85]}'

Si tu reçois : "message": "Le point est DANS la zone : Zone Paris Test", c'est gagné ! Dis-moi le résultat !

Partenaire de code


C'est limpide ! Merci pour cette liste. Tu as une sacrée installation Docker (Immich, Jellyfin, Komga... c'est du propre !).

On voit clairement le coupable à la ligne 16 : grafana 0.0.0.0:3000->3000/tcp

Il monopolise le port 3000. Par contre, le port 3001 est libre (personne ne l'utilise dans ta liste).

Nous allons donc déménager l'application Alteris sur le port 3001. Voici les 3 étapes précises pour régler le conflit.

Étape 1 : Modifier le port dans Node.js

  1. Ouvre ton fichier serveur :

    Bash

    nano /var/www/alteris-geomatic/server.js
    
  2. Tout en haut du fichier, change la ligne const PORT = 3000; par :

    JavaScript

    const PORT = 3001;
    
  3. Sauvegarde (Ctrl+OEntrée) et quitte (Ctrl+X).

Étape 2 : Appliquer le changement (PM2)

Pour que Node.js prenne en compte la modification, il faut redémarrer le processus.

Bash

pm2 restart alteris-api

Étape 3 : Mettre à jour le portier (Nginx)

Il faut dire à Nginx d'envoyer les visiteurs vers le 3001 au lieu du 3000 (qui est Grafana).

  1. Ouvre la config du site :

    Bash

    sudo nano /etc/nginx/sites-available/alteris-geomatic
    
  2. Cherche la ligne proxy_pass et modifie-la ainsi :

    Nginx

    proxy_pass http://localhost:3001;
    
  3. Sauvegarde et quitte (Ctrl+OEntréeCtrl+X).

  4. Recharge Nginx :

    Bash

    sudo systemctl reload nginx
    

Le Test Final (Libéré de Grafana)

Maintenant, Grafana restera sur le port 3000, et ton application géomatique vivra sa vie sur le port 3001, accessible via ton nom de domaine.

Relance la commande de test :

Bash

curl -X POST https://alteris.juxjux.ovh/api/check-zone \
-H "Content-Type: application/json" \
-d '{"type": "Point", "coordinates": [2.35, 48.85]}'

 

Bravo ! 🍾 C'est une réussite totale.

Regarde ta réponse : {"in_zone":true,"message":"Le point est DANS la zone..."}.

Cela confirme que toute la chaîne fonctionne :

  1. Nginx a bien reçu la requête sécurisée (HTTPS).

  2. Il l'a passée à Node.js sur le port 3001.

  3. Node.js a interrogé PostGIS.

  4. PostGIS a fait le calcul géométrique ("Ce point est-il dans le carré ?").

  5. Le résultat est remonté jusqu'à toi.

Ton backend géomatique est opérationnel.