Skip to content

Server Setup

Detailed guide for setting up a Basepod server.

Requirements

  • OS: macOS 12+ or Linux (Ubuntu, Debian, Fedora, Arch)
  • RAM: 4GB minimum, 8GB+ recommended
  • Storage: 20GB+ for apps and containers
  • Network: Public IP or domain (for SSL)

Installation

Standard Install

bash
curl -fsSL https://pod.base.al/install | bash

With Custom Domain

bash
BASEPOD_DOMAIN=example.com curl -fsSL https://pod.base.al/install | bash

Manual Install

  1. Install Podman:
bash
brew install podman
podman machine init
podman machine start
bash
sudo apt install podman
bash
sudo dnf install podman
  1. Install Caddy:
bash
brew install caddy
bash
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
  1. Download and run Basepod:
bash
curl -fsSL https://github.com/base-go/basepod/releases/latest/download/basepod-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m) \
  -o ~/.basepod/bin/basepod
chmod +x ~/.basepod/bin/basepod
~/.basepod/bin/basepod

Configuration

Server configuration is stored at ~/.basepod/config/basepod.yaml:

yaml
server:
  api_port: 3000

domain:
  base: apps.example.com    # Apps get subdomains
  # OR
  suffix: .example.com      # Append to app names

podman:
  network: basepod
  socket: /run/user/1000/podman/podman.sock

database:
  path: data/basepod.db

dns:
  enabled: false
  port: 5353

DNS Setup

Point a wildcard DNS record to your server:

*.apps.example.com  ->  YOUR_SERVER_IP

Or for specific apps:

myapp.example.com   ->  YOUR_SERVER_IP
api.example.com     ->  YOUR_SERVER_IP

Running as a Service

macOS (launchd)

bash
# Create plist
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>$HOME/.basepod/bin/basepod</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>
EOF

# Load service
launchctl load ~/Library/LaunchAgents/com.basepod.server.plist

Linux (systemd)

bash
# Create service file
sudo cat > /etc/systemd/system/basepod.service << EOF
[Unit]
Description=Basepod Server
After=network.target

[Service]
Type=simple
User=$USER
ExecStart=$HOME/.basepod/bin/basepod
Restart=always

[Install]
WantedBy=multi-user.target
EOF

# Enable and start
sudo systemctl enable basepod
sudo systemctl start basepod

Firewall

Open required ports:

bash
# HTTP/HTTPS
sudo ufw allow 80
sudo ufw allow 443

# Basepod API (if accessing remotely)
sudo ufw allow 3000

Updating

bash
basepod update

Or manually:

bash
curl -fsSL https://pod.base.al/install | bash

Released under the MIT License.