From 8802e0b6b16cf97ff7b441ec230912955f9adc5f Mon Sep 17 00:00:00 2001 From: Noah vdv Date: Sat, 20 Sep 2025 12:32:36 +0200 Subject: [PATCH] add docker debian script --- docker-debian/README.md | 21 +++++ docker-debian/docker-debian.sh | 162 +++++++++++++++++++++++++++++++++ 2 files changed, 183 insertions(+) create mode 100644 docker-debian/README.md create mode 100644 docker-debian/docker-debian.sh diff --git a/docker-debian/README.md b/docker-debian/README.md new file mode 100644 index 0000000..f20a937 --- /dev/null +++ b/docker-debian/README.md @@ -0,0 +1,21 @@ +# 🐳 Docker Setup Script for Debian + +This script automates the installation of Docker and optionally helps you set up a working directory and a `compose.yaml` as well as a `.env` file. + +--- + +## 🚀 How to Use + +run the following script + +```bash +wget -qO docker-debian.sh https://gitea.featherer.xyz/nono/docker-debian/raw/branch/main/docker-debian.sh +source docker-debian.sh +``` + +Or when run locally (using your own ip address) + +```bash +wget -qO docker-debian.sh http://10.1.0.102:3000/nono/docker-debian/raw/branch/main/docker-debian.sh +source docker-debian.sh +``` diff --git a/docker-debian/docker-debian.sh b/docker-debian/docker-debian.sh new file mode 100644 index 0000000..b7ece29 --- /dev/null +++ b/docker-debian/docker-debian.sh @@ -0,0 +1,162 @@ +#!/bin/bash + +clear + +# If the user appends the y flag +AUTO_YES=false +for arg in "$@"; do + if [ "$arg" = "-y" ]; then + AUTO_YES=true + fi +done + +# Color and formatting variables +RESET="\033[0m" +BOLD="\033[1m" +GREEN="\033[32m" +YELLOW="\033[33m" +CYAN="\033[36m" +RED="\033[31m" + +# Print functions +info() { echo -e "\n${BOLD}${CYAN}>>> $1${RESET}\n"; } +warn() { echo -e "\n${BOLD}${YELLOW}>>> $1${RESET}\n"; } +error() { echo -e "\n${BOLD}${RED}>>> ERROR: $1${RESET}\n"; } + +# Check if script is sourced +(return 0 2>/dev/null) +if [ $? -ne 0 ]; then + error "Please run this script with: source docker-debian.sh" + echo "Otherwise, directory changes won't persist." + exit 1 +fi + +# Set SUDO prefix +if [ "$EUID" -ne 0 ]; then + SUDO="sudo" +else + SUDO="" +fi + +# Prompt function +prompt() { + local message=$1 + + if [ "$AUTO_YES" = true ]; then + echo -e "${BOLD}${CYAN}>>> $message [Y/n]: ${RESET}y" + return 0 + fi + + while true; do + read -rp "$(echo -e "${BOLD}${CYAN}>>> $message [Y/n]: ${RESET}")" yn + case $yn in + [Yy]* | "" ) return 0 ;; + [Nn]* ) return 1 ;; + * ) warn "Please answer yes or no." ;; + esac + done +} + +### ======= Collect Choices First ======= + +prompt "Do you want to update and upgrade the system?" && DO_UPDATE=true +prompt "Do you want to install Docker?" && DO_DOCKER=true +prompt "Do you want to create a folder named after the hostname?" && USE_HOSTNAME=true + +if [ -z "$USE_HOSTNAME" ]; then + prompt "Do you want to create a folder with a custom name?" && USE_CUSTOM=true + if [ "$USE_CUSTOM" = true ]; then + read -rp "$(echo -e "${BOLD}${CYAN}>>> Enter custom folder name: ${RESET}")" CUSTOM_DIR + [ -z "$CUSTOM_DIR" ] && warn "No folder name entered. Skipping folder creation." && SKIP_FOLDER=true + else + SKIP_FOLDER=true + fi +fi + +if [ -z "$SKIP_FOLDER" ]; then + prompt "Do you want to create a compose.yaml file now?" && CREATE_COMPOSE=true + prompt "Do you want to create a .env file now?" && CREATE_ENV=true +fi + +### ======= Review Selections ======= +info "Review your selections before continuing:" + +[ "$DO_UPDATE" = true ] && echo "✔ Update and upgrade the system" +[ "$DO_DOCKER" = true ] && echo "✔ Install Docker" +if [ -z "$SKIP_FOLDER" ]; then + echo "✔ Create folder: $([ "$USE_HOSTNAME" = true ] && echo "$(hostname)" || echo "$CUSTOM_DIR")" + [ "$CREATE_COMPOSE" = true ] && echo "✔ Create compose.yaml file" + [ "$CREATE_ENV" = true ] && echo "✔ Create .env file" +else + echo "✖ No folder will be created" +fi + +echo +prompt "Proceed with these actions?" || { info "Operation cancelled."; return; } +clear + +### ======= Execute Actions ======= + +if [ "$DO_UPDATE" = true ]; then + info "Updating and upgrading..." + $SUDO apt update && $SUDO apt upgrade -y +else + info "Skipping system update and upgrade." +fi + +clear + +if [ "$DO_DOCKER" = true ]; then + info "Installing Docker..." + + $SUDO apt update + $SUDO apt install -y ca-certificates curl + + $SUDO install -m 0755 -d /etc/apt/keyrings + $SUDO curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc + $SUDO chmod a+r /etc/apt/keyrings/docker.asc + + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ + $(. /etc/os-release && echo \"$VERSION_CODENAME\") stable" | \ + $SUDO tee /etc/apt/sources.list.d/docker.list > /dev/null + + $SUDO apt update + $SUDO apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + + info "Docker installation complete." +else + info "Skipping Docker installation." +fi + +clear + +if [ -z "$SKIP_FOLDER" ]; then + if [ "$USE_HOSTNAME" = true ]; then + FOLDER_NAME=$(hostname) + else + FOLDER_NAME="$CUSTOM_DIR" + fi + + mkdir -p "$FOLDER_NAME" + cd "$FOLDER_NAME" || exit + info "Now inside folder: $FOLDER_NAME" + + if [ "$CREATE_COMPOSE" = true ]; then + touch compose.yaml + info "compose.yaml created." + fi + + if [ "$CREATE_ENV" = true ]; then + touch .env + info ".env file created." + fi +else + info "No folder created or entered." +fi + +clear + +info "Script completed." + +rm -f ~/docker-debian.sh && echo -e "\n${BOLD}${GREEN}>>> Script file 'docker-debian.sh' in your home directory has been deleted.${RESET}\n"