#!/bin/bash
# SSL Certificate Setup Script for VPS Deployment
# This script helps set up SSL certificates for your nginx configuration
set -e
DOMAIN="candivista.com"
EMAIL="blindxfish@gmail.com" # Change this to your email
NGINX_CONF_DIR="./nginx"
SSL_DIR="./nginx/ssl"
echo "Setting up SSL certificates for $DOMAIN"
# Create SSL directory if it doesn't exist
mkdir -p "$SSL_DIR"
# Check if we have a domain name or just IP
if [[ $DOMAIN =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "IP address detected: $DOMAIN"
echo "For IP addresses, you'll need to use self-signed certificates or a service like Cloudflare"
echo "Generating self-signed certificate..."
# Generate self-signed certificate
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout "$SSL_DIR/key.pem" \
-out "$SSL_DIR/cert.pem" \
-subj "/C=US/ST=State/L=City/O=Organization/CN=$DOMAIN"
echo "Self-signed certificate generated successfully!"
echo "Note: Browsers will show a security warning for self-signed certificates."
echo "For production, consider using Cloudflare or a domain name with Let's Encrypt."
else
echo "Domain name detected: $DOMAIN"
echo "Setting up Let's Encrypt certificate..."
# Install certbot if not already installed
if ! command -v certbot &> /dev/null; then
echo "Installing certbot..."
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
sudo apt-get update
sudo apt-get install -y certbot
elif [[ "$OSTYPE" == "darwin"* ]]; then
brew install certbot
else
echo "Please install certbot manually for your OS"
exit 1
fi
fi
# Create webroot directory for Let's Encrypt challenge
mkdir -p "$SSL_DIR/webroot/.well-known/acme-challenge"
# Get certificate
sudo certbot certonly --webroot \
-w "$SSL_DIR/webroot" \
-d "$DOMAIN" \
--email "$EMAIL" \
--agree-tos \
--non-interactive
# Copy certificates to our SSL directory
sudo cp "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" "$SSL_DIR/cert.pem"
sudo cp "/etc/letsencrypt/live/$DOMAIN/privkey.pem" "$SSL_DIR/key.pem"
sudo chown $(whoami):$(whoami) "$SSL_DIR/cert.pem" "$SSL_DIR/key.pem"
echo "Let's Encrypt certificate installed successfully!"
echo "Setting up auto-renewal..."
# Add renewal script
cat > "$SSL_DIR/renew.sh" << 'EOF'
#!/bin/bash
certbot renew --quiet
docker-compose restart nginx
EOF
chmod +x "$SSL_DIR/renew.sh"
# Add to crontab for auto-renewal
(crontab -l 2>/dev/null; echo "0 12 * * * $SSL_DIR/renew.sh") | crontab -
echo "Auto-renewal configured!"
fi
echo "SSL setup complete!"
echo "Certificate: $SSL_DIR/cert.pem"
echo "Private key: $SSL_DIR/key.pem"
echo ""
echo "Next steps:"
echo "1. Update your .env file with production values"
echo "2. Run: docker-compose -f docker-compose.yml --env-file env.production up -d"
echo "3. Test your setup: https://$DOMAIN"