Hay dos maneras de tener SQL Server en Ubuntu/linux, una es de manera nativa y otra mediante un contenedor en Docker.
En mi experiencia, como buena práctica siempre es mejor tener la última versión de lo que este disponible en su momento, si hubiera problemas de compatibilidad o soporte, tuve un caso donde SQL Server no era compatible con mi versión de Ubuntu de ese momento ya que era muy reciente, la solución fue simple y sencilla, usar Docker y virtualizar una versión anterior de Ubuntu para correr SQL Server.
En este caso es de forma directa y son pasos muy sencillos.
Ejecutamos el siguiente comando para la clave pública:
curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | sudo tee /etc/apt/sources.list.d/mssql-server-2022.list
Ejecutamos un update
sudo apt-get update
Si nos muestra un error como el siguiente:
W: GPG error: https://packages.microsoft.com/ubuntu/22.04/mssql-server-2022 jammy InRelease: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY EB3E94ADBE1229CF
Ejecutamos el siguiente comando para corregir el error:
curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
Ahora si ejecutamos nuestro apt-get update y después el siguiente comando:
sudo apt-get install -y mssql-server
Si nos muestra un error, podemos ejecutar el siguiente comando para continuar la instalación:
sudo /opt/mssql/bin/mssql-conf setup
Y posteriormente nos pedirá escoger nuestra versión, seleccionan su versión que requieran, nos pedirá aceptar la licencia, el idioma y con eso concluiremos nuestra instalación.
Para validar la ejecución de SQL, haremos lo siguiente:
En esta ocasión vi que mi VPS con Ubuntu y un contenedor en docker de SQL Server y 2 aplicaciones en Net Core estaba al 99.99% de espacio en disco, el cuál ejecutando comandos como
sudo df -h
ó
du -hs * | sort -nr | head -3
Me ayudaron a identificar que era una carpeta de Docker:
/var/lib/docker/overlay2
Leyendo por internet vi algunos comandos como:
docker system prune --all
Que ayuda a depurar tu flujo en docker, es peligroso ya que elimina definitivamente contenedores que estén detenidos, yo sin conflicto alguno lo ejecuté y no me liberó nada de espacio.
Navegando y navegando me encontré con el siguiente comando que me funcionó:
sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"
lo cual hace referencia a el Controlador de registro de archivos JSON y en la documentación oficial podemos configurar como deben crecer en tamaño y cantidad.
En este punto, dependiendo su versión de ubuntu, algunas versiones anteriores de net core podrían no ser compatible, en mi servidor Ubuntu 23.04 pude instalar net core 6.0 de la siguiente manera
Nota importante: Cuando configuremos múltiples sitios, tendremos que ir cambiando el puerto para que cada aplicación/sitio apunte de manera correspondiente.
Ejemplos: <::5001>, <::5002>, <::5003>,
[Unit]
Description=Example .NET Web API App running on Ubuntu
[Service]
WorkingDirectory=/var/www/diarioweb.mirandamx.dev/html
ExecStart=/usr/bin/dotnet /var/www/diarioweb.mirandamx.dev/html/DiarioFrontEndMVC.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Release
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
Environment=ASPNETCORE_URLS=http://127.0.0.1::5001
[Install]
WantedBy=multi-user.target
Ahora en nuestro archivo de configuración cambiamos el location por un proxy_pass