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 | bashWith Custom Domain
bash
BASEPOD_DOMAIN=example.com curl -fsSL https://pod.base.al/install | bashManual Install
- Install Podman:
bash
brew install podman
podman machine init
podman machine startbash
sudo apt install podmanbash
sudo dnf install podman- Install Caddy:
bash
brew install caddybash
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- 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/basepodConfiguration
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: 5353DNS Setup
Point a wildcard DNS record to your server:
*.apps.example.com -> YOUR_SERVER_IPOr for specific apps:
myapp.example.com -> YOUR_SERVER_IP
api.example.com -> YOUR_SERVER_IPRunning 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.plistLinux (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 basepodFirewall
Open required ports:
bash
# HTTP/HTTPS
sudo ufw allow 80
sudo ufw allow 443
# Basepod API (if accessing remotely)
sudo ufw allow 3000Updating
bash
basepod updateOr manually:
bash
curl -fsSL https://pod.base.al/install | bash