ninedocker/nine.sh

387 lines
13 KiB
Bash
Raw Normal View History

2024-07-04 12:42:13 +02:00
#!/bin/bash
#1 : action = default up
#2 : service = optionnel
2024-07-24 16:11:40 +02:00
# Include bibliotheque de fonction
. ./misc/tools/e-ihm.sh
# Include variable d'environnement global
mergeenv env/.env.merge env/.env env/.env.local
. env/.env.merge
# Construction du docker-compose
echo "services:" > docker-compose.yml
# Include service
declare -A services
for dir in $(ls -d "services"/[0-9][0-9]-* | sort); do
# Include bibliotheque de fonction
if [ -f "$dir/misc/nine.sh" ]; then
. $dir/misc/nine.sh
fi
2024-07-04 12:42:13 +02:00
2024-07-24 16:11:40 +02:00
# Include variable d'environnement global
if [ -f "$dir/env/.env" ]; then
. $dir/env/.env
fi
2024-07-04 12:42:13 +02:00
2024-07-24 16:11:40 +02:00
# Include variable d'environnement local
if [ -f "$dir/env/.env.local" ]; then
. $dir/env/.env.local
fi
2024-07-04 12:42:13 +02:00
2024-07-24 16:11:40 +02:00
# Construction du docker-compose
if [ -f "$dir/dockercompose/dockercompose.yml" ]; then
cat "$dir/dockercompose/dockercompose.yml" >> docker-compose.yml
2024-07-04 12:42:13 +02:00
fi
2024-07-24 16:11:40 +02:00
# Construction .env.merge
mergeenv $dir/env/.env.merge env/.env.merge $dir/env/.env $dir/env/.env.local
2024-07-04 12:42:13 +02:00
2024-07-24 16:11:40 +02:00
# Sauvegarder le service
key="${dir##*-}"
value="${dir##*/}"
services["$key"]="$value"
done
2024-07-04 12:42:13 +02:00
2024-07-24 16:11:40 +02:00
# Construction du docker-compose
echo "networks:" >> docker-compose.yml
echo " nine-network:" >> docker-compose.yml
echo " name: nine-network" >> docker-compose.yml
2024-07-04 12:42:13 +02:00
2024-07-24 16:11:40 +02:00
# Start script
BigTitle "NINE"
2024-07-04 12:42:13 +02:00
#===========================================================================================================================================
#== STOP ===================================================================================================================================
#===========================================================================================================================================
#1 = service to stop if null all service
#2 = stopper par destroyall
stop() {
if [[ "$2" != 1 ]]; then Title "STOP"; fi
2024-07-24 16:11:40 +02:00
echo "docker-compose stop $1"
2024-07-05 23:01:17 +02:00
docker-compose stop $1
2024-07-24 16:11:40 +02:00
if [[ "$2" != 1 ]]; then echo; fi
2024-07-04 12:42:13 +02:00
}
#===========================================================================================================================================
#== UPSERVICE ==============================================================================================================================
#===========================================================================================================================================
#1 = service to up
wait_for_container() {
container_id="nine-$1"
2024-07-05 23:01:17 +02:00
container_name="$(docker inspect "${container_id}" --format '{{ .Name }}')"
2024-07-04 12:42:13 +02:00
waiting_done="false"
while [[ "${waiting_done}" != "true" ]]; do
2024-07-05 23:01:17 +02:00
container_state="$(docker inspect "${container_id}" --format '{{ .State.Status }}')"
2024-07-04 12:42:13 +02:00
if [[ "${container_state}" == "running" ]]; then
2024-07-05 23:01:17 +02:00
health_status="$(docker inspect "${container_id}" --format '{{ .State.Health.Status }}')"
2024-07-04 12:42:13 +02:00
if [[ ${health_status} == "healthy" ]]; then
waiting_done="true"
fi
else
waiting_done="true"
fi
sleep 1;
done;
}
upservice(){
2024-07-24 16:11:40 +02:00
docker-compose up -d $1 --remove-orphans
2024-07-04 12:42:13 +02:00
if [[ $2 == "wait" ]]
then
wait_for_container $1
fi
}
function upkeycloak {
if [[ $CAS_ACTIVATE == 1 && $CAS_LOCAL == 1 ]]
then
Title ${KEYCLOAK_SERVICE_NAME^^}
# CREATE BDD
if [[ $MARIADB_ACTIVATE == 1 && $MARIADB_LOCAL == 1 ]]
then
EchoVert "DATABASE"
Echo ${KEYCLOAK_SERVICE_NAME^^}
2024-07-05 23:01:17 +02:00
docker-compose exec $MARIADB_SERVICE_NAME /nine/init.sh $KEYCLOAK_SERVICE_NAME
2024-07-04 12:42:13 +02:00
Echo
fi
EchoVert "CONTAINER"
upservice $KEYCLOAK_SERVICE_NAME
Echo
fi
}
2024-07-24 16:11:40 +02:00
function updokuwiki {
if [[ $DOKUWIKI_ACTIVATE == 1 && $DOKUWIKI_LOCAL == 1 ]]
then
Title ${DOKUWIKI_SERVICE_NAME^^}
EchoVert "CONTAINER"
upservice ${DOKUWIKI_SERVICE_NAME}
Echo
fi
}
2024-07-19 14:34:55 +02:00
function upnextcloud {
if [[ $NEXTCLOUD_ACTIVATE == 1 && $NEXTCLOUD_LOCAL == 1 ]]
2024-07-04 12:42:13 +02:00
then
2024-07-19 14:34:55 +02:00
Title ${NEXTCLOUD_SERVICE_NAME^^}
2024-07-04 12:42:13 +02:00
if [[ $MARIADB_ACTIVATE == 1 && $MARIADB_LOCAL == 1 ]]
then
EchoVert "DATABASE"
2024-07-19 14:34:55 +02:00
Echo ${NEXTCLOUD_SERVICE_NAME^^}
2024-07-04 12:42:13 +02:00
Echo
2024-07-19 14:34:55 +02:00
docker-compose exec $MARIADB_SERVICE_NAME /nine/init.sh $NEXTCLOUD_SERVICE_NAME
2024-07-04 12:42:13 +02:00
fi
EchoVert "CONTAINER"
2024-07-19 14:34:55 +02:00
upservice ${NEXTCLOUD_SERVICE_NAME}
2024-07-04 12:42:13 +02:00
Echo
2024-07-19 14:34:55 +02:00
fi
2024-07-04 12:42:13 +02:00
}
function upnineboard {
if [[ $NINEBOARD_ACTIVATE == 1 && $NINEBOARD_LOCAL == 1 ]]
then
Title ${NINEBOARD_SERVICE_NAME^^}
if [[ $MARIADB_ACTIVATE == 1 && $MARIADB_LOCAL == 1 ]]
then
EchoVert "DATABASE"
Echo ${NINEBOARD_SERVICE_NAME^^}
2024-07-05 23:01:17 +02:00
docker-compose exec $MARIADB_SERVICE_NAME /nine/init.sh $NINEBOARD_SERVICE_NAME
2024-07-04 12:42:13 +02:00
Echo
fi
EchoVert "CONTAINER"
upservice ${NINEBOARD_SERVICE_NAME}
chmod -R a+wr ./volume/nineboard/data
Echo
fi
}
2024-07-24 16:11:40 +02:00
function upnineskeletor {
if [[ $NINESKELETOR_ACTIVATE == 1 && $NINESKELETOR_LOCAL == 1 ]]
2024-07-19 14:34:55 +02:00
then
2024-07-24 16:11:40 +02:00
Title ${NINESKELETOR_SERVICE_NAME^^}
2024-07-04 12:42:13 +02:00
if [[ $MARIADB_ACTIVATE == 1 && $MARIADB_LOCAL == 1 ]]
then
EchoVert "DATABASE"
2024-07-24 16:11:40 +02:00
Echo ${NINESKELETOR_SERVICE_NAME^^}
docker-compose exec $MARIADB_SERVICE_NAME /nine/init.sh $NINESKELETOR_SERVICE_NAME
2024-07-04 12:42:13 +02:00
Echo
2024-07-24 16:11:40 +02:00
fi
2024-07-04 12:42:13 +02:00
EchoVert "CONTAINER"
2024-07-24 16:11:40 +02:00
upservice ${NINESKELETOR_SERVICE_NAME}
chmod -R a+wr ./volume/nineskeletor/data
2024-07-04 12:42:13 +02:00
Echo
fi
}
#===========================================================================================================================================
#== UP =====================================================================================================================================
#===========================================================================================================================================
#1 = service to up if null all service
up(){
# Stop du ou des services
stop $1
# SERVICES
if [[ -z "$1" ]]
then
2024-07-24 16:11:40 +02:00
# Pour chaque répertoire service on execute sa fonction up
for key in $(for k in "${!services[@]}"; do echo "$k:${services[$k]}"; done | sort -t: -k2,2 | cut -d: -f1); do
up${key}
done
2024-07-04 12:42:13 +02:00
else
up${1}
fi
}
#===========================================================================================================================================
#== DESTROY ================================================================================================================================
#===========================================================================================================================================
destroyall(){
Question_ouinon "Souhaitez-vous supprimer l'ensemble des containers : Attention cela supprimera vraiment tout ?"
if [[ "$?" = 0 ]]
then
2024-07-24 16:11:40 +02:00
# Pour chaque répertoire service on execute sa fonction destroy
# On part du dernier service vers le premiser
for key in $(for k in "${!services[@]}"; do echo "$k:${services[$k]}"; done | sort -t: -k2,2r | cut -d: -f1); do
destroy${key} 1
done
2024-07-04 12:42:13 +02:00
fi
}
#===========================================================================================================================================
#== DESTROY ================================================================================================================================
#===========================================================================================================================================
#1 = service to destroy
#2 = ne pas poser de questions
2024-07-24 16:11:40 +02:00
#destroy(){
# Title "DESTROY "${1^^}
#
# stop $1 1
# docker-compose rm -s -v -f "$1"
#
#
# if [[ "$1" == "$OPENLDAP_SERVICE_NAME" && $LDAP_ACTIVATE == 1 && $LDAP_LOCAL == 1 ]]
# then
# if [[ -z $2 ]]; then Question_ouinon "Souhaitez-vous supprimer l'annuaire associé à $1 ?";fi
# if [[ "$?" = 0 || -z $2 ]]
# then
# EchoRouge Suppression
# sudo rm -rf volume/openldap/data
# fi
# fi
#
# if [[ "$1" == "$KEYCLOAK_SERVICE_NAME" && $CAS_ACTIVATE == 1 && $CAS_LOCAL == 1 ]]
# then
# if [[ -z $2 ]]; then Question_ouinon "Souhaitez-vous supprimer la BDD associé à $1 ?";fi
# if [[ "$?" = 0 || -z $2 ]]
# then
# docker-compose exec $MARIADB_SERVICE_NAME /nine/delete.sh $KEYCLOAK_SERVICE_NAME
# fi
# fi
#
# if [[ "$1" == "$DOKUWIKI_SERVICE_NAME" && $DOKUWIKI_ACTIVATE == 1 && $DOKUWIKI_LOCAL == 1 ]]
# then
# if [[ -z $2 ]]; then Question_ouinon "Souhaitez-vous supprimer la BDD associé à $1 ?";fi
# if [[ "$?" = 0 || -z $2 ]]
# then
# docker-compose exec $MARIADB_SERVICE_NAME /nine/delete.sh $DOKUWIKI_SERVICE_NAME
# sudo rm -rf volume/dokuwiki/data
# fi
# fi
#
# if [[ "$1" == "$NEXTCLOUD_SERVICE_NAME" && $NEXTCLOUD_ACTIVATE == 1 && $NEXTCLOUD_LOCAL == 1 ]]
# then
# if [[ -z $2 ]]; then Question_ouinon "Souhaitez-vous supprimer la BDD associé à $1 ainsi que les fichiers utilisateurs ?";fi
# if [[ "$?" = 0 || -z $2 ]]
# then
# docker-compose exec $MARIADB_SERVICE_NAME /nine/delete.sh $NEXTCLOUD_SERVICE_NAME
# sudo rm -rf volume/nextcloud/data
# sudo rm -rf volume/nextcloud/html
# sudo rm -rf volume/nextcloud/app
# fi
# fi
#
# if [[ "$1" == "$NINEBOARD_SERVICE_NAME" && $NINEBOARD_ACTIVATE == 1 && $NINEBOARD_LOCAL == 1 ]]
# then
# if [[ -z $2 ]]; then Question_ouinon "Souhaitez-vous supprimer la BDD associé à $1 ?";fi
# if [[ "$?" = 0 || -z $2 ]]
# then
# docker-compose exec $MARIADB_SERVICE_NAME /nine/delete.sh $NINEBOARD_SERVICE_NAME
# fi
# fi
#
# if [[ "$1" == "$NINESKELETOR_SERVICE_NAME" && $NINESKELETOR_ACTIVATE == 1 && $NINESKELETOR_LOCAL == 1 ]]
# then
# if [[ -z $2 ]]; then Question_ouinon "Souhaitez-vous supprimer la BDD associé à $1 ?";fi
# if [[ "$?" = 0 || -z $2 ]]
# then
# docker-compose exec $MARIADB_SERVICE_NAME /nine/delete.sh $NINESKELETOR_SERVICE_NAME
# fi
# fi
#
# if [[ "$1" == "$WORDPRESS_SERVICE_NAME" && $WORDPRESS_ACTIVATE == 1 && $WORDPRESS_LOCAL == 1 ]]
# then
# if [[ -z $2 ]]; then Question_ouinon "Souhaitez-vous supprimer la BDD associé à $1 ?";fi
# if [[ "$?" = 0 || -z $2 ]]
# then
# docker-compose exec $MARIADB_SERVICE_NAME /nine/delete.sh $WORDPRESS_SERVICE_NAME
# sudo rm -rf volume/wordpress/data
# fi
# fi
#}
#
2024-07-04 12:42:13 +02:00
#===========================================================================================================================================
#== MAIN ===================================================================================================================================
#===========================================================================================================================================
if [[ $1 == "up" || $1 == "" ]]
then
up $2
2024-07-24 16:11:40 +02:00
elif [[ $1 == "uplogs" || $1 == "" ]]
then
up $2
docker-compose logs -f $2
2024-07-04 12:42:13 +02:00
elif [[ $1 == "stop" ]]
then
stop $2
elif [[ $1 == "bash" ]]
then
if [[ -z $2 ]]
then
EchoRouge "Vous devez precisez un service"
EchoRouge "nine.sh bash monservice"
else
2024-07-05 23:01:17 +02:00
docker-compose exec $2 "/bin/bash"
2024-07-04 12:42:13 +02:00
fi
elif [[ $1 == "destroyall" ]]
then
destroyall
elif [[ $1 == "destroy" ]]
then
if [[ -z $2 ]]
then
EchoRouge "Vous devez precisez un service"
EchoRouge "nine.sh destroy monservice"
else
2024-07-24 16:11:40 +02:00
destroy$2
2024-07-04 12:42:13 +02:00
fi
elif [[ $1 == "logs" ]]
then
2024-07-05 23:01:17 +02:00
docker-compose logs -f $2
2024-07-04 12:42:13 +02:00
elif [[ $1 == "iswait" ]]
then
wait_for_container $2
elif [[ $1 == "regen" ]]
then
if [[ -z $2 ]]
then
destroyall
up
else
2024-07-24 16:11:40 +02:00
destroy$2
up$2
2024-07-04 12:42:13 +02:00
fi
else
EchoRouge "Action possible ="
EchoRouge "nine.sh > UP de l'ensemble des services actifs"
EchoRouge "nine.sh up > UP de l'ensemble des services actifs"
EchoRouge "nine.sh up monservice> UP de monservice"
2024-07-24 16:11:40 +02:00
EchoRouge "nine.sh uplogs > UP puis logs de l'ensemble des services actifs"
EchoRouge "nine.sh uplogs monservice> UP puis logs de monservice"
2024-07-04 12:42:13 +02:00
EchoRouge "nine.sh stop > STOP de l'ensemble des services"
EchoRouge "nine.sh stop monservice> STOP de monservice"
EchoRouge "nine.sh bash monservice> lance un terminel dans le conteneur de monservice"
EchoRouge "nine.sh destroyall> détruit l'ensemble des services avec l'ensemble des BDD et des volumes persistant"
EchoRouge "nine.sh destroy monservice> détruit monservices et si souhaitez sa BDD et ses volumes persistant"
EchoRouge "nine.sh logs > LOGS de l'ensemble des services"
EchoRouge "nine.sh logs monservice > LOGS de monservice"
EchoRouge "nine.sh iswait monservice > monservice est-il en cours de construction"
EchoRouge "nine.sh regen > lance destroyall puis up sur l'ensemble des service"
EchoRouge "nine.sh regen monservice > lance destroy monservice puis up monservice"
fi
echo
echo