Migration vers la 4.1 ou le nouveau système de livraison de Carto-SI (Linux)

Carto-SI a modifié son système de livraison pour suivre les méthodes standards de livraison Linux. Il utilise maintenant des packages Debian (.deb) et Red Hat (.rpm).

Ce document explique ce qui est installé par les packages ainsi que les étapes pour migrer vers le nouveau système tout en préservant vos données.

Vu d’ensemble

Afin de pouvoir écouter sur le port 80 et 443 tout en évitant de lancer Carto-SI avec le user root, il a été décidé de faire tourner Carto-SI derrière un nginx.

Le schéma ci-dessous illustre la relation entre nginx et Carto-SI. Par défaut, nginx écoute sur le port 80 et Carto-SI sur le port 9327. Le nginx est configuré comme reverse proxy et transmet toutes les requêtes qu’il reçoit à Carto-SI. Le package ne touche pas à la configuration d”iptables. Il est donc possible que le port 9327 soit accessible de l’extérieur de la VM.

L’option listen-localhost-only : true du fichier de configuration /opt/carto-si/data/conf/carto-si.properties permet de limiter l’écoute du port 9327 sur l’IP local. Ainsi, il n’est plus possible de se connecter sur ce port depuis l’extérieur de la VM.

Lien entre nginx et Carto-SI

Configuration de nginx

Carto-SI installe nginx avec les configurations par défaut de l’OS tout en apportant les modifications suivantes :

  • La page par défaut est retirée (/etc/nginx/sites-enabled/default).

  • Sur Debian, la configuration du reverse proxy de Carto-SI est copié sur /etc/nginx/sites-available/carto-si.

  • Sur Red Hat, la configuration du reverse proxy de Carto-SI écrase directement le fichier /etc/nginx/nginx.conf.

Vous êtes libre de configurer nginx pour activer le HTTPS.

Configuration de Carto-SI

Carto-SI est installé dans /opt/carto-si et les données se trouvent sur dans /opt/carto-si/data. C’est à cet endroit que vous devriez copier vos données.

Carto-SI tourne avec le user carto-si.

La configuration des logs a été internalisée dans les jars. Le fichier de configuration log4j.properties n’est plus utilisé.

L’option de démarrage étant configuré dans systemd, le fichier args.vm n’est plus utilisé.

Installation de Java

Carto-SI installe la JRE de l’OpenJDK 11.

Configuration des logs

La gestion des logs a été modifiée. Le fichier data/conf/log4j.properties n’est plus utilisé. Les logs sont forcément écrits dans le dossier data/log.

Le niveau de logs peut être défini dans le fichier data/conf/carto-si.properties.

De nouveaux fichiers de logs ont été rajoutés :

  • Les fichiers orientdb.log sont les logs de la base de données.

  • Il existe un fichier de logs par tenant pour y journaliser les logs le concernant. Pour la plupart d’entre vous, n’ont qu’un tenant nommé default.

Le fichier carto-si.log ne change pas et contient toujours une copie des logs des tenants.

Méthode de migration

Deux politiques peuvent être suivies :

  • On profite de la montée de version pour créer une nouvelle VM.

  • On migre la VM existante.

Nettoyage de la VM

Si vous souhaitez garder la VM, il faut réaliser ces travaux de préparation :

  • Arrêter Carto-SI et faire en sorte qu’il ne démarre plus automatiquement

  • Si Carto-SI est installé sur /opt/carto-si/, renommer le dossier.

  • Si vous avez un dossier /var/log/carto-si/, renommer le.

Installer Carto-SI

Télécharger et installer Carto-SI comme indiqué sur Installation on premise.

Arrêter Carto-SI

Utilisez la commande suivante :

systemctl stop carto-si.service

Copier vos données

À l’exception du dossier data/conf, copier l’ensemble des fichiers de votre ancien dossier data vers /opt/carto-si/data.

Changer le propriétaire des fichiers data avec la commande suivante :

chown -R carto-si /opt/carto-si/data

Reporter vos configurations manuellement dans le fichier /opt/carto-si/data/conf/carto-si.properties.

Les fichiers args.vm et log4j.properties ne sont plus utilisés.

Démarrer Carto-SI

Utilisez la commande suivante :

systemctl stop carto-si.service

migrer les certificats https

Pour configurer nginx avec le certificat utilisé par Carto-SI, commençons par définir certaines variables.

Commençons par générer les variables qui correspondent aux configurations contenues dans le fichier carto-si.properties.

keystore_file=[keystore-file du fichier de configuration]
keystore_type=[keystore-type du fichier de configuration]
keystore_password=[keystore-password du fichier de configuration]
keystore_version=[keystore-version du fichier de configuration]

Définissons le chemin de keytool.

Sous Debian, taper :

keytool=/usr/lib/jvm/java-11-openjdk-amd64/bin/keytool

Sous Red Hat, taper :

keytool=/usr/lib/jvm/java-11-openjdk-11.*/bin/keytool

Nous avons besoin de trouver le nom de l’alias contenant le certificat. Taper la commande suivante :

$keytool -v -list -keystore $keystore_file -storepass $keystore_password  | grep -i alias

Définissez la variable qui contient le nom de l’alias :

alias=[nom de l'alias qui se trouve après "Alias name: "]

Ensuite, on extrait les certificats du keystore avec les commandes suivantes. (Le mot de passe demandé est celui de votre keystore.) :

$keytool -importkeystore -srckeystore $keystore_file -srcstorepass $keystore_password -srckeypass $keystore_password -srcalias $alias -destalias $alias -destkeystore carto-si.p12 -deststoretype PKCS12 -deststorepass $keystore_password -destkeypass $keystore_password
	
openssl pkcs12 -in carto-si.p12 -nodes -nocerts -out carto-si.key

openssl pkcs12 -in carto-si.p12 -nokeys -out carto-si.crt

Ensuite, préparons nginx.

sudo mkdir /etc/nginx/ssl
sudo cp carto-si.crt carto-si.key /etc/nginx/ssl
sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

Sous Debian, remplacer le contenu du fichier /etc/nginx/sites-available/carto-si par (une copie du fichier est disponible sur /opt/carto-si/data/conf/carto-si.ssl.nginx) :

server {
  listen 80;

  # redirige vers le https
  location / {
    rewrite ^ https://$host$request_uri? permanent;
  }

}

server {
  listen 443 ssl;
  client_max_body_size 2M;
    
  ssl_certificate       /etc/nginx/ssl/carto-si.crt;
  ssl_certificate_key   /etc/nginx/ssl/carto-si.key;
  ssl_dhparam /etc/nginx/ssl/dhparam.pem;

  location / {
    root   /var/www/html/carto-si;
  }

  location /api {
    proxy_pass  http://127.0.0.1:9327;
  }
}

Sous Red Hat, remplacer le contenu du fichier /etc/nginx/nginx.conf par (une copie du fichier est disponible sur /opt/carto-si/data/conf/carto-si.ssl.nginx) :

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
  worker_connections 1024;
}

http {
  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

  access_log  /var/log/nginx/access.log  main;

  sendfile            on;
  tcp_nopush          on;
  tcp_nodelay         on;
  keepalive_timeout   65;
  types_hash_max_size 2048;

  include             /etc/nginx/mime.types;
  default_type        application/octet-stream;

  # Load modular configuration files from the /etc/nginx/conf.d directory.
  # See http://nginx.org/en/docs/ngx_core_module.html#include
  # for more information.
  include /etc/nginx/conf.d/*.conf;

  server {
    listen 80;

    # redirige vers le https
    location / {
      rewrite ^ https://$host$request_uri? permanent;
    }
  }

  server {
    listen       443 ssl default_server;

    ssl_certificate       /etc/nginx/ssl/carto-si.crt;
    ssl_certificate_key   /etc/nginx/ssl/carto-si.key;

    # vérifier que le fichier existe bien. Sinon, taper la commande suivante :
    # sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;

    server_name  _;
    root         /usr/share/nginx/html/carto-si;

    location / {
      root   /usr/share/nginx/html/carto-si/ ;
    }

    location /api {
      proxy_pass  http://127.0.0.1:9327;
    }
  }

}

Pour finir, rajouter la configuration suivante dans le fichier /opt/carto-si/data/conf/carto-si.properties :

listen-localhost-only : true