Ubuntu 20.04 Server Initialization Script includes Docker & Docker Compose Installation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
set -Eeuo pipefail | |
trap cleanup SIGINT SIGTERM ERR EXIT | |
script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P) | |
DOCKER_COMPOSE_VERSION=v2.6.0 | |
usage() { | |
cat <<EOF | |
Usage: $(basename "${BASH_SOURCE[0]}") [-h] [-v] [-d] -u user | |
This initializtion scrip creates a user with the given user name and installs docker and docker-compose if docker param passed. | |
Available options: | |
-h, --help Print this help and exit | |
-v, --verbose Print script debug info | |
-d, --docker Enable docker & docker-compose installation | |
-u, --user Name of the user to be created | |
EOF | |
exit | |
} | |
cleanup() { | |
trap - SIGINT SIGTERM ERR EXIT | |
# script cleanup here | |
} | |
setup_colors() { | |
if [[ -t 2 ]] && [[ -z "${NO_COLOR-}" ]] && [[ "${TERM-}" != "dumb" ]]; then | |
NOFORMAT='\033[0m' RED='\033[0;31m' GREEN='\033[0;32m' ORANGE='\033[0;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' YELLOW='\033[1;33m' | |
else | |
NOFORMAT='' RED='' GREEN='' ORANGE='' BLUE='' PURPLE='' CYAN='' YELLOW='' | |
fi | |
} | |
msg() { | |
echo >&2 -e "${1-}" | |
} | |
die() { | |
local msg=$1 | |
local code=${2-1} # default exit status 1 | |
msg "$msg" | |
exit "$code" | |
} | |
parse_params() { | |
# default values of variables set from params | |
docker=0 | |
while :; do | |
case "${1-}" in | |
-h | --help) usage ;; | |
-v | --verbose) set -x ;; | |
--no-color) NO_COLOR=1 ;; | |
-d | --docker) docker=1 ;; # example flag | |
-u | --user) # example named parameter | |
user="${2-}" | |
shift | |
;; | |
-?*) die "Unknown option: $1" ;; | |
*) break ;; | |
esac | |
shift | |
done | |
args=("$@") | |
# check required params and arguments | |
[[ -z "${user-}" ]] && die "Missing required parameter: user" | |
return 0 | |
} | |
init(){ | |
msg "${GREEN}[+] APT Updates and upgrades: ${user}${NOFORMAT}" | |
# update and upgrade | |
apt update | |
apt upgrade -y | |
} | |
create_user() { | |
msg "${GREEN}[+] Creating new user: ${user}${NOFORMAT}" | |
# create a new user and give sudo rights | |
# generate a random password | |
RANDOM_PASSWORD=$(date +%s | sha256sum | base64 | head -c 32 | cut -c 1-16) | |
useradd -m --password $(perl -e 'print crypt($ARGV[0], "password")' ${RANDOM_PASSWORD}) --shell /bin/bash ${user} | |
# add user to sudo group | |
msg "${GREEN}[+] Adding ${user} to sudo group.${NOFORMAT}" | |
usermod -aG sudo ${user} | |
# sync .ssh folders with root user | |
msg "${GREEN}[+] Copying root user's .ssh folder to new user's home${NOFORMAT}" | |
rsync --archive --chown=${user}:${user} ~/.ssh /home/${user} | |
} | |
install_docker () { | |
# install docker | |
msg "${GREEN}[+] Installing docker${NOFORMAT}" | |
apt install apt-transport-https ca-certificates curl software-properties-common -y | |
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - | |
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" | |
apt update | |
apt install docker-ce -y | |
msg "${GREEN}[+] Adding ${user} to docker group.${NOFORMAT}" | |
usermod -aG docker ${user} | |
# install docker-compose | |
msg "${GREEN}[+] Installing docker-compose${NOFORMAT}" | |
curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose | |
chmod +x /usr/local/bin/docker-compose | |
} | |
install_useful_packages() { | |
# install useful packages | |
msg "${GREEN}[+] Installing useful packages${NOFORMAT}" | |
apt install curl wget unzip htop net-tools git tree -y | |
} | |
parse_params "$@" | |
setup_colors | |
# Running script logic | |
# update and upgrade packages | |
init | |
# create sudo privileged user | |
create_user | |
# install docker and docker-compose if enabled | |
if [[ $docker -eq 1 ]] | |
then | |
install_docker | |
else | |
msg "${BLUE}[-] Skipping docker installation.${NOFORMAT}" | |
fi | |
install_useful_packages | |
msg "${GREEN}[+]Username: $user${NOFORMAT}" | |
msg "${RED}[!]Password: $RANDOM_PASSWORD${NOFORMAT}" | |
msg "${RED}[!] Keep it secret!${NOFORMAT}" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment