Files
SkyArtShop/install-sqlserver-docker.sh

160 lines
4.6 KiB
Bash
Executable File

#!/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 ""