Added base directories, configs, and script

This commit is contained in:
Allen
2023-07-27 18:05:35 -05:00
commit e2006ff020
8 changed files with 373 additions and 0 deletions

299
data/docker/compose/manage Executable file
View File

@ -0,0 +1,299 @@
#!/bin/bash
# Note: all up scripts use set -a to export all variables created, set +a can be used to then turn off this effect
trap exiting EXIT #Print done when program exits
export VARIABLES_DIR=${PWD%/*}/variables/compose
source $VARIABLES_DIR
source $PATH_VARS_DIR
export RUN_PULL_CONTAINER=N
export CREATE_VOLUME_DIR=N
export CREATE_VOLUME_DIR_ONLY=N
COMMAND=$1
CONTAINERS=""
BASE_DIR=$PWD
all () {
ALL=$(ls -d */ | sed 's/\/$//') #Using -d and */ to get just directories, sed removes the trailing backslash if there is one
} #This method only works for one worded variables as all spaces will split variables!
# If running comamnds, put all commands into an array
if [[ "$1" == "run" ]]; then
# PROGRAMS=$(echo "${@:3}" | tr ';' '\n')
mapfile -t PROGRAMS < <(echo "${@:3}" | tr ';' '\n') # This uses an array which allows for spaces!
fi
# If wanting to run the specified command under all containers, put all containers in a list, otherwise use user specified
if [[ "$2" == "ALL" ]]; then
all
CONTAINERS=$ALL
else
CONTAINERS=$(echo "$2" | tr '|' '\n') #This method only works for one worded variables as all spaces will split variables!
fi
# Pull if run or restart has the -P or --pull option as the 3rd arg or later (shouldn't be before 3rd)
if [[ "$1" == "up" || "$1" == "restart" ]]; then
for arg in "${@:3}"
do
if [[ "$arg" == "-P" || "$arg" == "--pull" ]]; then
RUN_PULL_CONTAINER=Y
fi
done
fi
# if -V or --volume is passed, create a volume directory along with a compose directory for the service being created
if [[ "$1" == "create" ]]; then
for arg in "${@:3}"
do
if [[ "$arg" == "-V" || "$arg" == "--volume" ]]; then
CREATE_VOLUME_DIR=Y
fi
if [[ "$arg" == "--volume-only" ]]; then
CREATE_VOLUME_DIR_ONLY=Y
CREATE_VOLUME_DIR=Y
fi
done
fi
process () {
if [[ -z "$1" ]]; then # There will be a trailing empty command in the array
return;
fi
exe="${1/\[CONTAINER\]/"$2"}"
#exe=$(echo "$1" | sed "s/\[CONTAINER\]/$2/g") # This works too, but using shorter method instead
echo "Running under \"$2\":"
echo "* $exe *"
bash -c "$exe" # Actually must use bash -c, otherwises running something like echo hi > test.txt will print everything instead of echoing it
}
# might be completely redundant to have a separate function for each, but allows for overrides. Also having a restart script for more customizability as well as I cannot easily keep track of what processes are in background, so having a restart script will manage all that for each service
up () {
for container in $CONTAINERS; do
$PWD/$container/up &
done
}
down () {
for container in $CONTAINERS; do
$PWD/$container/down &
done
}
restart () {
for container in $CONTAINERS; do
$PWD/$container/restart &
done
}
run () {
for container in $CONTAINERS; do
cd $BASE_DIR
cd $container
# echo "before loop"
#for program in $PROGRAMS; do
# echo "before prog"
#echo "$program"
#PROGRAMS=$(echo "${@:3}" | tr ';' '\n')
#echo $PROGRAMS
echo "$container:"
for i in "${PROGRAMS[@]}"; do
process "$i" $container
done
# echo "after prog"
#done
# echo "after loop"
done
}
#manage-var() {
# VAR="PATH_VAR_$2"
# VAR=${!VAR}
# if [ -z "$VAR" ]
# then
# prt-var
# exit 0
# fi
# return $VAR
#}
ed-cmp () {
for container in $CONTAINERS; do
nano $PWD/$container/$3
done
}
ed-vol () {
for container in $CONTAINERS; do
nano $VOLUMES_DIR/$container/$3
done
}
ed-var () {
VAR="PATH_VAR_$2"
VAR=${!VAR}
if [ -z "$VAR" ]
then
prt-var
return 0
fi
nano $VAR$3
}
ls-cmp () {
for container in $CONTAINERS; do
ls -al $PWD/$container/$3
done
}
ls-vol () {
for container in $CONTAINERS; do
ls -al $VOLUMES_DIR/$container/$3
done
}
ls-var () {
VAR="PATH_VAR_$2"
VAR=${!VAR}
if [ -z "$VAR" ]
then
prt-var
return 0
fi
ls $VAR$3
}
prt-var () {
cat $PATH_VARS_DIR
}
create () {
for container in $CONTAINERS; do
if [[ ! -d "$container" && "$CREATE_VOLUME_DIR_ONLY" != "Y" ]]; then
mkdir $container
export SERVICE_NAME="$container"
envsubst '${SERVICE_NAME}' < /data/docker/default/compose/docker-compose.yml > $container/docker-compose.yml
cp $DEFAULT_DIR/compose/vars $container
cd $container
ln -s ../../default/compose/up .
ln -s ../../default/compose/restart .
ln -s ../../default/compose/down .
cd ..
sudo chown "$CREATE_OWNER:$CREATE_GROUP" $container -R
sudo chmod "$CREATE_PERMISSION" $container -R
sudo chmod +X $container
elif [[ "$CREATE_VOLUME_DIR_ONLY" != "Y" ]]; then
echo "Cannot create \"$container,\" it already exists."
fi
if [[ "$CREATE_VOLUME_DIR" == "Y" ]]; then
if [[ ! -d "$VOLUMES_DIR/$container" ]]; then
mkdir $VOLUMES_DIR/$container
sudo chown "$CREATE_OWNER:$CREATE_GROUP" $VOLUMES_DIR/$container
sudo chmod "$CREATE_PERMISSION" $VOLUMES_DIR/$container
sudo chmod +X $VOLUMES_DIR/$container
else
echo "Cannot create \"$container\" volume, it already exists."
fi
fi
done
}
help () {
echo Local Docker-Compose Manager
echo "Syntax: ./manage [command] [container] [additional parameters]"
echo "Container Paremeter:"
echo " * Single: <traefik>"
echo " * Multiple: <traefik|authelia|dashy>"
echo " * All: <ALL>"
echo "Command Parameter:"
echo " * Runs in the directory of the container's docker compose (one level deep from this manage script)"
echo " * Must be wrapped in quotes or escape semicolons to run multiple commands per container."
echo "Available Commands: command, parameters"
echo " up [container]"
echo " down [container] -P/--pull"
echo " restart [container] -P/--pull"
echo " run [container] [command]"
echo " ed-cmp [container] [extra path]"
echo " ed-vol [container] [extra path]"
echo " ed-var [container] [extra path]"
echo " ls-cmp [container] [extra path]"
echo " ls-vol [container] [extra path]"
echo " ls-var [container] [extra path]"
echo " prt-var [container]"
echo " create [container] -V/--volume --volume-only"
}
case $COMMAND in
up)
up
;;
down)
down
;;
restart)
restart
;;
run)
run "$@" #I originally just had this as $@, without quotes, which separated all of the variables and caused massive issues
;;
help)
help;;
--help)
help
;;
ed-cmp)
ed-cmp "$@"
;;
ed-vol)
ed-vol "$@"
;;
ed-var)
ed-var "$@"
;;
ls-cmp)
ls-cmp "$@"
;;
ls-vol)
ls-vol "$@"
;;
ls-var)
ls-var "$@"
;;
prt-var)
prt-var "$@"
;;
create)
create "$@"
;;
*)
echo "No such command '$COMMAND'"
help
;;
esac
exiting () {
echo "done"
}
wait #Wait for all background processes to end

View File

@ -0,0 +1,27 @@
version: '3'
services:
$SERVICE_NAME:
user: "${PUID}:${PGID}"
container_name: $SERVICE_NAME
restart: unless-stopped
image: USER/IMAGE:latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.$SERVICE_NAME.entryPoints=https"
- "traefik.http.routers.$SERVICE_NAME.rule=Host(`$SUBDOMAIN.$DEFAULT_DOMAIN`)"
- "traefik.http.routers.$SERVICE_NAME.tls=true"
- "traefik.http.routers.$SERVICE_NAME.service="
- "traefik.http.services.$SERVICE_NAME.loadbalancer.server.port=80"
- "traefik.docker.network=proxy"
- "traefik.http.routers.$SERVICE_NAME.middlewares=authelia@docker" # Authelia Auth Support
networks:
- proxy
volumes:
- /data/docker/volumes/$SERVICE_NAME/data:/data
environment:
- TZ=America/Chicago
networks:
proxy:
external: true

View File

@ -0,0 +1,4 @@
#!/bin/bash
CURRENT_PATH="$(dirname -- "${BASH_SOURCE[0]}")"
docker-compose -f $CURRENT_PATH/docker-compose.yml down

View File

@ -0,0 +1,12 @@
#!/bin/bash
set -a #exports all variables and sourced variables
CURRENT_PATH="$(dirname -- "${BASH_SOURCE[0]}")"
source $VARIABLES_DIR
source $CURRENT_PATH/vars
if [[ "$RUN_PULL_CONTAINER" == "Y" ]]; then
docker-compose -f $CURRENT_PATH/docker-compose.yml pull
fi
docker-compose -f $CURRENT_PATH/docker-compose.yml down
docker-compose -f $CURRENT_PATH/docker-compose.yml up -d

11
data/docker/default/compose/up Executable file
View File

@ -0,0 +1,11 @@
#!/bin/bash
set -a #exports all variables and sourced variables
CURRENT_PATH="$(dirname -- "${BASH_SOURCE[0]}")"
source $VARIABLES_DIR
source $CURRENT_PATH/vars
if [[ "$RUN_PULL_CONTAINER" == "Y" ]]; then
docker-compose -f $CURRENT_PATH/docker-compose.yml pull
fi
docker-compose -f $CURRENT_PATH/docker-compose.yml up -d

View File

@ -0,0 +1,5 @@
#!/usr/bin/env bash
PUID=0
PGID=1000
SUBDOMAIN=""

View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
VOLUMES_DIR=${PWD%/*}/volumes
DEFAULT_DOMAIN="bigalcubed.duckdns.org"
PATH_VARS_DIR=${PWD%/*}/variables/compose-path-vars
DEFAULT_DIR=${PWD%/*}/default
CREATE_OWNER="admin"
CREATE_GROUP="admin"
CREATE_PERMISSION="660"

View File

@ -0,0 +1,5 @@
#!/usr/bin/env bash
# Do not include "PATH_VAR_" in the manage command
PATH_VAR_auth="../volumes/authelia/config"
PATH_VAR_auth_conf="../volumes/authelia/config/configuration.yml"
PATH_VAR_auth_conf_users="../volumes/authelia/config/users_database.yml"