Self-Hosting Guide

Everything you need to run Netptune on your own infrastructure.

Netptune is fully open source and designed to be self-hosted. You own your data, your instance, and your deployment. This guide covers the complete process from choosing a deployment method through to a running production instance.

If you just want to get up and running quickly on a single machine, head straight to the Docker Compose guide.

Architecture

Netptune is composed of three application services backed by three infrastructure dependencies.

Application services

ServiceImageDescription
clientghcr.io/joelcrosby/netptune-clientAngular frontend served by Nginx. Proxies /api/ requests to the API server.
apighcr.io/joelcrosby/netptuneASP.NET Core REST API. Handles authentication, business logic, and real-time events.
jobsghcr.io/joelcrosby/netptune-jobsBackground job processor for async work such as email dispatch and event processing.

Infrastructure dependencies

DependencyPurposeRequired
PostgreSQL 17Primary databaseYes
Redis / Valkey 9Caching and session storageYes
NATSInternal event messaging between services. Must have JetStream enabled.Yes
S3-compatible storageFile attachments (AWS S3, MinIO, etc.)Yes
SendGridTransactional email for invites and notificationsYes
GitHub OAuth AppSocial login via GitHubOptional

Prerequisites

Accounts and credentials

Before deploying, ensure you have the following external accounts and credentials ready:

  • SendGrid account with an API key and a verified sender email address
  • S3-compatible storage — an AWS S3 bucket or a self-hosted MinIO instance
  • GitHub OAuth App credentials (optional, for GitHub login)

Infrastructure

  • A Linux server or Kubernetes cluster with at least 2 vCPUs and 2 GB RAM
  • A domain name pointed at your server or load balancer
  • A TLS certificate — Let's Encrypt is supported automatically in the Kubernetes deployment

Tools

Deployment methodRequired tools
Docker Composedocker, docker compose
Kuberneteskubectl, helm 3.x

Container images

All images are published to the GitHub Container Registry and are publicly available. Pinning to a specific git SHA tag is recommended for production deployments.

ImageTag
ghcr.io/joelcrosby/netptune-clientlatest
ghcr.io/joelcrosby/netptunelatest
ghcr.io/joelcrosby/netptune-jobslatest

Choose a deployment method