106 lines
2.9 KiB
Bash
Executable File
106 lines
2.9 KiB
Bash
Executable File
#!/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 ""
|