jean-cloud-services/provisioning/roles/deploy_all/files/bin/deploy_service.sh

155 lines
4.1 KiB
Bash
Raw Normal View History

2023-08-28 18:25:32 +00:00
#!/bin/bash
. driglibash-base
. /etc/jeancloud.env
set -euo pipefail
2023-09-15 08:57:47 +00:00
[ ! -f /data/mounted ] && die "/data is not mounted"
2023-08-28 18:25:32 +00:00
noreload=false
deploy=true
2023-09-16 18:17:34 +00:00
service=
2023-08-28 18:25:32 +00:00
if [ "$#" -ge 2 ] && [ "$2" = noreload ] ; then
noreload=true
2023-09-29 07:51:22 +00:00
fi
if [ "$#" -ge 3 ] && [ "$3" = undeploy ] ; then
2023-08-28 18:25:32 +00:00
deploy=false
fi
2023-09-29 07:51:22 +00:00
# die "Usage: $0 <service> [no]reload [un]deploy"
2023-08-28 18:25:32 +00:00
if [ -d "/docker/$1" ] ; then
service="$1"
2023-09-07 17:50:05 +00:00
elif [ -d "$1" ] && [[ "$1" = /docker/* ]] ; then
2023-08-28 18:25:32 +00:00
service="$(basename "$1")"
else
die "/docker/$service not found"
fi
if [ ! -d "$new_nginx_conf_path" ] ; then
2023-09-29 07:51:22 +00:00
die "Cant deploy service in degraded state. $new_nginx_conf_path dir is missing, please run deployall.sh first"
2023-08-28 18:25:32 +00:00
fi
docker_service="$(echo "$service" | tr '.' '_')"
driglibash_section_prefix="[$service] "
2023-09-07 17:50:05 +00:00
section "---------- Start -------------"
2023-08-28 18:25:32 +00:00
cd "/docker/$service"
2023-09-07 17:50:05 +00:00
# Source and export env file
[ -f .env ] && set -a && . .env && set +a
2023-08-28 18:25:32 +00:00
###############################################################################
# Useful directories
###############################################################################
if "$deploy" ; then
mkdir -p "$DATA_DIR" "$HTTP_DIR"
# Try running podman as non-root first…
chown www-data:www-data -R "$HTTP_DIR"
else
[ -d "$HTTP_DIR" ] && rm -r "$HTTP_DIR"
fi
###############################################################################
# Run scripts
###############################################################################
if "$deploy" ; then
2023-10-31 15:42:06 +00:00
[ -x deploy.sh ] && ./deploy.sh
2023-10-16 08:47:35 +00:00
[ -x deploy_http.sh ] && sudo -u www-data bash -c "set -a ; . '$DOCKER_DIR/.env' ; set +a ; . ./deploy_http.sh"
2023-08-28 18:25:32 +00:00
else
2023-10-16 08:47:35 +00:00
[ -x undeploy.sh ] && . undeploy.sh
2023-08-28 18:25:32 +00:00
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"
run docker-compose pull
section "Starting service"
run docker-compose up -d --remove-orphans
else
section "Removing containers"
docker-compose down --rmi all --remove-orphans
fi
fi
if ! "$deploy" ; then
section "Remove stray containers"
while read container ; do
2023-09-29 07:51:22 +00:00
[ -z "$container" ] && continue || true
2023-08-28 18:25:32 +00:00
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
systemctl enable "wg-quick@$wgif"
startwg.sh "$wgif"
else
if [ -z "$(ip a | grep "$wgif")" ] ; then
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"
2023-10-31 15:42:06 +00:00
fi
2023-08-28 18:25:32 +00:00
section "Testing nginx conf"
run nginx -t -c /etc/nginx/new_nginx.conf
if [ "$noreload" == false ] ; then
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