jean-cloud-services/provisioning/roles/deploy_all/files/bin/deploy_service.sh
2023-12-20 18:06:09 +01:00

170 lines
4.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
. driglibash-base
. /etc/jeancloud.env
[ ! -f /data/mounted ] && die "/data is not mounted"
noreload=false
deploy=true
service=
if [ "$#" -ge 2 ] && [ "$2" = noreload ] ; then
noreload=true
fi
if [ "$#" -ge 3 ] && [ "$3" = undeploy ] ; then
deploy=false
fi
# die "Usage: $0 <service> [no]reload [un]deploy"
if [ -d "/docker/$1" ] ; then
service="$1"
elif [ -d "$1" ] && [[ "$1" = /docker/* ]] ; then
service="$(basename "$1")"
else
die "/docker/$service not found"
fi
if [ ! -d "$new_nginx_conf_path" ] ; then
die "Cant deploy service in degraded state. $new_nginx_conf_path dir is missing, please run deployall.sh first"
fi
IFS=';' read uid username _ server < <(grep ";$service;" /docker/services.csv)
docker_service="$(echo "$service" | tr '.' '_')"
driglibash_section_prefix="[$service] "
section "---------- Start -------------"
cd "/docker/$service"
# Source and export env file
[ -f .env ] && set -a && . .env && set +a
###############################################################################
# Useful directories
###############################################################################
if "$deploy" ; then
run mkdir -p "$DATA_DIR" "$HTTP_DIR"
# Try running podman as non-root first…
run chown $uid:www-data -R "$HTTP_DIR"
else
[ -d "$HTTP_DIR" ] && rm -r "$HTTP_DIR"
fi
###############################################################################
# Run scripts
###############################################################################
# Did deploy failed
returncode=0
if "$deploy" ; then
if [ -x deploy.sh ] ; then
run ./deploy.sh
[ "$?" -ne 0 ] && echo "Erreur deploy.sh" && returncode=1
fi
if [ -x deploy_user.sh ] ; then
deploy_as "$service"
[ "$?" -ne 0 ] && echo "Erreur deploy_user.sh" && returncode=1
fi
else
[ -x undeploy.sh ] && run ./undeploy.sh
fi
###############################################################################
# Docker containers
###############################################################################
# If there is a docker-compose file and it has services in it
if [ -f "/docker/$service/docker-compose.yml" ] && [ -n "$(grep '^[^#]*services' "/docker/$service/docker-compose.yml")" ] ; then
if $deploy ; then
section "Logging to registry"
# XXX Login to docker registry
section "Pulling images"
docker-compose pull
if [ "$?" -ne 0 ] ; then
echo "PULL FAILED"
fi
section "Starting service"
run docker-compose up -d --remove-orphans
[ "$?" -ne 0 ] && echo "Erreur docker compose" && returncode=1
else
section "Removing containers"
run docker-compose down --rmi all --remove-orphans
fi
fi
if ! "$deploy" ; then
section "Remove stray containers"
while read container ; do
[ -z "$container" ] && continue || true
echo "Removing $container"
run docker rm "$container"
done <<< "$(docker ps | grep "$docker_service" | cut -d ' ' -f 1)"
fi
###############################################################################
# wireguard interface
###############################################################################
# If there is a wireguard vpn script
for file in $( find "/docker/$service" -name "wg-*.sh") ; do
section "Managing wg interface $(basename "$file")"
if [ -x "$file" ] ; then
wgif="$(basename "$file")"
wgif="${wgif:3:-3}"
"$file" $wgif > "/etc/wireguard/$wgif.conf"
if "$deploy" ; then
run systemctl enable "wg-quick@$wgif"
run startwg.sh "$wgif"
[ "$?" -ne 0 ] && echo "Erreur wireguard" && returncode=1
else
if [ -z "$(ip a | grep "$wgif")" ] ; then
run wg-quick down "$wgif"
fi
fi
fi
done
###############################################################################
# Nginx conf
###############################################################################
# If there is a nginx conf file
if [ -f "/docker/$service/nginx_server.conf" ] ; then
section "Copy nginx conf"
run cp "/docker/$service/nginx_server.conf" "$new_nginx_conf_path/$service"
section "Template nginx conf with vars from '.env' file"
run template.sh "/docker/$service/.env" < "/docker/$service/nginx_server.conf" > "$new_nginx_conf_path/$service"
fi
section "Testing nginx conf"
run nginx -t -c /etc/nginx/new_nginx.conf
[ "$?" -ne 0 ] && echo "Erreur nginx" && returncode=1
if [ "$noreload" == false ] ; then
run restart_nginx.sh
fi
section "Cleaning"
if [ -z "$(ls -A "$DATA_DIR")" ] ; then
run rmdir "$DATA_DIR"
fi
if [ -z "$(ls -A "$HTTP_DIR")" ] ; then
run rmdir "$HTTP_DIR"
fi
clean
exit "$returncode"