Skip to content

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 | bash

This 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 caddy

3. Initialize Podman

bash
podman machine init
podman machine start

4. 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 --setup

5. Start Services

bash
# Start Caddy
brew services start caddy

# Start Basepod
~/.basepod/bin/basepod

Network 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:

Local Development

For local-only access with .local domains:

bash
# Configure basepod.yaml
domain:
  suffix: .local
dns:
  enabled: true
  port: 5353

Then add to /etc/resolver/local:

nameserver 127.0.0.1
port 5353

Running 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.plist

Firewall

Allow incoming connections:

  1. Open System Preferences > Security & Privacy > Firewall
  2. Click Firewall Options
  3. Add basepod and allow incoming connections

Or via terminal:

bash
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add ~/.basepod/bin/basepod
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp ~/.basepod/bin/basepod

Energy Settings

Prevent your Mac Mini from sleeping:

  1. Open System Preferences > Energy Saver
  2. Check "Prevent computer from sleeping automatically"
  3. 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 1

Running 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 start

Caddy Certificate Issues

bash
# Check Caddy logs
tail -f /opt/homebrew/var/log/caddy.log

# Restart Caddy
brew services restart caddy

Port Already in Use

bash
# Find process using port 3000
lsof -i :3000

# Kill it
kill -9 <PID>

Released under the MIT License.