Server deployments can be tedious, especially when you need to configure each server manually. Tasks like setting up directories, copying scripts, installing dependencies, and scheduling periodic jobs can be repetitive and error-prone.
Wouldn’t it be great if all of this could be handled with a single command? That’s where a robust installation script comes in. In this post, we’ll walk through how to create a flexible and secure installation script for your server-side applications. As a bonus, we’ll demonstrate how you can execute the installation with a single-line command. It’s a basic version of an install script that you can use as an template for your own installs.
The Power of an Installation Script
A well-designed installation script brings several advantages:
- Consistency: Ensures the same setup across multiple servers.
- Efficiency: Saves time by automating repetitive tasks.
- Flexibility: Allows customization for different environments or configurations.
- Ease of Use: Makes it easy for others to install and run your software.
In this guide, we’ll focus on a real-world example: deploying a monitoring agent to multiple servers. The same principles can be applied to virtually any server-side application.
Building the Script
1. Start with Dependencies
The script should first check if all required tools are installed, such as curl
and jq
. If they’re missing, the script installs them automatically.
Copied!if ! command -v curl >/dev/null 2>&1 || ! command -v jq >/dev/null 2>&1; then echo "Installing required tools: curl and jq" if [ -f /etc/debian_version ]; then sudo apt update && sudo apt install -y curl jq elif [ -f /etc/redhat-release ]; then sudo yum install -y curl jq else echo "Unsupported OS. Please install 'curl' and 'jq' manually." exit 1 fi fi
2. Automate Configuration
A configuration file is crucial for storing environment-specific settings like API keys or endpoint URLs. Here’s how to create one dynamically:
Copied!cat > /opt/agent/agent.conf <<EOL API_KEY="your-api-key" BASE_URL="https://your-api-url" API_URL="${BASE_URL}/api/agent_checks" SUBMIT_URL="${BASE_URL}/api/submit" DEBUG=true LOG_FILE="/var/log/agent.log" EOL
3. Handle Files and Directories
The script creates the necessary directories, copies the main agent script, and ensures proper permissions:
Copied!mkdir -p /opt/agent cp agent.sh /opt/agent/ chmod +x /opt/agent/agent.sh touch /var/log/agent.log chmod 644 /var/log/agent.log
4. Schedule the Agent
Adding a cronjob ensures the agent runs periodically:
Copied!CRON_CMD="* * * * * root /opt/agent/agent.sh > /dev/null 2>&1" if ! grep -q "$CRON_CMD" /etc/crontab; then echo "$CRON_CMD" >> /etc/crontab fi
5. Wrap It All Up
Finally, combine everything into a single script (install_agent.sh
) that runs these steps sequentially:
Copied!#!/bin/bash if [ $# -ne 2 ]; then echo "Usage: $0 <API_KEY> <BASE_URL>" exit 1 fi API_KEY=$1 BASE_URL=$2 # Install dependencies if ! command -v curl >/dev/null 2>&1 || ! command -v jq >/dev/null 2>&1; then sudo apt update && sudo apt install -y curl jq fi # Create directories and files mkdir -p /opt/agent cp agent.sh /opt/agent/ chmod +x /opt/agent/agent.sh # Create configuration file cat > /opt/agent/agent.conf <<EOL API_KEY="$API_KEY" BASE_URL="$BASE_URL" API_URL="${BASE_URL}/api/agent_checks" SUBMIT_URL="${BASE_URL}/api/submit" DEBUG=true LOG_FILE="/var/log/agent.log" EOL touch /var/log/agent.log chmod 644 /var/log/agent.log # Add cronjob CRON_CMD="* * * * * root /opt/agent/agent.sh > /dev/null 2>&1" if ! grep -q "$CRON_CMD" /etc/crontab; then echo "$CRON_CMD" >> /etc/crontab fi echo "Installation completed successfully!"
Deploying the Script with a One-Liner
To make installation even easier, host your install_agent.sh
and agent.sh
files on a GitHub repository or a secure server. Then use a single-line command to download and run the installation script:
Copied!curl -sSL https://raw.githubusercontent.com/your-repo/install_agent.sh | bash -s -- your-api-key base_url
Replace your-repo
with your repository URL and your-api-key
with the appropriate key for the server.
An installation script like this simplifies deployments, reduces errors, and ensures consistency across servers. Whether you’re deploying a monitoring agent, a web application, or any server-side tool, the principles remain the same.
By combining automation with flexibility, you make life easier not only for yourself but also for anyone else who needs to use your software.
Feel free to customize this script and adapt it to your needs.
Leave a Reply