Skip to content

Instantly share code, notes, and snippets.

@tribela
Created September 23, 2023 14:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tribela/a75da979fdaaee5d63c069c2d0fffb08 to your computer and use it in GitHub Desktop.
Save tribela/a75da979fdaaee5d63c069c2d0fffb08 to your computer and use it in GitHub Desktop.
Simple mastodon docker compose upgrade script
#!/bin/bash
set -euo pipefail
cd "$(dirname "$0")" || exit 1
IMAGE_NAME='qdon/glitch'
TAG='beta'
HOSTNAME='beta.qdon.space'
rollback() {
# Rollback
echo "Rollback deployment"
docker tag $IMAGE_NAME:stable $IMAGE_NAME:$TAG
docker compose up -d
exit 1
}
CURRENT_IMAGE_HASH=$(docker inspect -f '{{.Image}}' "qdon-web-1")
docker pull "${IMAGE_NAME}:${TAG}"
NEWER_IMAGE_HASH=$(docker inspect -f '{{.Id}}' "${IMAGE_NAME}:${TAG}")
if [[ "$CURRENT_IMAGE_HASH" == "$NEWER_IMAGE_HASH" ]]; then
# Already newest
exit 0
fi
# Save image
docker tag $IMAGE_NAME:$TAG $IMAGE_NAME:stable
# docker compose pull # --parallel
echo "Pre-deploy DB migrate"
docker compose run --rm -e SKIP_POST_DEPLOYMENT_MIGRATIONS=true web rails db:migrate
docker compose up -d --wait || rollback
echo "Checking HTTP response"
for retry in {1..10}; do
echo -n "Trying $retry..."
if curl -fso /dev/null http://localhost:3000/about -H Host:$HOSTNAME -H X-Forwarded-Proto:https; then
echo "OK"
break
else
echo "Not OK"
fi
if [[ $retry -eq 10 ]]; then
rollback
fi
sleep "$(echo "l($retry + 1)" | bc -l)"
done
echo "Checking external access"
curl -fso /dev/null https://$HOSTNAME/about || rollback
echo "Post-deploy DB migrate"
docker compose run --rm web rails db:migrate
docker compose run --rm web tootctl cache clear
docker image prune -f
echo "OK"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment