160 lines
4.6 KiB
Bash
160 lines
4.6 KiB
Bash
|
|
#!/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 ""
|