From 410f6ea81358f782f8a37b66c69b97e6e41df7f6 Mon Sep 17 00:00:00 2001 From: Azeem Fidahusein Date: Tue, 24 Jun 2025 20:40:00 +0100 Subject: [PATCH] added deployment script --- deploy.sh | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100755 deploy.sh diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..85e9d26 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,96 @@ +#!/bin/bash + +# ============================================================================== +# NGINX CONFIG DEPLOYMENT SCRIPT +# +# This script securely copies NGINX configuration files to a remote server +# using an SSH key for authentication. +# +# INSTRUCTIONS: +# 1. Edit the `REMOTE_USER` and `REMOTE_HOST` variables below. +# 2. Place this script in the same directory as your `nginx.conf` file +# and your `sites-available` folder. +# 3. Make the script executable with: chmod +x .sh +# 4. Run the script with: ./.sh +# ============================================================================== + +# --- Configuration --- +# PLEASE EDIT THESE TWO VARIABLES with your server details. +REMOTE_USER="ubuntu" # Example: ubuntu, ec2-user, root +REMOTE_HOST="3.9.182.122" # Example: 192.168.1.100 or my-server.com + +# --- File & Path Definitions --- +# Path to your private SSH key. +# The '~' symbol represents your home directory. +KEY_FILE="~/repos/azeem-macbookair.pem" + +# Source files and directory. +# These are expected to be in the same directory as this script. +# Note: I've corrected the spelling of 'sites-available' for you. +SOURCE_NGINX_CONF="nginx.conf" +SOURCE_SITES_DIR="sites-available" + +# Destination paths on the remote server. +DEST_NGINX_PATH="/etc/nginx/" +DEST_SITES_PATH="/etc/nginx/sites-available/" + +# --- Script Logic --- + +echo "🚀 Starting NGINX configuration deployment to $REMOTE_HOST..." +echo "--------------------------------------------------------" + +# Expand the tilde (~) in the key file path to an absolute path. +# This is necessary because scp might not expand '~' correctly otherwise. +EVAL_KEY_FILE=$(eval echo "$KEY_FILE") + +# --- Pre-flight Checks --- +# Check 1: Ensure the SSH key file exists. +if [ ! -f "$EVAL_KEY_FILE" ]; then + echo "❌ ERROR: SSH key not found at $EVAL_KEY_FILE" + echo "Please ensure the path in the KEY_FILE variable is correct." + exit 1 +fi + +# Check 2: Ensure the main nginx.conf file exists. +if [ ! -f "$SOURCE_NGINX_CONF" ]; then + echo "❌ ERROR: Source file '$SOURCE_NGINX_CONF' not found in this directory." + exit 1 +fi + +# Check 3: Ensure the sites-available directory exists. +if [ ! -d "$SOURCE_SITES_DIR" ]; then + echo "❌ ERROR: Source directory '$SOURCE_SITES_DIR' not found." + echo "Note: The script expects this directory to be named 'sites-available'." + exit 1 +fi + +# --- File Transfer Operations --- + +# Step 1: Transfer the main nginx.conf file. +echo "- Transferring '$SOURCE_NGINX_CONF' to $DEST_NGINX_PATH..." +scp -i "$EVAL_KEY_FILE" "$SOURCE_NGINX_CONF" "${REMOTE_USER}@${REMOTE_HOST}:${DEST_NGINX_PATH}" + +# Check if the last command (scp) was successful. +if [ $? -ne 0 ]; then + echo "❌ ERROR: Failed to transfer '$SOURCE_NGINX_CONF'. Aborting." + exit 1 +fi +echo " ✅ Success." +echo + +# Step 2: Transfer the contents of the sites-available directory. +# The '-r' flag is for recursive copy (required for directories). +# The '/*' at the end of the source path copies the *contents* of the directory. +echo "- Transferring all files from '$SOURCE_SITES_DIR/' to $DEST_SITES_PATH..." +scp -i "$EVAL_KEY_FILE" -r "${SOURCE_SITES_DIR}/"* "${REMOTE_USER}@${REMOTE_HOST}:${DEST_SITES_PATH}" + +if [ $? -ne 0 ]; then + echo "❌ ERROR: Failed to transfer contents of '$SOURCE_SITES_DIR'. Aborting." + exit 1 +fi +echo " ✅ Success." +echo + +# --- Completion --- +echo "--------------------------------------------------------" +echo "🎉 Deployment complete! All files transferred successfully."