Files
homelab-optimized/docs/services/mastodon/README.md
Gitea Mirror Bot 89aad4f882
Some checks failed
Documentation / Build Docusaurus (push) Failing after 5m2s
Documentation / Deploy to GitHub Pages (push) Has been skipped
Sanitized mirror from private repository - 2026-04-18 11:13:17 UTC
2026-04-18 11:13:18 +00:00

4.4 KiB

Mastodon Production Scripts

Production-ready Mastodon deployment scripts for self-hosting.

Installation Options

Option 1: Docker (Multi-Platform)

curl -fsSL https://git.vish.gg/Vish/mastodon-production/raw/branch/main/install.sh | sudo bash -s -- --domain mastodon.example.com --email admin@example.com

Supports: Ubuntu, Debian, Fedora, Rocky/Alma/RHEL 8+, Arch, openSUSE

Option 2: Bare-Metal (Rocky Linux 10)

# Set your configuration
export DOMAIN="mastodon.example.com"
export ADMIN_USER="admin"
export ADMIN_EMAIL="admin@example.com"
export SMTP_SERVER="smtp.gmail.com"
export SMTP_PORT="587"
export SMTP_USER="your@gmail.com"
export SMTP_PASS="REDACTED_PASSWORD"
export SMTP_FROM="notifications@example.com"

# Run installer
curl -sSL https://git.vish.gg/Vish/mastodon-production/raw/branch/main/install-baremetal.sh | bash

Scripts

Script Description
install.sh Docker-based installer (multi-platform)
install-baremetal.sh Bare-metal installer for Rocky Linux 10
verify-mastodon.sh Health check / verification script
fix-mastodon.sh Diagnose and auto-fix common issues
backup-mastodon.sh Backup script for migration
update-mastodon.sh Update to latest Mastodon version

Verify Installation

./verify-mastodon.sh

Checks:

  • All services (postgresql, valkey, nginx, mastodon-*)
  • API endpoints (instance, streaming)
  • Database connectivity and stats
  • Federation endpoints (webfinger, nodeinfo)
  • Configuration files

Fix Common Issues

./fix-mastodon.sh

Automatically fixes:

  • Stopped services
  • File permissions
  • SELinux contexts
  • Service startup issues

Bare-Metal Architecture (Rocky Linux 10)

Internet → Cloudflare → Reverse Proxy (443) → Rocky VM (3000)
                                                    ↓
                                                  nginx
                                                    ↓
                                  ┌─────────────────┼─────────────────┐
                                  ↓                 ↓                 ↓
                             Puma (3001)    Streaming (4000)      Sidekiq
                                  ↓                 ↓                 ↓
                                  └─────────────────┼─────────────────┘
                                                    ↓
                                          PostgreSQL + Valkey

Services (Bare-Metal)

Service Port Description
nginx 3000 External reverse proxy
mastodon-web 3001 Puma web server
mastodon-streaming 4000 WebSocket streaming
mastodon-sidekiq - Background jobs
postgresql 5432 Database
valkey 6379 Redis cache

Backup & Restore

Create Backup

/home/mastodon/scripts/backup-mastodon.sh

Creates a complete backup including:

  • PostgreSQL database dump
  • .env.production (secrets)
  • User uploads (avatars, headers, media)
  • Restore instructions

Restore

See RESTORE.md included in backup archive.

Update Mastodon

# Update to latest version
/home/mastodon/scripts/update-mastodon.sh

# Update to specific version
/home/mastodon/scripts/update-mastodon.sh v4.6.0

Maintenance Commands

# Service status
systemctl status mastodon-web mastodon-sidekiq mastodon-streaming

# Restart all services
systemctl restart mastodon-web mastodon-sidekiq mastodon-streaming

# View logs
journalctl -u mastodon-web -f
journalctl -u mastodon-sidekiq -f

# Access tootctl
sudo -u mastodon bash -lc 'cd ~/live && RAILS_ENV=production bin/tootctl --help'

# Create new user
sudo -u mastodon bash -lc 'cd ~/live && RAILS_ENV=production bin/tootctl accounts create USERNAME --email=EMAIL --confirmed'

# Make user admin/owner
sudo -u mastodon bash -lc 'cd ~/live && RAILS_ENV=production bin/tootctl accounts modify USERNAME --role Owner'

# Clear media cache
sudo -u mastodon bash -lc 'cd ~/live && RAILS_ENV=production bin/tootctl media remove --days=7'

Requirements

Bare-Metal

  • Rocky Linux 10 (fresh install)
  • 4GB+ RAM recommended
  • 20GB+ disk space
  • Domain with DNS configured
  • SMTP credentials for email

Docker

  • Any supported Linux distribution
  • Docker and Docker Compose
  • Domain with DNS configured

License

MIT