Skip to content

Self-Hosting Minispace

Minispace is open source (AGPL-3.0) and can be self-hosted on your own server. You have full control over your data, your infrastructure, and your configuration.

Architecture Overview

A full Minispace stack consists of the following services, all orchestrated via Docker Compose:

Service Image Role
db postgres:16-alpine PostgreSQL database (multi-tenant schemas)
redis redis:7-alpine Real-time pub/sub and rate limiting
api Rust/Axum backend REST API + WebSocket server
web Next.js 15 frontend Web application
nginx nginx:alpine Reverse proxy, SSL termination
backup alpine:3.20 Scheduled database + media backups

Data Flow

Internet → Nginx (80/443)
              ├── /api/*  → API (port 8080)
              ├── /ws     → API WebSocket
              └── /*      → Web frontend (port 3000)

Each daycare provisioned on the platform gets its own isolated PostgreSQL schema (garderie_{slug}), so tenants are completely separated at the database level.

Prerequisites

Before deploying, you need:

  • A Linux server (Ubuntu 22.04+ recommended) with at least 2 GB RAM
  • Docker 24+ and Docker Compose v2 installed
  • A domain name pointed to your server (e.g., minispace.yourdomain.com)
  • An SMTP server or service (Gmail, Mailgun, Resend, etc.) for sending emails
  • (Optional) A Cloudflare account if you want to use the production nginx config as-is

Cloudflare dependency in production nginx

The nginx.prod.conf included in the repo is configured to only accept traffic from Cloudflare IPs and drops all other connections with a 444. If you are not using Cloudflare as your proxy, you must modify the nginx config to remove the Cloudflare IP allowlist before deploying.

What's Next

  • Deployment Guide — Step-by-step instructions to get Minispace running on your server