Self-Hosting Multiforum
This guide walks you through deploying your own Multiforum instance.
Prerequisites
Set up the following before deploying (in any order):
- Node.js 22.x - Runtime for frontend and backend
- Neo4j Database - Graph database for storing data
- Auth0 Account - Authentication provider
- Google Cloud Storage - File and image uploads
- Domain Names - URLs for frontend and backend
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
- Access your deployed frontend
- Log in with your Auth0 account (you'll be the first user)
- Create the ServerConfig in the database:
CREATE (s:ServerConfig {
serverName: "your-server-name",
serverDescription: "Your server description",
enableDownloads: true,
enableEvents: true
})
- Add yourself as an admin:
MATCH (u:User {username: "your-username"})
MATCH (s:ServerConfig {serverName: "your-server-name"})
CREATE (u)-[:ADMIN_OF_SERVER]->(s)
- 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