Sanitized mirror from private repository - 2026-04-18 11:19:59 UTC
This commit is contained in:
222
docs/services/mastodon/fix-mastodon.sh
Executable file
222
docs/services/mastodon/fix-mastodon.sh
Executable file
@@ -0,0 +1,222 @@
|
||||
#!/bin/bash
|
||||
# =============================================================================
|
||||
# Mastodon Fix/Repair Script
|
||||
# Diagnoses and fixes common issues
|
||||
# =============================================================================
|
||||
# Run as root
|
||||
|
||||
echo "=========================================="
|
||||
echo "Mastodon Fix/Repair Tool"
|
||||
echo "=========================================="
|
||||
|
||||
# Check root
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo "This script must be run as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
FIXED=0
|
||||
ERRORS=0
|
||||
|
||||
# 1. Check and fix service status
|
||||
echo ""
|
||||
echo "[1/7] Checking services..."
|
||||
|
||||
services=("postgresql" "valkey" "nginx" "mastodon-web" "mastodon-sidekiq" "mastodon-streaming")
|
||||
for svc in "${services[@]}"; do
|
||||
if systemctl is-active --quiet $svc 2>/dev/null; then
|
||||
echo " ✓ $svc is running"
|
||||
elif systemctl list-unit-files | grep -q "^${svc}.service"; then
|
||||
echo " ✗ $svc is not running, attempting to start..."
|
||||
systemctl start $svc 2>/dev/null
|
||||
sleep 2
|
||||
if systemctl is-active --quiet $svc; then
|
||||
echo " ✓ $svc started successfully"
|
||||
FIXED=$((FIXED + 1))
|
||||
else
|
||||
echo " ✗ Failed to start $svc"
|
||||
echo " Check logs: journalctl -u $svc -n 50"
|
||||
ERRORS=$((ERRORS + 1))
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# 2. Check file permissions
|
||||
echo ""
|
||||
echo "[2/7] Checking file permissions..."
|
||||
|
||||
# Check .env.production
|
||||
if [ -f /home/mastodon/live/.env.production ]; then
|
||||
OWNER=$(stat -c '%U' /home/mastodon/live/.env.production)
|
||||
PERMS=$(stat -c '%a' /home/mastodon/live/.env.production)
|
||||
|
||||
if [ "$OWNER" != "mastodon" ]; then
|
||||
echo " ✗ Fixing .env.production ownership..."
|
||||
chown mastodon:mastodon /home/mastodon/live/.env.production
|
||||
FIXED=$((FIXED + 1))
|
||||
fi
|
||||
|
||||
if [ "$PERMS" != "600" ]; then
|
||||
echo " ✗ Fixing .env.production permissions..."
|
||||
chmod 600 /home/mastodon/live/.env.production
|
||||
FIXED=$((FIXED + 1))
|
||||
fi
|
||||
|
||||
echo " ✓ .env.production permissions OK"
|
||||
fi
|
||||
|
||||
# Check live directory ownership
|
||||
if [ -d /home/mastodon/live ]; then
|
||||
LIVE_OWNER=$(stat -c '%U' /home/mastodon/live)
|
||||
if [ "$LIVE_OWNER" != "mastodon" ]; then
|
||||
echo " ✗ Fixing /home/mastodon/live ownership..."
|
||||
chown -R mastodon:mastodon /home/mastodon/live
|
||||
FIXED=$((FIXED + 1))
|
||||
else
|
||||
echo " ✓ /home/mastodon/live ownership OK"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 3. Check database connection
|
||||
echo ""
|
||||
echo "[3/7] Checking database..."
|
||||
|
||||
if sudo -u postgres psql -c "SELECT 1" mastodon_production > /dev/null 2>&1; then
|
||||
echo " ✓ Database connection successful"
|
||||
else
|
||||
echo " ✗ Cannot connect to database"
|
||||
|
||||
# Try to fix common issues
|
||||
if ! systemctl is-active --quiet postgresql; then
|
||||
echo " Attempting to start PostgreSQL..."
|
||||
systemctl start postgresql
|
||||
sleep 2
|
||||
fi
|
||||
|
||||
# Check if database exists
|
||||
if ! sudo -u postgres psql -lqt | cut -d \| -f 1 | grep -qw mastodon_production; then
|
||||
echo " Database does not exist!"
|
||||
ERRORS=$((ERRORS + 1))
|
||||
fi
|
||||
fi
|
||||
|
||||
# 4. Check Redis/Valkey connection
|
||||
echo ""
|
||||
echo "[4/7] Checking cache server..."
|
||||
|
||||
if valkey-cli ping > /dev/null 2>&1; then
|
||||
echo " ✓ Valkey connection successful"
|
||||
elif redis-cli ping > /dev/null 2>&1; then
|
||||
echo " ✓ Redis connection successful"
|
||||
else
|
||||
echo " ✗ Cannot connect to cache server"
|
||||
|
||||
if systemctl is-active --quiet valkey; then
|
||||
echo " Valkey is running but not responding"
|
||||
elif systemctl is-active --quiet redis; then
|
||||
echo " Redis is running but not responding"
|
||||
else
|
||||
echo " Attempting to start Valkey..."
|
||||
systemctl start valkey 2>/dev/null || systemctl start redis 2>/dev/null
|
||||
sleep 2
|
||||
FIXED=$((FIXED + 1))
|
||||
fi
|
||||
fi
|
||||
|
||||
# 5. Check nginx configuration
|
||||
echo ""
|
||||
echo "[5/7] Checking nginx configuration..."
|
||||
|
||||
if nginx -t 2>/dev/null; then
|
||||
echo " ✓ Nginx configuration is valid"
|
||||
else
|
||||
echo " ✗ Nginx configuration has errors"
|
||||
nginx -t
|
||||
ERRORS=$((ERRORS + 1))
|
||||
fi
|
||||
|
||||
# 6. Check SELinux contexts (Rocky/RHEL)
|
||||
echo ""
|
||||
echo "[6/7] Checking SELinux..."
|
||||
|
||||
if command -v getenforce &> /dev/null; then
|
||||
SELINUX_MODE=$(getenforce)
|
||||
echo " SELinux mode: $SELINUX_MODE"
|
||||
|
||||
if [ "$SELINUX_MODE" = "Enforcing" ]; then
|
||||
# Fix common SELinux issues
|
||||
if [ -d /home/mastodon/live/public ]; then
|
||||
echo " Ensuring correct SELinux contexts..."
|
||||
chcon -R -t httpd_sys_content_t /home/mastodon/live/public 2>/dev/null || true
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo " SELinux not present"
|
||||
fi
|
||||
|
||||
# 7. Check API endpoints
|
||||
echo ""
|
||||
echo "[7/7] Checking API endpoints..."
|
||||
|
||||
sleep 1
|
||||
|
||||
# Test instance API
|
||||
if curl -sf http://127.0.0.1:3000/api/v1/instance > /dev/null 2>&1; then
|
||||
echo " ✓ Instance API responding"
|
||||
else
|
||||
echo " ✗ Instance API not responding"
|
||||
|
||||
# Check if it's a startup timing issue
|
||||
echo " Waiting for services to fully start..."
|
||||
sleep 5
|
||||
|
||||
if curl -sf http://127.0.0.1:3000/api/v1/instance > /dev/null 2>&1; then
|
||||
echo " ✓ Instance API now responding"
|
||||
else
|
||||
echo " ✗ Instance API still not responding"
|
||||
echo " Check logs: journalctl -u mastodon-web -n 50"
|
||||
ERRORS=$((ERRORS + 1))
|
||||
fi
|
||||
fi
|
||||
|
||||
# Test streaming API
|
||||
if curl -sf http://127.0.0.1:4000/api/v1/streaming/health > /dev/null 2>&1; then
|
||||
echo " ✓ Streaming API healthy"
|
||||
else
|
||||
echo " ✗ Streaming API not responding"
|
||||
echo " Attempting to restart streaming service..."
|
||||
systemctl restart mastodon-streaming
|
||||
sleep 3
|
||||
if curl -sf http://127.0.0.1:4000/api/v1/streaming/health > /dev/null 2>&1; then
|
||||
echo " ✓ Streaming API now healthy"
|
||||
FIXED=$((FIXED + 1))
|
||||
else
|
||||
echo " ✗ Streaming API still not responding"
|
||||
ERRORS=$((ERRORS + 1))
|
||||
fi
|
||||
fi
|
||||
|
||||
# Summary
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
if [ $ERRORS -eq 0 ]; then
|
||||
if [ $FIXED -eq 0 ]; then
|
||||
echo "✅ All checks passed! No issues found."
|
||||
else
|
||||
echo "✅ Fixed $FIXED issue(s). All checks now pass."
|
||||
echo ""
|
||||
echo "You may want to restart services:"
|
||||
echo " systemctl restart mastodon-web mastodon-sidekiq mastodon-streaming"
|
||||
fi
|
||||
else
|
||||
echo "⚠️ Found $ERRORS error(s) that need manual attention."
|
||||
echo ""
|
||||
echo "Common fixes:"
|
||||
echo " - Check logs: journalctl -u mastodon-web -f"
|
||||
echo " - Restart all: systemctl restart mastodon-{web,sidekiq,streaming}"
|
||||
echo " - Check .env: cat /home/mastodon/live/.env.production"
|
||||
echo " - Run migrations: sudo -u mastodon bash -lc 'cd ~/live && RAILS_ENV=production bin/rails db:migrate'"
|
||||
fi
|
||||
echo "=========================================="
|
||||
|
||||
exit $ERRORS
|
||||
Reference in New Issue
Block a user