Skip to main content

Self-Hosting Multiforum

This guide walks you through deploying your own Multiforum instance.

Prerequisites

Set up the following before deploying (in any order):

Architecture Overview

Multiforum consists of two main components:

┌─────────────┐     GraphQL     ┌─────────────┐     Cypher     ┌─────────────┐
│ Frontend │ ──────────────▶ │ Backend │ ─────────────▶ │ Neo4j │
│ (Nuxt/Vue) │ │ (Apollo) │ │ Database │
└─────────────┘ └─────────────┘ └─────────────┘


┌─────────────┐
│ Google │
│ Cloud │
│ Storage │
└─────────────┘

Deploy the Backend

Clone the Repository

git clone https://github.com/gennit-project/multiforum-backend.git
cd multiforum-backend
npm install

Configure Environment Variables

Create a .env file with values from your prerequisite setup:

# Database
NEO4J_URI=bolt://your-neo4j-host:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your-password

# Server
PORT=4000

# Authentication
AUTH0_DOMAIN=your-tenant.auth0.com
AUTH0_CLIENT_ID=your-client-id

# File Storage
GCS_BUCKET_NAME=your-bucket-name
GOOGLE_CREDENTIALS_BASE64=your-base64-encoded-credentials

# Email (choose one provider)
EMAIL_PROVIDER=resend # or "sendgrid"
RESEND_API_KEY=your-resend-api-key
# OR
SENDGRID_API_KEY=your-sendgrid-api-key
EMAIL_FROM=noreply@your-domain.com

# Optional
SLACK_WEBHOOK_URL=your-slack-webhook # For monitoring
PLUGIN_SECRET_ENCRYPTION_KEY=your-encryption-key
SUPPORT_EMAIL=support@your-domain.com

Build and Run

npm run build
npm run start

The backend will automatically create necessary database constraints and indexes on first run.

Deploy to Production

Recommended platforms:

  • Railway - Simple Node.js deployment
  • Render - Free tier available
  • Google Cloud Run - Scalable containers
  • AWS App Runner - Managed containers

Deploy the Frontend

Clone the Repository

git clone https://github.com/gennit-project/multiforum-nuxt.git
cd multiforum-nuxt
npm install

Configure Environment Variables

Create a .env file:

# Core
VITE_SERVER_NAME=your-server-name
VITE_SERVER_DISPLAY_NAME=Your Server Name
VITE_GRAPHQL_URL=https://your-backend-domain.com/graphql
VITE_BASE_URL=https://your-frontend-domain.com
VITE_ENVIRONMENT=production

# Authentication
VITE_AUTH0_DOMAIN=your-tenant.auth0.com
VITE_AUTH0_CLIENT_ID=your-client-id
VITE_AUTH0_CLIENT_SECRET=your-client-secret
VITE_AUTH0_AUDIENCE=your-api-audience
VITE_AUTH0_SCOPE=openid profile email
VITE_AUTH0_URL=https://your-tenant.auth0.com/oauth/token
VITE_AUTH0_CALLBACK_URL=https://your-frontend-domain.com/callback
VITE_LOGOUT_URL=https://your-frontend-domain.com

# External Services (optional)
VITE_GOOGLE_MAPS_API_KEY=your-google-maps-key
VITE_GOOGLE_MAP_ID=your-map-id
VITE_GOOGLE_CLOUD_STORAGE_BUCKET=your-bucket-name
VITE_OPEN_CAGE_API_KEY=your-opencage-key

# Deployment
NITRO_PRESET=vercel # or node-server, netlify, etc.

Build and Deploy

npm run build

Recommended platforms:

  • Vercel - Optimized for Nuxt (set NITRO_PRESET=vercel)
  • Netlify - Good free tier
  • Cloudflare Pages - Fast edge deployment

Initial Configuration

  1. Access your deployed frontend
  2. Log in with your Auth0 account (you'll be the first user)
  3. Create the ServerConfig in the database:
CREATE (s:ServerConfig {
serverName: "your-server-name",
serverDescription: "Your server description",
enableDownloads: true,
enableEvents: true
})
  1. Add yourself as an admin:
MATCH (u:User {username: "your-username"})
MATCH (s:ServerConfig {serverName: "your-server-name"})
CREATE (u)-[:ADMIN_OF_SERVER]->(s)
  1. Access admin settings and configure default roles

Troubleshooting

Database Connection Issues

  • Verify Neo4j is running and accessible
  • Check firewall rules allow connections on port 7687
  • Ensure credentials are correct

Auth0 Callback Errors

  • Verify callback URLs match exactly in Auth0 dashboard
  • Check CORS settings in Auth0
  • Ensure client secret is correct

File Upload Failures

  • Verify GCS bucket permissions
  • Check service account has Storage Admin role
  • Ensure base64 encoding of credentials is correct

Next Steps