Skip to main content

Self-Hosted Deployment

Complete guide for self-hosting your Data Pod


Overview

Self-hosting gives you complete control over your data and infrastructure. This guide covers manual setup without Docker.


Prerequisites

  • Server: VPS or dedicated server (2GB RAM minimum)
  • PostgreSQL: 16+ with TimescaleDB and pgvector
  • Node.js: 20+ LTS
  • pnpm: 8.15+
  • Storage: R2, S3, or MinIO

Step 1: Install PostgreSQL

Ubuntu/Debian

# Install PostgreSQL
sudo apt update
sudo apt install postgresql-16 postgresql-contrib-16

# Install TimescaleDB
sudo apt install timescaledb-2-postgresql-16

# Install pgvector
sudo apt install postgresql-16-pgvector

# Configure
sudo timescaledb-tune
sudo systemctl restart postgresql

Create Database

sudo -u postgres psql

CREATE DATABASE synap;
CREATE USER synap_user WITH PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE synap TO synap_user;

\c synap
CREATE EXTENSION IF NOT EXISTS timescaledb;
CREATE EXTENSION IF NOT EXISTS vector;

Step 2: Install Node.js

# Using nvm (recommended)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
nvm install 20
nvm use 20

# Install pnpm
npm install -g pnpm

Step 3: Clone and Setup

# Clone repository
git clone https://github.com/Synap-core/backend.git
cd backend

# Install dependencies
pnpm install

# Configure environment
cp env.local.example .env
# Edit .env with your configuration

Step 4: Initialize Database

# Run migrations
pnpm --filter database db:init

# Verify
pnpm --filter database db:status

Step 5: Setup Storage

Option A: Cloudflare R2

STORAGE_PROVIDER=r2
R2_ACCOUNT_ID=your_account_id
R2_ACCESS_KEY_ID=your_access_key
R2_SECRET_ACCESS_KEY=your_secret_key
R2_BUCKET_NAME=synap-storage

Option B: MinIO (Self-Hosted)

# Install MinIO
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
./minio server /data/minio --console-address ":9001"

Step 6: Setup Ory

Install Ory Kratos + Hydra

# Using Docker Compose (recommended)
# See Ory documentation for setup

Step 7: Run Services

Development

pnpm dev

Production (PM2)

# Install PM2
npm install -g pm2

# Start API
pm2 start apps/api/src/index.ts --name synap-api

# Start Workers
pm2 start apps/jobs/src/index.ts --name synap-jobs

# Save configuration
pm2 save
pm2 startup

Maintenance

Backups

# Database backup
pg_dump -U synap_user synap > backup.sql

# Restore
psql -U synap_user synap < backup.sql

Updates

# Pull latest changes
git pull

# Install dependencies
pnpm install

# Run migrations
pnpm --filter database db:migrate

# Restart services
pm2 restart all

Next: See Docker Deployment for easier setup.