192 lines
5.7 KiB
Bash
Executable File
192 lines
5.7 KiB
Bash
Executable File
#!/bin/bash
|
||
############################################################
|
||
# Decription: Script to manage stack docker
|
||
#
|
||
# Author: Gilles Mouchet (gilles.mouchet@gmail.com)
|
||
# Creation Date: 12-06-2025
|
||
# Version: 1.0
|
||
# Usage: ./manage.sh
|
||
# Changelog:
|
||
# V1.0 - dd-Mmm-2025 - GMo
|
||
# Added
|
||
# - Creation of script from scratch
|
||
#
|
||
############################################################
|
||
|
||
#-----------------------------------------------------------------
|
||
# Doesn't change anything from here
|
||
#-----------------------------------------------------------------
|
||
version="1.0-rc1"
|
||
|
||
prog_name="./$(/bin/basename $0)"
|
||
|
||
containers_to_start=(init minio minio-cli grafana loki promtail prometheus node-exporter proxy)
|
||
containers_all=("${containers_to_start[@]}" log-generator dns-tools)
|
||
|
||
# Couleurs
|
||
VERT="\e[32m"
|
||
ROUGE="\e[31m"
|
||
NORMAL="\e[0m"
|
||
#-----------------------------------------------------------------
|
||
# Functions
|
||
#-----------------------------------------------------------------
|
||
# display help
|
||
function print_usage {
|
||
/bin/cat << EOF
|
||
|
||
Usage: $prog_name [options]
|
||
|
||
Options:
|
||
config Create folder for persit. vol. and copy conf files
|
||
param Display all vars defined in .env file
|
||
list Display container (servie) list define in docker compose file
|
||
create Create container
|
||
start Start stack '${COMPOSE_PROJECT_NAME}'
|
||
stop Stop stack '${COMPOSE_PROJECT_NAME}'
|
||
down Stop stack '${COMPOSE_PROJECT_NAME}' and delete containers
|
||
restart Restart stack '${COMPOSE_PROJECT_NAME}'
|
||
version,-v,--version Display script version
|
||
help,-h,--help Display this help
|
||
|
||
Examples:
|
||
To start stack '${COMPOSE_PROJECT_NAME}'
|
||
$prog_name start
|
||
To stop stack '${COMPOSE_PROJECT_NAME}'
|
||
$prog_name stop
|
||
To start a specific container and his depend
|
||
docker compose up <container_name> -d
|
||
Ex:
|
||
docker compose up minio-cli -d
|
||
To create a new stack
|
||
$prog_name config
|
||
$prog_name create
|
||
$prog_name start
|
||
EOF
|
||
}
|
||
# create all containers
|
||
function create_container {
|
||
|
||
for cont_item in "${containers_all[@]}"; do
|
||
# check if container exist. If not create it
|
||
if [ $(docker ps -a | grep ${COMPOSE_PROJECT_NAME}-$cont_item | wc -l) -eq 0 ]; then
|
||
echo -n "Create container $cont_item: "
|
||
if docker compose create $cont_item > /dev/null 2>&1; then
|
||
echo -e "${VERT}SUCCESS${NORMAL}"
|
||
else
|
||
echo -e "${ROUGE}ERROR${NORMAL}"
|
||
fi
|
||
else
|
||
echo "Container $cont_item already exist"
|
||
fi
|
||
done
|
||
}
|
||
# start container
|
||
function start_container {
|
||
for cont_item in "${containers_to_start[@]}"; do
|
||
echo -n "Start container $cont_item: "
|
||
if docker compose up -d $cont_item > /dev/null 2>&1; then
|
||
echo -e "${VERT}SUCCESS${NORMAL}"
|
||
else
|
||
echo -e "${ROUGE}ERROR${NORMAL}"
|
||
fi
|
||
done
|
||
}
|
||
|
||
#-----------------------------------------------------------------
|
||
# MAIN
|
||
#-----------------------------------------------------------------
|
||
|
||
# read .env if exist
|
||
if [ ! -f .env ]; then
|
||
echo "file '.env' doesn't exist!"
|
||
echo "See README.md"
|
||
exit
|
||
fi
|
||
. .env
|
||
|
||
#if [ ! -z "$1" ]; then
|
||
#print_usage
|
||
# exit 0
|
||
#fi
|
||
|
||
case "$1" in
|
||
config)
|
||
echo "Create folder for persistent volume"
|
||
sudo mkdir -p ${PRX_CERTS_DIR}
|
||
sudo mkdir -p ${PRX_NGINX_CONF_DIR}
|
||
sudo mkdir -p ${MINIO_DATA_ROOT_DIR}
|
||
sudo mkdir -p ${MINIO_CONF_CLI_DIR}
|
||
sudo mkdir -p ${GF_DATA_DIR}
|
||
sudo mkdir -p ${PROM_CONF_DIR}
|
||
sudo mkdir -p ${PROM_DATA_DIR}
|
||
sudo mkdir -p ${LOKI_CONF_DIR}
|
||
sudo mkdir -p ${LOKI_DATA_DIR}
|
||
sudo mkdir -p ${LOKI_GEN_LOG_DIR}
|
||
sudo mkdir -p ${PROMTAIL_CONF_DIR}
|
||
echo "Copy configs files"
|
||
sudo cp ./config/nginx/default.conf ${PRX_NGINX_CONF_DIR}/.
|
||
sudo cp ./config/prometheus/prometheus.yml ${PROM_CONF_DIR}/.
|
||
sudo cp ./config/loki/local-config.yaml ${LOKI_CONF_DIR}/.
|
||
sudo cp ./config/promtail/config.yml ${PROMTAIL_CONF_DIR}/.
|
||
;;
|
||
param)
|
||
cat << EOF
|
||
COMPOSE_PROJECT_NAME = ${COMPOSE_PROJECT_NAME}
|
||
PRX_CERTS_DIR = ${PRX_CERTS_DIR}
|
||
PRX_NGINX_CONF_DIR = ${PRX_NGINX_CONF_DIR}
|
||
MINIO_DATA_ROOT_DIR = ${MINIO_DATA_ROOT_DIR}
|
||
MINIO_CONF_CLI_DIR = ${MINIO_CONF_CLI_DIR}
|
||
MINIO_ACCESS_KEY = ${MINIO_ACCESS_KEY}
|
||
MINIO_SECRET_KEY = ${MINIO_SECRET_KEY}
|
||
MINIO_REDIRECT_URL = ${MINIO_REDIRECT_URL}
|
||
GF_ADMIN_USER = ${GF_ADMIN_USER}
|
||
GF_ADMIN_PASS = ${GF_ADMIN_PASS}
|
||
GF_DATA_DIR = ${GF_DATA_DIR}
|
||
GF_ROOT_URL = ${GF_ROOT_URL}
|
||
PROM_CONF_DIR = ${PROM_CONF_DIR}
|
||
PROM_DATA_DIR = ${PROM_DATA_DIR}
|
||
LOKI_CONF_DIR = ${LOKI_CONF_DIR}
|
||
LOKI_DATA_DIR = ${LOKI_DATA_DIR}
|
||
LOKI_GEN_LOG_DIR = ${LOKI_GEN_LOG_DIR}
|
||
PROMTAIL_CONF_DIR = ${PROMTAIL_CONF_DIR}
|
||
EOF
|
||
;;
|
||
create)
|
||
create_container
|
||
;;
|
||
start)
|
||
create_container
|
||
start_container
|
||
;;
|
||
stop)
|
||
docker compose stop
|
||
;;
|
||
down)
|
||
docker compose down
|
||
;;
|
||
list)
|
||
echo "-------------------------------------"
|
||
echo " Container list"
|
||
echo "-------------------------------------"
|
||
docker compose config --services | sort
|
||
#for cont_item in "${containers_all[@]}"; do
|
||
# echo "- $cont_item"
|
||
#done
|
||
;;
|
||
-h|--help|help)
|
||
print_usage
|
||
exit 0
|
||
;;
|
||
-v|--version|version)
|
||
cat << EOF
|
||
$(basename "$0") v$version (c) 1990 - $(date +%Y) by Gilles Mouchet
|
||
Non-Commercial Use License – See LICENSE for details
|
||
EOF
|
||
exit 0
|
||
;;
|
||
*)
|
||
print_usage
|
||
exit 0
|
||
;;
|
||
esac
|