macOS Setup
Turn your Mac Mini into a personal server with Basepod.
Requirements
- Mac Mini (M series)
- macOS 12 Monterey or later
- 8GB RAM minimum (16GB recommended for LLMs)
- Static IP or dynamic DNS
Quick Setup
bash
curl -fsSL https://pod.base.al/install | bashThis installs everything you need:
- Basepod server
- Podman (container runtime)
- Caddy (reverse proxy with auto SSL)
Step-by-Step Setup
1. Install Homebrew
If you don't have Homebrew:
bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"2. Install Dependencies
bash
brew install podman caddy3. Initialize Podman
bash
podman machine init
podman machine start4. Install Basepod
bash
# Download latest release
curl -fsSL https://github.com/base-go/basepod/releases/latest/download/basepod-darwin-arm64 \
-o ~/.basepod/bin/basepod
chmod +x ~/.basepod/bin/basepod
# Run setup
~/.basepod/bin/basepod --setup5. Start Services
bash
# Start Caddy
brew services start caddy
# Start Basepod
~/.basepod/bin/basepodNetwork Configuration
Port Forwarding
Forward ports 80 and 443 from your router to your Mac Mini.
Dynamic DNS
If you don't have a static IP, use a dynamic DNS service:
- DuckDNS (free)
- Cloudflare (free tier)
- No-IP
Local Development
For local-only access with .local domains:
bash
# Configure basepod.yaml
domain:
suffix: .local
dns:
enabled: true
port: 5353Then add to /etc/resolver/local:
nameserver 127.0.0.1
port 5353Running as a Service
Create a Launch Agent to start Basepod automatically:
bash
mkdir -p ~/Library/LaunchAgents
cat > ~/Library/LaunchAgents/com.basepod.server.plist << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.basepod.server</string>
<key>ProgramArguments</key>
<array>
<string>/Users/YOUR_USERNAME/.basepod/bin/basepod</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/Users/YOUR_USERNAME/.basepod/logs/basepod.log</string>
<key>StandardErrorPath</key>
<string>/Users/YOUR_USERNAME/.basepod/logs/basepod.err</string>
</dict>
</plist>
EOF
# Replace YOUR_USERNAME
sed -i '' "s/YOUR_USERNAME/$USER/g" ~/Library/LaunchAgents/com.basepod.server.plist
# Load the service
launchctl load ~/Library/LaunchAgents/com.basepod.server.plistFirewall
Allow incoming connections:
- Open System Preferences > Security & Privacy > Firewall
- Click Firewall Options
- Add
basepodand allow incoming connections
Or via terminal:
bash
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add ~/.basepod/bin/basepod
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp ~/.basepod/bin/basepodEnergy Settings
Prevent your Mac Mini from sleeping:
- Open System Preferences > Energy Saver
- Check "Prevent computer from sleeping automatically"
- Check "Wake for network access"
Or via terminal:
bash
sudo pmset -a sleep 0
sudo pmset -a disksleep 0
sudo pmset -a displaysleep 0
sudo pmset -a womp 1Running LLMs
See LLM Support for running local LLMs on Apple Silicon.
Troubleshooting
Podman Machine Won't Start
bash
podman machine rm
podman machine init --cpus 4 --memory 4096
podman machine startCaddy Certificate Issues
bash
# Check Caddy logs
tail -f /opt/homebrew/var/log/caddy.log
# Restart Caddy
brew services restart caddyPort Already in Use
bash
# Find process using port 3000
lsof -i :3000
# Kill it
kill -9 <PID>