Architecture Logicielle 2020

Découvrez notre offre de Cloud Public

L'hébergement mutualisé pour tou·te·s, imaginé par des développeur·euse·s, pour des développeur·euse·s.

Découvrir le Cloud Public

Cette migration consiste principalement en une mise à jour générale des logiciels disponibles sur nos serveurs. Elle implique un déplacement du compte sur de nouveaux serveurs - fonctionnant avec l’architecture 2020. Tous les serveurs (HTTP, SSH, bases de données, etc) sont susceptibles de changer.

Pourquoi imposer une migration ?

Les migrations d’architecture ont pour principal objectif de mettre à jour nos serveurs vers une version plus récente de leur système d’exploitation (Debian). Il est important de procéder à ces mises à jour pour deux raisons :

  • la sécurité. Les vieilles versions de logiciels ne sont pas supportées éternellement par leurs auteurs ou distributeurs. Lorsqu’un logiciel cesse d'être supporté, il continue à fonctionner, mais les nouvelles failles de sécurité ne sont alors plus corrigées. Continuer à utiliser ces vieilles versions ferait donc courir un risque grave pour la sécurité et la fiabilité de vos applications et données.

  • pouvoir utiliser des versions récentes des logiciels. Plus un système d’exploitation est ancien, plus il risque d’avoir des difficultés à faire tourner les logiciels récents. Pour continuer à vous offrir les toutes dernières versions des logiciels que nous proposons (ou que vous pouvez installer vous-même dans votre compte), il est important d'être sur une version relativement récente du système d’exploitation.

Ces migrations d’infrastructure sont effectuées approximativement tous les quatre ans. Cela correspond à la durée de vie d’une version de Debian (de cinq ans, mais il faut compter le temps incompressible de développement interne avant de basculer sur les nouvelles versions). Cela nous parait être un bon équilibre, évitant des migrations trop fréquentes, mais permettant de faire tourner la quasi-totalité des logiciels récents.


Ce document décrit les incompatibilités majeures introduites par cette migration. Nous nous efforçons d'être le plus complet possible, mais il est impossible d'être absolument exhaustif.

Apache

Apache 2.2 n’est plus disponible. Les comptes qui utilisaient cette version basculeront automatiquement vers Apache 2.4.

Les directives globales ajoutées par nos utilisateurs, soit dans Web > Configuration, soit dans la configuration d’un site de type Apache personnalisé, seront désormais insérées après les directives par défaut. Cela permet désormais à nos utilisateurs d'écraser ces directives par défaut.

Bases de données

MySQL

MariaDB est mis à jour en version 10.4.

PostgreSQL

PostgreSQL est mis à jour en version 12.

MongoDB

MongoDB est mis à jour en version 4.2.

CouchDB

CouchDB est mis à jour en version 3.0.

Langages

PHP

Versions disponibles sur v2020Versions disponibles sur v2017
4.4.94.4.9
5.2.175.2.17
5.3.295.3.29
5.4.455.4.45
5.5.385.5.38
5.6.405.6.38 5.6.37
7.0.337.0.31 7.0.32
7.1.337.1.21 7.1.23 7.1.24 7.1.26 7.1.32
7.2.29 7.2.317.2.9 7.2.11 7.2.12 7.2.14 7.2.22
7.3.16 7.3.187.3.0 7.3.1 7.3.9
7.4.4 7.4.67.4.0 7.4.3
  • Les versions mineures supprimées sont automatiquement remplacées par la version mineure la plus proche (7.4.4 par exemple pour 7.4).
  • Les extensions bcmath, calendar, exif, ftp, soap, xmlreader, xmlrpc et zip sont désormais automatiquement chargées. Vous pouvez supprimer les directives de chargement explicites de vos php.ini personnalisés si vous le souhaitez.

Python

Versions disponibles sur v2020Versions disponibles sur v2017
2.4.62.4.6
2.5.62.5.6
2.6.92.6.9
2.7.17 2.7.182.7.15 2.7.16 2.7.18
3.3.73.3.7
3.4.103.4.9 3.4.10
3.5.93.5.6 3.5.9
3.6.103.6.7 3.6.8 3.6.10
3.7.73.7.0 3.7.1 3.7.2 3.7.7
3.8.2 3.8.33.8.0 3.8.3
  • Les versions mineures supprimées sont automatiquement remplacées par la version mineure la plus proche (3.8.2 par exemple pour 3.8). Si vous aviez créé des virtualenvs avec ces versions, vous devrez les recréer.

Ruby

Versions disponibles sur v2020Versions disponibles sur v2017
1.8.7-p3741.8.7-p374
1.9.3-p5511.9.2-p3201 1.9.3-p551
2.0.0-p6482.0.0-p648
2.1.102.1.10
2.2.102.2.10
2.3.82.3.8
2.4.9 2.4.102.4.5
2.5.7 2.5.82.5.3 2.5.5
2.6.5 2.6.62.6.0 2.6.2
2.7.0 2.7.1-
  • Les versions mineures supprimées sont automatiquement remplacées par la version mineure la plus proche (2.6.5 par exemple pour 2.6).

Node.js

Versions disponibles sur v2020Versions disponibles sur v2017
6.17.16.14.4 6.16.0 6.17.0
8.17.08.11.4 8.12.0 8.15.0 8.15.0
9.11.29.11.1
10.19.0 10.20.110.9.0 10.12.0 10.13.0 10.15.1 10.15.3
11.15.011.0.0 11.1.0 11.8.0 11.12.0
12.16.1 12.16.312.0.0 12.14.0
13.11.0 13.14.0-
14.2.0-
  • Les versions mineures supprimées sont automatiquement remplacées par la version mineure la plus proche (12.16.1 par exemple pour 12).

Elixir

Versions disponibles sur v2020Versions disponibles sur v2017
1.10.2 1.10.3-
1.9.4-
1.8.2-
1.7.41.7.3 1.7.4
1.6.61.5.3 1.6.6
  • Les versions mineures supprimées sont automatiquement remplacées par la version mineure la plus proche.

Java

Java deviendra prochainement un langage majeur, administrable via l’interface d’administration.

  • Les versions désormais disponibles sont 8.0.41, 11.0.28 et 14.0.36. Les versions 7, 9 et 10 sont supprimées.

  • La version par défaut devient la 11. C’est cette version qui sera exécutée lorsque vous utilisez le binaire java.

  • Jusqu'à présent, pour utiliser une version de Java précise, vous pouviez aller chercher le binaire dans /usr/lib/jvm. Ce n’est plus possible : désormais, vous pouvez forcer une version différente en définissant la variable d’environnement JAVA_VERSION. Par exemple, pour lancer la version 8 : JAVA_VERSION=8 java.

Divers

  • TLS 1.0 et 1.1 sont maintenant désactivés par défaut sur le protocole HTTP, ces protocoles anciens présentant des failles de sécurité. Vous pouvez les réactiver en allant dans Web > Configuration > SSL, puis en choisissant la configuration Ancien.

  • Le répertoire des fichiers temporaires (TEMPDIR) devient ~/admin/tmp plutôt que /tmp. Les sessions PHP, par exemple, sont créées dans ce répertoire.

  • Pour les sites de type Node.js, Elixir et Programme utilisateur, l’IP interne (définie dans la variable d’environnement IP) sur laquelle votre application doit écouter changera et passera en IPv6. La nouvelle IP sera donnée dans le helptext de la commande du site web.

  • Les variables d’environnement ALWAYSDATA_HTTPD_PORT et ALWAYSDATA_HTTPD_IP ne sont plus disponibles, vous devrez utiliser PORT et IP.

  • La variable d’environnement PATH contiendra désormais toujours les chemins locaux des différents langages, par exemple ~/.local/bin, ~/npm-packages/bin, etc., y compris en connexion SSH non-login ou non-interactif, et dans vos applications HTTP.

  • L’utilisateur propriétaire de votre répertoire personnel $HOME (par exemple /home/foobar, si votre compte s’appelle foobar), auparavant identique à votre nom d’utilisateur (par exemple foobar), devient root. Le groupe propriétaire reste identique à votre nom d’utilisateur (ici, foobar), ce qui ne changera donc rien en pratique. Les permissions de votre répertoire personnel seront en conséquence réinitialisées à 0770.

  • Les binaires des langages sont désormais installés à la demande. Dans le cas où vous auriez besoin, par exemple, de /usr/alwaysdata/python/2.7.18/lib/libpython2.7.so, assurez-vous d’avoir lancé préalablement python en version 2.7.18 au moins une fois.

Mises à jour diverses

De très nombreux logiciels et bibliothèques seront mis à jour (nos serveurs passent sous Debian Buster, auparavant Debian Jessie). Parmi les mises à jour notables :

  • Erlang 21.2 (auparavant 19.2)
  • GDAL 2.4 (auparavant 1.10)
  • git 2.20 (auparavant 2.19)
  • Go 1.11 (auparavant 1.7)
  • MapServer 7.4 (auparavant 7.0)
  • Mercurial 4.8 (auparavant 3.9)
  • PROJ 5.2 (auparavant 4.8)
  • QGIS 2.18 (auparavant QGIS 2.4)

Environnement VPS/dédié

Les services suivants, lorsqu’ils sont installés, seront mis à jour :

  • RabbitMQ, en version 3.7.8
  • Redis, en version 5.0

Les montées de versions de MySQL (pas MariaDB) et ElasticSearch seront vues au cas par cas avec les utilisateurs.

Seules les versions des langages explicitement utilisées, soit dans la section Web > Sites, soit dans la section Environnement, seront désormais préinstallées sur le système. Par exemple, si ni la version par défaut de Python (définie dans Environnement > Python), ni aucun de vos sites (Web > Sites) n’utilise Python 2.4.6, alors cette version ne sera plus préinstallée. Elle sera toutefois automatiquement installée si vous créez un site avec cette version de Python, ou bien que vous changez la version de Python par défaut.

Préparation de la migration

Un certain nombre d’actions peuvent être effectuées sur l’architecture 2017 :

  • passer sur Apache 2.4 dans l’onglet Web > Configuration > Apache ;

  • changer de configuration TLS pour passer sur la configuration Intermédiaire dans l’onglet Web > Configuration > SSL ;

  • remplacer dans vos applications les variables d’environnement ALWAYSDATA_HTTPD_PORT et ALWAYSDATA_HTTPD_IP par PORT et IP ;

  • changer les versions des langages pour passer sur les dernières mineures. Cela se passe dans le menu Environnement et/ou au niveau de vos sites dans Web > Sites. Vous pouvez, par exemple, passer sur PHP 7.3.9 en remplacement de PHP 7.3.0.

Nous vous incitons vivement à faire ces changements en production, avant d’effectuer la migration.

Bases de données

En parallèle de la migration Buster, nous mettons à disposition les migrations bases de données. Vous pouvez les tester via le bouton Tester. L’ensemble de vos bases et utilisateurs de bases de données sont copiés sur un serveur temporaire, faisant tourner les nouvelles versions.

Les utilisateurs en serveurs mutualisés peuvent faire ces tests en parallèle de la migration Buster. La migration Buster fermera les autres migrations.

Pour les utilisateurs de serveurs VPS et dédiés, le test des migrations bases de données est lié à à la migration Buster. Le bouton Tester ne fera que la copie des bases de données sur le serveurs de test. Concernant le déployement HTTP référez-vous au paragraphe Préparation de la migration.

Déroulement de la migration

Lorsque vous cliquez sur le bouton Migrer le processus s’enclenche en général immédiatement, mais parfois quelques minutes plus tard en fonction du nombre d’utilisateurs qui migrent au même instant. La migration s’effectue en plusieurs étapes successives, service par service. Par exemple, vos fichiers seront migrés avant vos bases de données.

  • La migration de vos fichiers, effectuée en premier, entrainera l’indisponibilité de vos sites web (qui afficheront une erreur interne), de vos tâches planifiées de vos accès distants (SSH, FTP, etc.). La coupure est toutefois de courte durée (quelques secondes en général, davantage si vous avez des dizaines de milliers de fichiers), car vos fichiers sont pré-copiés au préalable.

  • Durant la migration des bases de données, la connexion aux bases de données est coupée. On compte en moyenne 1 minute d’indisponibilité par Go de données. Il peut être pertinent de mettre en place une page de maintenance statique sur vos sites web pour éviter que ne s’affiche une erreur générique de connexion aux bases de données.

Il est possible de savoir si la migration est terminée via le menu des Tâches (en haut à droite de votre interface d’administration).

Conseils & problèmes courants

  • Les comptes changent de serveurs lors de la migration. Il peut y avoir un temps de propagations DNS et il est nécessaire de mettre à jour son fichier known_hosts pour la connexion SSH. Vous pouvez le faire via la commande ([compte] à remplacer par le nom du compte) :
ssh-keygen -R ssh-[compte].alwaysdata.net