| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #!/bin/sh
- # SSL Certificate Initialization Script for Docker
- # This script is used to obtain the initial SSL certificate
- set -e
- DOMAIN_NAME="${DOMAIN_NAME:-}"
- SSL_EMAIL="${SSL_EMAIL:-}"
- STAGING="${SSL_STAGING:-0}"
- if [ -z "$DOMAIN_NAME" ]; then
- echo "ERROR: DOMAIN_NAME environment variable is required"
- echo ""
- echo "Usage:"
- echo " DOMAIN_NAME=yourdomain.com SSL_EMAIL=your@email.com docker-compose -f docker-compose.prod.yml run --rm certbot-init"
- echo ""
- echo "For testing (staging server):"
- echo " DOMAIN_NAME=yourdomain.com SSL_EMAIL=your@email.com SSL_STAGING=1 docker-compose -f docker-compose.prod.yml run --rm certbot-init"
- exit 1
- fi
- if [ -z "$SSL_EMAIL" ]; then
- echo "ERROR: SSL_EMAIL environment variable is required"
- echo ""
- echo "Usage:"
- echo " DOMAIN_NAME=yourdomain.com SSL_EMAIL=your@email.com docker-compose -f docker-compose.prod.yml run --rm certbot-init"
- exit 1
- fi
- echo "=========================================="
- echo "SSL Certificate Initialization"
- echo "=========================================="
- echo "Domain: $DOMAIN_NAME"
- echo "Email: $SSL_EMAIL"
- echo ""
- # Use staging server if SSL_STAGING=1 (for testing)
- STAGING_FLAG=""
- if [ "$STAGING" = "1" ]; then
- echo "WARNING: Using Let's Encrypt staging server (for testing only)"
- STAGING_FLAG="--staging"
- fi
- # Wait for nginx to be ready (it needs to serve the challenge)
- echo "Waiting for nginx to be ready..."
- sleep 5
- # Obtain certificate using webroot method
- echo "Requesting SSL certificate from Let's Encrypt..."
- certbot certonly \
- --webroot \
- --webroot-path=/var/www/certbot \
- --email "$SSL_EMAIL" \
- --agree-tos \
- --no-eff-email \
- --force-renewal \
- $STAGING_FLAG \
- -d "$DOMAIN_NAME"
- if [ $? -eq 0 ]; then
- echo ""
- echo "=========================================="
- echo "✅ SSL certificate obtained successfully!"
- echo "=========================================="
- echo "Certificate location: /etc/letsencrypt/live/$DOMAIN_NAME/"
- echo ""
- echo "Next steps:"
- echo "1. Update nginx.prod.conf with your domain name:"
- echo " Replace \${DOMAIN_NAME:-default} with $DOMAIN_NAME"
- echo " Or set DOMAIN_NAME environment variable in docker-compose.prod.yml"
- echo ""
- echo "2. Restart nginx container:"
- echo " docker-compose -f docker-compose.prod.yml restart nginx"
- echo ""
- echo "3. Verify HTTPS is working:"
- echo " curl https://$DOMAIN_NAME/health"
- echo ""
- echo "4. Certificates will auto-renew every 12 hours"
- else
- echo ""
- echo "=========================================="
- echo "❌ SSL certificate obtainment failed"
- echo "=========================================="
- echo "Please check:"
- echo "1. Domain DNS is pointing to this server"
- echo "2. Port 80 is accessible from the internet"
- echo "3. Nginx container is running and can serve /.well-known/acme-challenge/"
- exit 1
- fi
|