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)