Files
homelab-optimized/hosts/vms/mastodon-rocky-vm/README.md
Gitea Mirror Bot fb00a325d1
Some checks failed
Documentation / Build Docusaurus (push) Failing after 5m14s
Documentation / Deploy to GitHub Pages (push) Has been skipped
Sanitized mirror from private repository - 2026-04-18 11:19:59 UTC
2026-04-18 11:19:59 +00:00

90 lines
2.9 KiB
Markdown

# mastodon-rocky
Rocky Linux 10 VM running Mastodon (bare-metal systemd, no Docker). Hosted on Calypso (Synology DS723+).
**Hostname**: mastodon-rocky
**LAN IP**: 192.168.0.126 (DHCP)
**Tailscale IP**: 100.64.0.3
**SSH**: `ssh mastodon-rocky` (via Tailscale — see `~/.ssh/config`)
**SSH user**: root
---
## Hardware (Virtual Machine)
| Property | Value |
|----------|-------|
| **Hypervisor** | Synology Virtual Machine Manager (VMM) on Calypso |
| **Host** | Calypso — Synology DS723+ |
| **OS** | Rocky Linux 10.1 (Red Quartz) |
| **Kernel** | 6.12.0-124.27.1.el10_1.x86_64 |
| **Architecture** | x86_64 |
| **vCPU** | 4 cores (AMD Ryzen Embedded V1780B, host passthrough) |
| **RAM** | 8 GB |
| **Disk** | 100 GB (virtual disk), 61 GB root LVM (`/dev/mapper/rl-root`) |
| **Network** | `ens3`, bridged to Calypso LAN |
---
## Network Configuration
- **LAN IP**: `192.168.0.126/24` (DHCP)
- **Tailscale IP**: `100.64.0.3` (Headscale node 21)
- **Default gateway**: `192.168.0.1`
### Tailscale / Headscale
Joined to Headscale at `headscale.vish.gg:8443`. Accepts all subnet routes (`--accept-routes`).
**Known routing quirk**: Same as other `192.168.0.0/24` nodes — Calypso's subnet route advertisement via Headscale causes Tailscale to install `192.168.0.0/24` in table 52, breaking inbound LAN connectivity. Fixed with a persistent NetworkManager dispatcher hook:
```bash
# /etc/NetworkManager/dispatcher.d/99-lan-routing-fix
[ "$2" = "up" ] && ip rule add to 192.168.0.0/24 priority 5200 lookup main 2>/dev/null || true
```
**DNS gotcha**: When Tailscale is offline or mid-switch, it overwrites `/etc/resolv.conf` with `nameserver 100.100.100.100` (MagicDNS), which is unreachable — breaking DNS entirely. If you ever need to re-join Headscale:
```bash
echo 'nameserver 1.1.1.1' > /etc/resolv.conf
tailscale up --login-server=https://headscale.vish.gg:8443 --authkey=<key> --accept-routes --hostname=mastodon-rocky --force-reauth
```
---
## Services
All services run as bare-metal systemd units (no Docker).
| Service | Description | Port |
|---------|-------------|------|
| `mastodon-web.service` | Mastodon web (Puma) | 3000 |
| `mastodon-streaming.service` | Mastodon streaming API | 4000 |
| `mastodon-sidekiq.service` | Mastodon background jobs | — |
| `nginx.service` | Reverse proxy | 80, 443 |
| `postgresql.service` | PostgreSQL database | 5432 |
| `valkey.service` | Valkey (Redis-compatible) cache | 6379 |
### Service Management
```bash
# Check all Mastodon services
systemctl status mastodon-web mastodon-streaming mastodon-sidekiq
# Restart Mastodon
systemctl restart mastodon-web mastodon-streaming mastodon-sidekiq
# View logs
journalctl -u mastodon-web -f
journalctl -u mastodon-sidekiq -f
```
---
## Web Console
Cockpit is available at `https://mastodon-rocky:9090` or `https://192.168.0.126:9090`.
---
*Last Updated*: 2026-03-10
*Host*: Calypso (Synology DS723+) via Synology VMM