#!/bin/bash # SQL Server Docker Installation Script # This is a more reliable method for running SQL Server on Ubuntu 24.04 set -e echo "==================================" echo "SQL Server 2022 Docker Installation" echo "==================================" # Check if running as root if [ "$EUID" -ne 0 ]; then echo "Please run as root (use sudo)" exit 1 fi # Install Docker if not already installed if ! command -v docker &> /dev/null; then echo "Installing Docker..." apt-get update apt-get install -y ca-certificates curl gnupg lsb-release # Add Docker's official GPG key install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg chmod a+r /etc/apt/keyrings/docker.gpg # Add Docker repository echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null # Install Docker Engine apt-get update apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # Start Docker systemctl start docker systemctl enable docker echo "✅ Docker installed successfully" else echo "✅ Docker is already installed" fi # Set SA password echo "" read -sp "Enter SA password (min 8 chars, uppercase, lowercase, digits, symbols): " SA_PASSWORD echo "" read -sp "Confirm SA password: " SA_PASSWORD_CONFIRM echo "" if [ "$SA_PASSWORD" != "$SA_PASSWORD_CONFIRM" ]; then echo "❌ Passwords do not match!" exit 1 fi # Validate password strength if [ ${#SA_PASSWORD} -lt 8 ]; then echo "❌ Password must be at least 8 characters!" exit 1 fi # Stop and remove existing container if it exists if [ "$(docker ps -aq -f name=sqlserver)" ]; then echo "Removing existing SQL Server container..." docker stop sqlserver 2>/dev/null || true docker rm sqlserver 2>/dev/null || true fi # Create data directory mkdir -p /var/opt/mssql/data mkdir -p /var/opt/mssql/log mkdir -p /var/opt/mssql/backup # Run SQL Server container echo "" echo "Starting SQL Server 2022 container..." docker run -e "ACCEPT_EULA=Y" \ -e "MSSQL_SA_PASSWORD=$SA_PASSWORD" \ -e "MSSQL_PID=Express" \ -p 1433:1433 \ --name sqlserver \ --hostname sqlserver \ -v /var/opt/mssql/data:/var/opt/mssql/data \ -v /var/opt/mssql/log:/var/opt/mssql/log \ -v /var/opt/mssql/backup:/var/opt/mssql/backup \ --restart unless-stopped \ -d \ mcr.microsoft.com/mssql/server:2022-latest # Wait for SQL Server to start echo "" echo "Waiting for SQL Server to start..." sleep 15 # Check container status if docker ps | grep -q sqlserver; then echo "✅ SQL Server container is running" else echo "❌ SQL Server container failed to start" echo "Check logs with: docker logs sqlserver" exit 1 fi # Test connection echo "" echo "Testing connection..." docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ -S localhost -U sa -P "$SA_PASSWORD" -C \ -Q "SELECT @@VERSION" &>/dev/null if [ $? -eq 0 ]; then echo "✅ Connection successful!" else echo "⚠️ Connection test failed, but container is running" echo "You may need to wait a bit longer for SQL Server to fully initialize" fi # Configure firewall if command -v ufw &> /dev/null; then echo "" echo "Configuring firewall..." ufw allow 1433/tcp echo "✅ Firewall configured" fi # Set container to start on boot systemctl enable docker echo "" echo "==================================" echo "Installation Complete!" echo "==================================" echo "" echo "SQL Server 2022 is running in Docker" echo "" echo "Connection Information:" echo " Server: localhost,1433" echo " Username: sa" echo " Password: (the one you just set)" echo "" echo "Connection String for appsettings.json:" echo "Server=localhost,1433;Database=SkyArtShopDB;User Id=sa;Password=YOUR_PASSWORD;TrustServerCertificate=True;MultipleActiveResultSets=True" echo "" echo "Useful Docker commands:" echo " docker ps - List running containers" echo " docker logs sqlserver - View SQL Server logs" echo " docker stop sqlserver - Stop SQL Server" echo " docker start sqlserver - Start SQL Server" echo " docker restart sqlserver - Restart SQL Server" echo " docker exec -it sqlserver bash - Access container shell" echo "" echo "Data persistence:" echo " Database files: /var/opt/mssql/data" echo " Log files: /var/opt/mssql/log" echo " Backups: /var/opt/mssql/backup" echo ""