Sanitized mirror from private repository - 2026-04-18 11:19:59 UTC
This commit is contained in:
105
docs/services/mastodon/update-mastodon.sh
Executable file
105
docs/services/mastodon/update-mastodon.sh
Executable file
@@ -0,0 +1,105 @@
|
||||
#!/bin/bash
|
||||
# Mastodon Update Script
|
||||
# Updates Mastodon to the latest stable version (or specified version)
|
||||
# Run as root
|
||||
|
||||
set -e
|
||||
|
||||
TARGET_VERSION="${1:-}"
|
||||
MASTODON_DIR="/home/mastodon/live"
|
||||
|
||||
echo "=========================================="
|
||||
echo "Mastodon Update Script"
|
||||
echo "=========================================="
|
||||
|
||||
# Check current version
|
||||
CURRENT_VERSION=$(cd $MASTODON_DIR && git describe --tags 2>/dev/null || echo "unknown")
|
||||
echo "Current version: $CURRENT_VERSION"
|
||||
|
||||
# Get latest version if not specified
|
||||
if [ -z "$TARGET_VERSION" ]; then
|
||||
echo "Fetching latest version..."
|
||||
cd $MASTODON_DIR
|
||||
sudo -u mastodon git fetch --tags
|
||||
TARGET_VERSION=$(git tag -l 'v*' | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | sort -V | tail -1)
|
||||
fi
|
||||
|
||||
echo "Target version: $TARGET_VERSION"
|
||||
|
||||
if [ "$CURRENT_VERSION" = "$TARGET_VERSION" ]; then
|
||||
echo "Already at version $TARGET_VERSION. Nothing to do."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
read -p "Proceed with update? (y/N) " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo "Update cancelled."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create backup first
|
||||
echo ""
|
||||
echo "[1/7] Creating backup before update..."
|
||||
/home/mastodon/scripts/backup-mastodon.sh || echo "Backup script not found, skipping..."
|
||||
|
||||
# Stop services
|
||||
echo ""
|
||||
echo "[2/7] Stopping Mastodon services..."
|
||||
systemctl stop mastodon-web mastodon-sidekiq mastodon-streaming
|
||||
|
||||
# Update code
|
||||
echo ""
|
||||
echo "[3/7] Updating Mastodon code..."
|
||||
cd $MASTODON_DIR
|
||||
sudo -u mastodon git fetch --all
|
||||
sudo -u mastodon git checkout $TARGET_VERSION
|
||||
|
||||
# Update Ruby dependencies
|
||||
echo ""
|
||||
echo "[4/7] Updating Ruby dependencies..."
|
||||
sudo -u mastodon bash -lc "cd ~/live && bundle install"
|
||||
|
||||
# Update Node dependencies
|
||||
echo ""
|
||||
echo "[5/7] Updating Node dependencies..."
|
||||
sudo -u mastodon bash -lc "cd ~/live && yarn install --immutable"
|
||||
|
||||
# Run database migrations
|
||||
echo ""
|
||||
echo "[6/7] Running database migrations..."
|
||||
sudo -u mastodon bash -lc "cd ~/live && RAILS_ENV=production bundle exec rails db:migrate"
|
||||
|
||||
# Precompile assets
|
||||
echo ""
|
||||
echo "[7/7] Precompiling assets (this may take a few minutes)..."
|
||||
sudo -u mastodon bash -lc "cd ~/live && RAILS_ENV=production bundle exec rails assets:precompile"
|
||||
|
||||
# Fix SELinux contexts
|
||||
chcon -R -t httpd_sys_content_t /home/mastodon/live/public
|
||||
|
||||
# Start services
|
||||
echo ""
|
||||
echo "Starting Mastodon services..."
|
||||
systemctl start mastodon-web mastodon-sidekiq mastodon-streaming
|
||||
|
||||
# Verify
|
||||
sleep 5
|
||||
echo ""
|
||||
echo "Checking service status..."
|
||||
systemctl is-active mastodon-web mastodon-sidekiq mastodon-streaming
|
||||
|
||||
NEW_VERSION=$(cd $MASTODON_DIR && git describe --tags 2>/dev/null || echo "unknown")
|
||||
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "✅ Update Complete!"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "Previous version: $CURRENT_VERSION"
|
||||
echo "New version: $NEW_VERSION"
|
||||
echo ""
|
||||
echo "Please verify your instance is working correctly."
|
||||
echo "Check the release notes for any manual steps:"
|
||||
echo "https://github.com/mastodon/mastodon/releases/tag/$TARGET_VERSION"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user