Héberger SQL Server sur une machine Linux

0000003190     -      12/09/2025

Pour Mercator, il n'y a aucune distinction quant au fait que SQL Server soit installé sur un serveur Windows ou Linux. Mercator étant le client de la base de données, au sens "client-server", il ne fait dès lors aucune distinction.

Voici quelques indications permettant de faciliter l'installation de serveur SQL sur une machine Linux. Etant donné la diversité des distributions de Linux, il est possible que les instructions données ci-dessous doivent être adaptées. Elles fonctionnent dans un environnement Ubuntu. Les commandes de configuration de pare-feu sont données pour UFW. (Il est présupposé que UFW soit déjà configuré et opérationnel)

1. Installation directe de SQL Server

Pour installer une version 2019 de SQL Server, il faut suivre les instructions données sur cette page. Il faut prendre garde au fait que l'installation décrite n'est pas compatible avec toutes les versions d'Ubuntu. D'après la documentation, l'installation n'est possible que sur la version 20.04.

Après installation, le cas échéant, il est nécessaire d'ouvrir les ports SQL de votre pare-feu pour un usage strictement local (en adaptant la règle à votre réseau local) :

sudo ufw allow from 192.168.1.0/24 to any port 1433 proto tcp
sudo ufw enable

Dès l'installation effectuée, il est possible de se connecter au serveur SQL depuis les outils clients installés sur un poste Windows.

Pour restaurer un backup, il suffit de l'uploader vers la machine Linux avec WinSCP (par exemple). Le backup peut ensuite être récupéré via les outils clients installés sur un poste Windows.

2. Installation via un Docker Container

Si votre version de Linux n'est pas supportée pour une installation directe, alors il est possible d'installer un container Docker contenant SQL Server. Pour cela, il faut d'abord installer Docker en suivant les instructions de cette page.

Ensuite, il faut mettre en place le container Docker contenant SQL Server en suivant les instructions de cette page.

Ci-dessous une ligne de commande complète pour installer une version SQL Express 2019 (sans répertoire partagé entre le container et l'hôte) :

sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" -e "MSSQL_PID=Express" \
   -p 192.168.1.1:1433:1433 --name sql1 --hostname sql1 \
   -d  --restart=always \
   mcr.microsoft.com/mssql/server:2019-latest

Notez ces points d'attention :

  • Il faut spécifier le paramètre MSSQL_PID, sinon une version développeur est installée par défaut. Les valeurs possibles sont 
    • Developer
    • Express
    • Standard
    • Enterprise
    • EnterpriseCore
  • -d indique que le docker fonctionnera en tant que daemon, donc en background.
  • --restart=always indique qu'au boot de la machine, le docker doit être démarré.
  • -p 192.168.8.1:1433:1433 indique sur quel port et sur quelle IP le serveur SQL doit être à l'écoute. Ce point est essentiel, car par défaut, il sera à l'écoute sur toutes les interfaces réseau, y compris celle correspondant à l'IP publique.
  • il n'est pas possible de restreindre le trafic vers le docker avec UFW car le docker gère directement le pare-feu iptables, tout comme UFW. La restriction de trafic peut donc se faire, soit en paramétrant iptables directement, soit via le paramètre -p tel que ci-dessus.
  • il faut immédiatement changer le mot de passe SA, car celui passé dans la ligne de commande est lisible "en clair" en tant que variable d'environnement du docker. Ce changement peut se faire aisément via les outils clients installés sur un poste Windows.

Pour lister les dockers présents et connaître leur ID :

sudo docker ps -a

Pour mettre à jour un docker existant, par exemple :

sudo docker update --restart=always 9998877aa9xx

où 9998877aa9xx est l'id obtenu avec la commande précédente

Pour restaurer un backup, il suffit de l'uploader vers la machine Linux avec WinSCP (par exemple). Ensuite, il faut le charger dans le container Docker :

sudo docker cp mydb.bak sql1:/var/opt/mssql/mydb.bak

Le backup peut ensuite être récupéré via les outils clients installés sur un poste Windows.

Le fichier bak peut enfin être supprimé dans le container :

sudo docker exec 9998877aa9xx rm /var/opt/mssql/mydb.bak

 

Il peut être plus simple de créer un répertoire partagé entre l'hôte (la machine Linux) et le container. Pour cela, il faut d'abord créer le répertoire, par exemple :

mkdir /home/myuser/baksql

Ensuite, créer le container avec ce répertoire partagé :

sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" -e "MSSQL_PID=Express" -p 192.168.8.1:1433:1433 --name sql1 --hostname sql1 -d -v /home/myuser/baksql:/var/opt/mssql/baksql --restart=always mcr.microsoft.com/mssql/server:2019-latest

Cela permet, par exemple, d'effectuer des backup SQL qui seront placés dans ce répertoire et récupérés facilement depuis la machine Linux.

 Il n'est pas possible d'ajouter un répertoire partagé sur un container déjà créé.


Depuis la version 12.0 de Mercator, les fonctions et procédures CLR sont aussi disponibles pour un serveur SQL sous Linux. 


Considérations importantes concernant MercatorShield

SQL Server sous Linux ne permet d'exécuter des fonctions SQL CLR (donc .net) qui utilisent le réseau. Dès lors, il n'est pas possible d'utiliser la configuration "cloud" de MercatorShield. Ceci n'est pas bloquant et requiert tout au plus d'ajouter (gratuitement) dans le voucher SHIELD=n, permettant d'atteindre le serveur Linux.

Il est toujours recommandé d'installer MercatorShieldService sur le même serveur que SQL Server, donc sur la machine Linux. Il faut dès lors suivre les instructions concernant Linux de cette page.

  • Installation sur une machine Linux
  • Informations avancées (Linux)


Cookies fonctionnels : Cookies nécessaires à l'utilisation du site et cookies de préférence. Ils ne contiennent aucune donnée à caractère personnel. (En savoir plus)

Cookies statistiques : Captation de statistiques liées aux comportements des internautes. (En savoir plus)

Cookies marketing : Pour effectuer le suivi des visiteurs au travers des sites web, à des fins publicitaires. (En savoir plus)