← Catalog Matrix
Server Config

How to Secure Nginx with Let's Encrypt SSL via Certbot

A production-ready Bash script to automate Let's Encrypt SSL certificate generation, Nginx installation config, and auto-renewal checks.

Overview & Problem Matrix

Configuring HTTPS tracking metrics manually involves downloading distinct packages, manually altering complex virtual host definitions, linking to absolute cryptographic paths, and orchestrating server task managers.

If you fail to arrange an automatic renewal backend worker, your Let's Encrypt SSL certifications will expire every 90 days. This oversight abruptly presents users with critical "Connection Not Private" browser security warnings, breaking client trust and tanking your search visibility metrics instantly.

Implementation Guide & Setup Steps

To automate the deployment and background lifecycles of your cloud security certificates, complete these administration operations:

  1. Confirm DNS Record Propagation: Before initializing execution arrays, verify that your public domain's A-record points directly to the external IP address of your web server hosting node.
  1. Stage the Installer: Save the automated script layout below to your host infrastructure directory pathway as ssl_setup.sh:

$ sudo nano /usr/local/bin/ssl_setup.sh

# IMPORTANT: Update the placeholder variable metrics inside the script # block below to match your live domain (DOMAIN) and administrator email (EMAIL).

  1. Secure and Run the Automation: Elevate the script execution privileges and trigger the file block to handle system installations, validation routines, certificate retrieval, and cron injection sequences automatically:

$ sudo chmod 700 /usr/local/bin/ssl_setup.sh $ sudo /usr/local/bin/ssl_setup.sh

#!/bin/bash

Ensure script runs with absolute administrative privileges

if [ "$EUID" -ne 0 ]; then echo "[ERROR] Please execute this server automation sequence as root (sudo)." exit 1 fi

Configuration: Update these values with your structural parameters

DOMAIN="yourdomain.com" EMAIL="your-admin-email@domain.com"

echo "[1/4] Updating repository lists and installing Certbot packages..." apt update -y apt install certbot python3-certbot-nginx -y

Verify Nginx configuration state before running provisioning

if ! nginx -t > /dev/null 2>&1; then echo "[ERROR] Pre-check failed: Your Nginx configuration files contain syntax issues." exit 1 fi

echo "[2/4] Provisioning secure Let's Encrypt SSL certificate for: ${DOMAIN}..."

Automatically authenticates, modifies server blocks, and configures redirects

certbot --nginx -d "$DOMAIN" --non-interactive --agree-tos --email "$EMAIL" --redirect

if [ $? -eq 0 ]; then echo "[SUCCESS] SSL certificate successfully mapped and active for https://${DOMAIN}" else echo "[ERROR] Certbot verification challenge failed. Check DNS A-record mapping." exit 1 fi

echo "[3/4] Reinforcing TLS parameters and testing server reloads..." systemctl reload nginx

echo "[4/4] Injecting renewal cron automation tasks..."

Let's Encrypt certificates last 90 days; check twice daily for expiring paths

if ! crontab -l 2>/dev/null | grep -q "certbot renew"; then (crontab -l 2>/dev/null; echo "0 /12 certbot renew --post-hook 'systemctl reload nginx' > /dev/null 2>&1") | crontab - echo "[SUCCESS] Automated renewal schedule active inside crontables." else echo "[INFO] Automated renewal script entry already active inside system cron." fi

echo "SSL deployment process completed successfully."