diff --git a/docker/install_docker.sh b/docker/install_docker.sh new file mode 100644 index 0000000..83c1bcc --- /dev/null +++ b/docker/install_docker.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +function install_docker() { + echo "[ DOCKER ]: Started Docker setup" + + echo "[ DOCKER ]: Installing prerequisites" + # Install prerequisites + sudo apt-get update + sudo apt-get install -y ca-certificates curl + + # Create directory for GPG key + sudo mkdir -p /etc/apt/keyrings + + # Download and install Docker GPG key + sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc + sudo chmod a+r /etc/apt/keyrings/docker.asc + + # Add Docker repository to sources.list + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null + + # Update package lists + sudo apt-get update + + # Install Docker Engine, CLI, containerd, Buildx plugin, and Compose plugin + if ! dpkg -l | grep -q docker-ce; then + echo "[ DOCKER ]: Installing Docker" + sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + echo "[ DOCKER ]: Installed succesfully" + else + echo "[ DOCKER ]: Docker was already installed" + fi +} diff --git a/index.sh b/index.sh index 40c6690..0a9de11 100644 --- a/index.sh +++ b/index.sh @@ -1,107 +1,20 @@ #!/bin/bash -echo "Installing and setting up nginx" +REPO_URL="https://github.com/elAgala/server-initializer" +TARGET_DIR="/tmp/server-initializer" -# Function to create the static configuration template -function create_static_config() { - cat </dev/null - -# Update package lists -sudo apt-get update - -# Install Docker Engine, CLI, containerd, Buildx plugin, and Compose plugin -if ! dpkg -l | grep -q docker-ce; then - sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - echo "Docker installation completed!" -else - echo "Docker is already installed." +if [ ! -d "$TARGET_DIR" ]; then + echo "Cloning the repository..." + git clone "$REPO_URL" "$TARGET_DIR" fi -echo "New user creation" +cd "$TARGET_DIR" || exit 1 -function create_user() { - read -p "Enter username: " username +echo "Running install.sh from the cloned repository..." +chmod +x ./install.sh +./install.sh "$1" - sudo useradd $username - sudo usermod -aG sudo $username - sudo usermod -aG docker $username - - sudo mkdir -p /var/www/apps /var/www/static - - echo "User $username created with sudo privileges & included in docker user group" - echo "Apps directory created: /var/www/apps/" - echo "Static files directory: /var/www/static/" - echo "Next step: Set up auth via SSH keys. Refer to: [https://github.com/elAgala/server-initializer/blob/main/create_ssh_key.md]" -} - -create_user +echo "Cleaning up..." +cd / +rm -rf "$TARGET_DIR" +echo "Cleanup complete!" diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..ba78e0d --- /dev/null +++ b/install.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +source ./user/create_user.sh +source ./user/ssh_config.sh +source ./web/install_nginx.sh +source ./web/setup_ufw.sh +source ./docker/install_docker.sh +source ./utils/install_vim.sh +source ./utils/install_zsh.sh +source ./monitoring/install_prometehus.sh + +chmod +x ./user/create_user.sh +chmod +x ./user/ssh_config.sh +chmod +x ./web/install_nginx.sh +chmod +x ./web/setup_ufw.sh +chmod +x ./docker/install_docker.sh +chmod +x ./utils/install_vim.sh +chmod +x ./utils/install_zsh.sh +chmod +x ./monitoring/install_prometehus.sh + +if [ -z "$1" ]; then + echo "Usage: $0 " + exit 1 +fi + +# Docker +install_docker + +# Web +install_nginx +setup_ufw + +# User +create_user $1 +config_ssh $1 + +# Utils +install_vim +install_zsh $1 + +# Monitoring +install_prometehus $1 diff --git a/monitoring/install_prometehus.sh b/monitoring/install_prometehus.sh new file mode 100644 index 0000000..30ac0de --- /dev/null +++ b/monitoring/install_prometehus.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +function install_prometehus() { + REPO_URL = "https://raw.githubusercontent.com/elAgala/monitoring-template/main" + username="$1" + monitoring_dir="/home/$username/monitoring" + + echo "[ MONITOR ]: Starting Prometehus setup" + mkdir -p "$monitoring_dir" + curl -L "$REPO_URL/docker-compose.yml" -o "$monitoring_dir/docker-compose.yml" + curl -L "$REPO_URL/prometheus.yml" -o "$monitoring_dir/prometheus.yml" + cd "$monitoring_dir" + echo "[ MONITOR ]: Prometheus Installed. Starting on docker container" + sudo docker-compose up -d + echo "[ MONITOR ]: Prometehus up & running on port 9090" +} diff --git a/setup.sh b/setup.sh deleted file mode 100644 index 40a7c33..0000000 --- a/setup.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -# Check for required arguments -if [ $# -ne 3 ]; then - echo "Usage: $0 " - exit 1 -fi - -# Extract arguments -username="$1" -server_ip="$2" -port="$3" - -# Script path -script_path="index.sh" - -# Transfer the script to the server -scp -P $port "$script_path" "$username@$server_ip:/tmp/" || { - echo "Error transferring script" - exit 1 -} - -# Execute the script on the server -ssh -P $port "$username@$server_ip" "bash /tmp/"$script_path"" || { - echo "Error executing script on server" - exit 1 -} - -echo "Script execution completed on $username@$server_ip" diff --git a/user/create_user.sh b/user/create_user.sh new file mode 100644 index 0000000..1871ba3 --- /dev/null +++ b/user/create_user.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +function create_user() { + username = $1 + + echo "[ USER ]: Starting user setup" + sudo useradd $username + echo "[ USER ]: Set a password for $username:" + sudo passwd "$username" + echo "[ USER ]: User created succesfully" + + echo "[ USER ]: Adding user to groups" + sudo usermod -aG sudo $username + sudo usermod -aG www-data $username + sudo usermod -aG docker $username + echo "[ USER ]: User added to the following groupps (sudo, www-data, docker)" + + echo "[ USER ]: User setup finished" +} diff --git a/user/ssh_config.sh b/user/ssh_config.sh new file mode 100644 index 0000000..7994fd0 --- /dev/null +++ b/user/ssh_config.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +function config_ssh() { + username = $1 + + echo "[ SSH ]: Starting setup" + ssh_dir = "/home/$username/.ssh" + + sudo mkdir -p $ssh_dir + sudo chmod 700 $ssh_dir + + sudo touch "$ssh_dir/authorized_leys" + sudo chmod 600 "$ssh_dir/authorized_leys" + sudo chown -R "$username:$username" $ssh_dir + echo "[ SSH ]: Created ~/.ssh/authorized_leys" + + echo "[ SSH ]: Paste the public key for $username (leave empty to skip)" + read -r public_key + if [ -n "$public_key" ]; then + echo "$public_key" | sudo tee -a "$ssh_dir/authorized_keys" >/dev/null + echo "[ SSH ]: Public key added to $ssh_dir/authorized_keys." + else + echo "[ SSH ]: No public key provided, skipping..." + fi + + echo "[ SSH ]: Disabling root login" + sudo sed -i 's/^#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config + echo "[ SSH ]: Root login disabled" + + echo "[ SSH ]: Adding $username to allowed users" + if grep -q "^AllowUsers" /etc/ssh/sshd_config; then + sudo sed -i "s/^AllowUsers.*/& $username/" /etc/ssh/sshd_config + else + echo "AllowUsers $username" | sudo tee -a /etc/ssh/sshd_config >/dev/null + fi + echo "[ SSH ]: User added to allowed users" + + sudo systemctl restart sshd + echo "[ SSH ]: Finished succesfully!" +} diff --git a/utils/install_vim.sh b/utils/install_vim.sh new file mode 100644 index 0000000..82bb6b5 --- /dev/null +++ b/utils/install_vim.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +function install_vim() { + # TODO: Add .config + + echo "[ UTILS ]: Installing Vim" + sudo apt-get install -y vim + echo "[ UTILS ]: Vim installed succesfully" +} diff --git a/utils/install_zsh.sh b/utils/install_zsh.sh new file mode 100644 index 0000000..d202e90 --- /dev/null +++ b/utils/install_zsh.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +function install_zsh() { + username = $1 + echo "[ UTILS ]: Installing zsh" + sudo apt-get install -y zsh + sudo chsh -s /usr/bin/zsh "$username" + echo "[ UTILS ]: Zsh installed succesfully and set as default shell for $username" +} diff --git a/web/install_nginx.sh b/web/install_nginx.sh new file mode 100644 index 0000000..4718de3 --- /dev/null +++ b/web/install_nginx.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +function install_nginx() { + echo "[ WEB ]: Starting NginX setup" + if ! dpkg -l | grep -q nginx; then + sudo apt update + sudo apt install -y nginx + sudo systemctl start nginx + sudo systemctl enable nginx + echo "[ WEB ]: Installed NginX succesfully" + else + echo "[ WEB ]: NginX already installed, skipping..." + fi +} diff --git a/web/setup_ufw.sh b/web/setup_ufw.sh new file mode 100644 index 0000000..58da75f --- /dev/null +++ b/web/setup_ufw.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +function setup_ufw() { + echo "[ WEB ]: Started UFW Firewall setup" + sudo apt-get install -y ufw + sudo ufw allow 22 + sudo ufw allow 443 + sudo ufw enable + echo "[ WEB ]: UFW Installed succesfully. Open ports SSH:22 - HTTPS:443" +}