Zum Inhalt

🔧 PRO Setup Guide

Diese Anleitung erklärt die Einrichtung des manniPhone PRO Backends für Self-Hosting.


📋 Voraussetzungen

Software

Software Version Link
Node.js 18+ nodejs.org
PostgreSQL 14+ postgresql.org
Git 2.x git-scm.com

Accounts


🚀 Installation

1. Repository klonen

git clone https://github.com/manniPhone/manniPhone.git
cd manniPhone/server

2. Dependencies installieren

npm install

3. Environment konfigurieren

cp .env.example .env

Bearbeite .env:

# Server
NODE_ENV=development
PORT=3001

# Database
DATABASE_URL=postgresql://user:password@localhost:5432/manniphone

# JWT
JWT_SECRET=your-super-secret-key-here
JWT_REFRESH_SECRET=another-super-secret-key

# Twilio
TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_AUTH_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_API_KEY_SID=SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_API_KEY_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_TWIML_APP_SID=APxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_PHONE_NUMBER=+491234567890

# Stripe
STRIPE_SECRET_KEY=sk_test_xxxxxxxxxxxxxxxxxxxxxxxxxx
STRIPE_WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxxxxxxxxxxxxxx

🗄️ Datenbank einrichten

PostgreSQL installieren (macOS)

brew install postgresql@14
brew services start postgresql@14

Datenbank erstellen

createdb manniphone

Schema anwenden

psql manniphone < src/db/schema.sql

📞 Twilio konfigurieren

1. Account erstellen

  1. Gehe zu twilio.com/try-twilio
  2. Registriere dich mit E-Mail
  3. Verifiziere deine Telefonnummer

2. Credentials finden

  1. Console → Dashboard
  2. Kopiere:
  3. Account SID: ACxxxxxxxxxx
  4. Auth Token: xxxxxxxxxx

3. API Key erstellen

  1. Console → Account → API Keys
  2. Create API Key
  3. Name: manniPhone
  4. Type: Standard
  5. Kopiere:
  6. SID: SKxxxxxxxxxx
  7. Secret: xxxxxxxxxx (nur einmal sichtbar!)

4. Telefonnummer kaufen

  1. Console → Phone Numbers → Buy a Number
  2. Land: Deutschland (+49)
  3. Capabilities: ✅ Voice
  4. Buy

Trial Account

Im Trial-Modus kannst du nur an verifizierte Nummern anrufen. Upgrade für volle Funktionalität.

5. TwiML App erstellen

  1. Console → Voice → TwiML Apps
  2. Create new TwiML App
  3. Friendly Name: manniPhone
  4. Voice Request URL: https://your-domain.com/api/webhook/voice/outbound
  5. Method: POST
  6. Create
  7. Kopiere App SID: APxxxxxxxxxx

💳 Stripe konfigurieren

1. Account erstellen

  1. Gehe zu stripe.com
  2. Registriere dein Business

2. API Keys

  1. Developers → API Keys
  2. Kopiere:
  3. Publishable key: pk_test_xxx
  4. Secret key: sk_test_xxx

3. Webhook einrichten

  1. Developers → Webhooks
  2. Add endpoint
  3. URL: https://your-domain.com/api/billing/webhook
  4. Events:
  5. checkout.session.completed
  6. customer.subscription.created
  7. customer.subscription.updated
  8. customer.subscription.deleted
  9. Add endpoint
  10. Kopiere Webhook Secret: whsec_xxx

🖥️ Server starten

Development

npm run dev

Server läuft auf http://localhost:3001

Production

npm start

Mit PM2 (empfohlen)

npm install -g pm2
pm2 start src/index.js --name manniphone-server
pm2 save
pm2 startup

✅ Installation testen

Health Check

curl http://localhost:3001/health

Erwartete Antwort:

{
  "status": "ok",
  "timestamp": "2026-01-23T12:00:00.000Z",
  "version": "1.0.0"
}

API Endpoints

curl http://localhost:3001/api

🌐 Deployment

Empfohlene Hosting-Optionen

Provider Preis Besonderheiten
Railway ab $5/mo Einfachstes Setup
Render ab $7/mo Gute DX
Fly.io ab $5/mo Edge Deployment
Hetzner ab €4/mo Deutsche Server

Railway Deployment

# Railway CLI installieren
npm install -g @railway/cli

# Login
railway login

# Projekt erstellen
railway init

# PostgreSQL hinzufügen
railway add -p postgresql

# Deployen
railway up

Environment Variables setzen

railway variables set TWILIO_ACCOUNT_SID=ACxxx
railway variables set TWILIO_AUTH_TOKEN=xxx
# ... weitere Variables

🔧 Troubleshooting

Port bereits belegt

lsof -i :3001
kill -9 <PID>

Datenbank-Verbindung fehlgeschlagen

# PostgreSQL Status prüfen
pg_isready

# Service starten
brew services start postgresql@14

Twilio Webhook nicht erreichbar

Nutze ngrok für lokales Testing:

ngrok http 3001

Trage ngrok-URL in TwiML App ein.