feat: Add service script for managing Docker containers on remote hosts
This commit is contained in:
Executable
+101
@@ -0,0 +1,101 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -u
|
||||||
|
|
||||||
|
readonly HOSTS=(
|
||||||
|
"aws-docker-mysql"
|
||||||
|
"aws-docker-redis"
|
||||||
|
"aws-docker-celery"
|
||||||
|
"aws-docker"
|
||||||
|
)
|
||||||
|
|
||||||
|
readonly WAIT_SECONDS=5
|
||||||
|
readonly REMOTE_DEPLOY_DIR="/root/deploys"
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo "Uso: $0 {start|stop|restart|update}"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_status() {
|
||||||
|
local action="$1"
|
||||||
|
local host="$2"
|
||||||
|
local status="$3"
|
||||||
|
|
||||||
|
# Estilo similar al output de OpenRC.
|
||||||
|
printf "* %-8s %-16s [%s]\n" "$action" "$host" "$status"
|
||||||
|
}
|
||||||
|
|
||||||
|
run_remote_compose() {
|
||||||
|
local host="$1"
|
||||||
|
local command="$2"
|
||||||
|
|
||||||
|
ssh -o BatchMode=yes -o LogLevel=ERROR -T "$host" "sudo -n sh -c \"cd '$REMOTE_DEPLOY_DIR' || exit 1; if command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then docker compose $command; elif command -v docker-compose >/dev/null 2>&1; then docker-compose $command; else exit 1; fi\"" >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
run_for_all_hosts() {
|
||||||
|
local mode="$1"
|
||||||
|
local host=""
|
||||||
|
local i=0
|
||||||
|
local total=${#HOSTS[@]}
|
||||||
|
|
||||||
|
for host in "${HOSTS[@]}"; do
|
||||||
|
case "$mode" in
|
||||||
|
start)
|
||||||
|
if run_remote_compose "$host" "up -d"; then
|
||||||
|
print_status "Started" "$host" "ok"
|
||||||
|
else
|
||||||
|
print_status "Started" "$host" "fail"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
if run_remote_compose "$host" "down"; then
|
||||||
|
print_status "Stopped" "$host" "ok"
|
||||||
|
else
|
||||||
|
print_status "Stopped" "$host" "fail"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
if run_remote_compose "$host" "down" && run_remote_compose "$host" "up -d"; then
|
||||||
|
print_status "Restarted" "$host" "ok"
|
||||||
|
else
|
||||||
|
print_status "Restarted" "$host" "fail"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
update)
|
||||||
|
if run_remote_compose "$host" "pull" && run_remote_compose "$host" "down" && run_remote_compose "$host" "up -d"; then
|
||||||
|
print_status "Updated" "$host" "ok"
|
||||||
|
else
|
||||||
|
print_status "Updated" "$host" "fail"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
i=$((i + 1))
|
||||||
|
if [ "$i" -lt "$total" ]; then
|
||||||
|
sleep "$WAIT_SECONDS"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$#" -ne 1 ]; then
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start|stop|restart|update)
|
||||||
|
run_for_all_hosts "$1"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
Reference in New Issue
Block a user