mirror of
http://172.20.10.11:3000/gitadmin/INSIGHT-MVP.git
synced 2026-06-24 21:36:39 +02:00
chore: project initialization with infrastructure definition and structure
- Generate SSH deployment key (Ed25519) for server access - Define complete server infrastructure (ProxmoxVE VM, Docker, networking) - Create ACCESS.md with all connection details and SSH instructions - Create INFRASTRUCTURE.md with VM setup guide and service architecture - Set up project directory structure per briefing specification - Add .env.example with all required environment variables - Add .gitignore for Node.js/Docker/TypeScript project - Create comprehensive README.md for developer onboarding - Add Summarize.md changelog - Include concept and briefing documents Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
e4c72dec21
commit
5f54bde55e
32 changed files with 878 additions and 1 deletions
77
.env.example
Normal file
77
.env.example
Normal file
|
|
@ -0,0 +1,77 @@
|
||||||
|
# ============================================================
|
||||||
|
# INSIGHT MVP - Umgebungsvariablen
|
||||||
|
# ============================================================
|
||||||
|
# Kopiere diese Datei nach .env und befuelle die Werte.
|
||||||
|
# .env wird NIEMALS in Git committed!
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
# --- Allgemein ---
|
||||||
|
NODE_ENV=development
|
||||||
|
APP_PORT=3000
|
||||||
|
APP_URL=https://insight-dev.xinion.lan
|
||||||
|
FRONTEND_URL=https://insight-dev.xinion.lan
|
||||||
|
LOG_LEVEL=info
|
||||||
|
|
||||||
|
# --- PostgreSQL ---
|
||||||
|
DB_HOST=pgbouncer
|
||||||
|
DB_PORT=6432
|
||||||
|
DB_USER=insight
|
||||||
|
DB_PASSWORD= # Sicheres Passwort setzen!
|
||||||
|
DB_NAME=platform_core
|
||||||
|
DATABASE_URL=postgresql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}
|
||||||
|
|
||||||
|
# Direktverbindung (fuer Prisma Migrate, umgeht PgBouncer)
|
||||||
|
DB_DIRECT_HOST=postgres
|
||||||
|
DB_DIRECT_PORT=5432
|
||||||
|
DATABASE_URL_DIRECT=postgresql://${DB_USER}:${DB_PASSWORD}@${DB_DIRECT_HOST}:${DB_DIRECT_PORT}/${DB_NAME}
|
||||||
|
|
||||||
|
# --- Redis ---
|
||||||
|
REDIS_HOST=redis
|
||||||
|
REDIS_PORT=6379
|
||||||
|
REDIS_PASSWORD= # Optional, aber empfohlen
|
||||||
|
|
||||||
|
# --- JWT (RS256) ---
|
||||||
|
JWT_PRIVATE_KEY_PATH=/app/keys/jwt-private.pem
|
||||||
|
JWT_PUBLIC_KEY_PATH=/app/keys/jwt-public.pem
|
||||||
|
JWT_ACCESS_TOKEN_EXPIRY=15m
|
||||||
|
JWT_REFRESH_TOKEN_EXPIRY=7d
|
||||||
|
JWT_ISSUER=insight-platform
|
||||||
|
|
||||||
|
# --- Bcrypt ---
|
||||||
|
BCRYPT_COST=12
|
||||||
|
|
||||||
|
# --- CORS ---
|
||||||
|
CORS_ORIGINS=https://insight-dev.xinion.lan
|
||||||
|
|
||||||
|
# --- Rate Limiting ---
|
||||||
|
THROTTLE_TTL=60000
|
||||||
|
THROTTLE_LIMIT=200
|
||||||
|
|
||||||
|
# --- Traefik ---
|
||||||
|
TRAEFIK_DASHBOARD_USER=admin
|
||||||
|
TRAEFIK_DASHBOARD_PASSWORD= # htpasswd Hash
|
||||||
|
|
||||||
|
# --- step-ca (mTLS) ---
|
||||||
|
STEP_CA_URL=https://step-ca:9000
|
||||||
|
STEP_CA_FINGERPRINT= # step-ca Root CA Fingerprint
|
||||||
|
|
||||||
|
# --- SMTP (fuer Einladungs-E-Mails) ---
|
||||||
|
SMTP_HOST=
|
||||||
|
SMTP_PORT=587
|
||||||
|
SMTP_USER=
|
||||||
|
SMTP_PASSWORD=
|
||||||
|
SMTP_FROM=noreply@xinion.de
|
||||||
|
|
||||||
|
# --- Observability ---
|
||||||
|
GRAFANA_ADMIN_USER=admin
|
||||||
|
GRAFANA_ADMIN_PASSWORD= # Sicheres Passwort setzen!
|
||||||
|
|
||||||
|
# --- MS SSO (Beta - noch nicht aktiv) ---
|
||||||
|
# MS_SSO_CLIENT_ENCRYPTION_KEY= # AES-256 Key fuer Client Secret Verschluesselung
|
||||||
|
|
||||||
|
# --- KI-Hilfe-Chat (optional) ---
|
||||||
|
# ANTHROPIC_API_KEY= # Claude API Key
|
||||||
|
# AI_CHAT_ENABLED=false
|
||||||
|
|
||||||
|
# --- DeepL (optional, fuer Hilfesystem-Uebersetzungen) ---
|
||||||
|
# DEEPL_API_KEY=
|
||||||
0
.forgejo/workflows/.gitkeep
Normal file
0
.forgejo/workflows/.gitkeep
Normal file
63
.gitignore
vendored
Normal file
63
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,63 @@
|
||||||
|
# Dependencies
|
||||||
|
node_modules/
|
||||||
|
.pnp
|
||||||
|
.pnp.js
|
||||||
|
|
||||||
|
# Build output
|
||||||
|
dist/
|
||||||
|
build/
|
||||||
|
*.tsbuildinfo
|
||||||
|
|
||||||
|
# Environment (NIEMALS committen!)
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
.env.*.local
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
.idea/
|
||||||
|
.vscode/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
|
||||||
|
# OS
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Docker volumes (lokal)
|
||||||
|
docker-data/
|
||||||
|
postgres-data/
|
||||||
|
redis-data/
|
||||||
|
media-uploads/
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
logs/
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
|
||||||
|
# Test coverage
|
||||||
|
coverage/
|
||||||
|
|
||||||
|
# Prisma
|
||||||
|
packages/core-service/prisma/*.db
|
||||||
|
packages/core-service/prisma/*.db-journal
|
||||||
|
|
||||||
|
# Generated Prisma Client
|
||||||
|
packages/core-service/node_modules/.prisma/
|
||||||
|
|
||||||
|
# Temporary files
|
||||||
|
tmp/
|
||||||
|
temp/
|
||||||
|
*.tmp
|
||||||
|
|
||||||
|
# Certificates (generierte Zertifikate, nicht die CA-Config)
|
||||||
|
config/step-ca/secrets/
|
||||||
|
config/step-ca/db/
|
||||||
|
*.pem
|
||||||
|
*.key
|
||||||
|
*.crt
|
||||||
|
!config/step-ca/*.example
|
||||||
|
|
||||||
|
# Backup files
|
||||||
|
*.bak
|
||||||
|
*.backup
|
||||||
7
.keys/deploy_ed25519
Normal file
7
.keys/deploy_ed25519
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||||
|
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
|
||||||
|
QyNTUxOQAAACDLk6asy8o6kyAzCeG8BBOKNiXhx94pi/jXoqXrgX4k6AAAAKBprr69aa6+
|
||||||
|
vQAAAAtzc2gtZWQyNTUxOQAAACDLk6asy8o6kyAzCeG8BBOKNiXhx94pi/jXoqXrgX4k6A
|
||||||
|
AAAECki73xblIq6Dx917rd90A5YrQwWVvp4RBMkU+RHsxNncuTpqzLyjqTIDMJ4bwEE4o2
|
||||||
|
JeHH3imL+NeipeuBfiToAAAAGWluc2lnaHQtZGVwbG95QHhpbmlvbi5sYW4BAgME
|
||||||
|
-----END OPENSSH PRIVATE KEY-----
|
||||||
1
.keys/deploy_ed25519.pub
Normal file
1
.keys/deploy_ed25519.pub
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMuTpqzLyjqTIDMJ4bwEE4o2JeHH3imL+NeipeuBfiTo insight-deploy@xinion.lan
|
||||||
BIN
CLAUDE_BRIEFING.docx
Normal file
BIN
CLAUDE_BRIEFING.docx
Normal file
Binary file not shown.
BIN
INSIGHT_Konzept_v1.0.docx
Normal file
BIN
INSIGHT_Konzept_v1.0.docx
Normal file
Binary file not shown.
206
README.md
206
README.md
|
|
@ -1,2 +1,206 @@
|
||||||
# INSIGHT-MVP
|
# INSIGHT MVP
|
||||||
|
|
||||||
|
Erweiterbare, mandantenfaehige SaaS-Business-Plattform der Xinion IT GmbH.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Inhaltsverzeichnis
|
||||||
|
|
||||||
|
- [Projektuebersicht](#projektuebersicht)
|
||||||
|
- [Voraussetzungen](#voraussetzungen)
|
||||||
|
- [Setup (Entwicklungsumgebung)](#setup-entwicklungsumgebung)
|
||||||
|
- [Services & Ports](#services--ports)
|
||||||
|
- [Projektstruktur](#projektstruktur)
|
||||||
|
- [Branching & Commits](#branching--commits)
|
||||||
|
- [Dokumentation](#dokumentation)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Projektuebersicht
|
||||||
|
|
||||||
|
INSIGHT ist eine Infrastruktur-Shell, auf die fachliche Module (erstes Modul: CRM) als isolierte Docker-Container aufgesetzt werden. Das System ist Cloud-Native und Kubernetes-ready.
|
||||||
|
|
||||||
|
**Kernprinzipien:**
|
||||||
|
- Zero-Trust (mTLS intern)
|
||||||
|
- Stateless Backend-Services
|
||||||
|
- Separate Datenbank pro Mandant (Tenant-Isolation)
|
||||||
|
- Provider-Modell fuer Authentifizierung (lokal + MS SSO)
|
||||||
|
|
||||||
|
**Tech Stack:**
|
||||||
|
TypeScript | NestJS | React + Vite | PostgreSQL | Prisma | Redis | Traefik | Docker
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Voraussetzungen
|
||||||
|
|
||||||
|
### Fuer lokale Entwicklung (MacBook)
|
||||||
|
- Git mit SSH-Zugang zu `git.xinion.lan`
|
||||||
|
- Docker Desktop oder Docker Engine
|
||||||
|
- Node.js >= 20 LTS
|
||||||
|
- npm oder yarn
|
||||||
|
|
||||||
|
### Fuer den Server (ProxmoxVE VM)
|
||||||
|
- Ubuntu 24.04 LTS
|
||||||
|
- Docker Engine + Compose Plugin (kein Docker Desktop)
|
||||||
|
- SSH-Key aus `.keys/deploy_ed25519.pub` im `authorized_keys` des `deploy`-Users
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Setup (Entwicklungsumgebung)
|
||||||
|
|
||||||
|
### 1. Repository klonen
|
||||||
|
```bash
|
||||||
|
git clone ssh://git@git.xinion.lan/gitadmin/INSIGHT-MVP.git
|
||||||
|
cd INSIGHT-MVP
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Environment konfigurieren
|
||||||
|
```bash
|
||||||
|
cp .env.example .env
|
||||||
|
# .env oeffnen und alle Werte befuellen (Passwoerter, Keys, etc.)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. JWT-Schluessel generieren
|
||||||
|
```bash
|
||||||
|
# RS256 Schluessel fuer JWT-Signierung
|
||||||
|
mkdir -p packages/core-service/keys
|
||||||
|
openssl genpkey -algorithm RSA -out packages/core-service/keys/jwt-private.pem -pkeyopt rsa_keygen_bits:2048
|
||||||
|
openssl rsa -pubout -in packages/core-service/keys/jwt-private.pem -out packages/core-service/keys/jwt-public.pem
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Services starten
|
||||||
|
```bash
|
||||||
|
# Basis-Services
|
||||||
|
docker compose up -d
|
||||||
|
|
||||||
|
# Mit Observability-Stack
|
||||||
|
docker compose -f docker-compose.yml -f docker-compose.observability.yml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Datenbank-Migration
|
||||||
|
```bash
|
||||||
|
# Core-Schema
|
||||||
|
docker compose exec core npx prisma migrate deploy --schema=./prisma/core.schema.prisma
|
||||||
|
|
||||||
|
# Tenant-Schema (wird beim Onboarding automatisch ausgefuehrt)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. Health-Checks pruefen
|
||||||
|
```bash
|
||||||
|
curl http://localhost:3000/health # Core-Service
|
||||||
|
curl http://localhost:8080 # Frontend
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7. Erster Login
|
||||||
|
- URL: https://insight-dev.xinion.lan (oder http://localhost)
|
||||||
|
- Initialer Admin-Account wird beim ersten Start via Seed-Script angelegt
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Services & Ports
|
||||||
|
|
||||||
|
| Service | Port (intern) | URL (extern via Traefik) | Beschreibung |
|
||||||
|
|---------------|---------------|----------------------------------|------------------------|
|
||||||
|
| Traefik | 80/443 | https://insight-dev.xinion.lan | API Gateway |
|
||||||
|
| Core-Service | 3000 | /api/v1/* | NestJS Backend |
|
||||||
|
| Frontend | 8080 | /* | React App |
|
||||||
|
| PostgreSQL | 5432 | - | Datenbank |
|
||||||
|
| PgBouncer | 6432 | - | Connection Pooler |
|
||||||
|
| Redis | 6379 | - | Cache & Event Bus |
|
||||||
|
| step-ca | 9000 | - | Interne CA (mTLS) |
|
||||||
|
| Grafana | 3001 | SSH-Tunnel | Monitoring Dashboards |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Projektstruktur
|
||||||
|
|
||||||
|
```
|
||||||
|
INSIGHT-MVP/
|
||||||
|
docker-compose.yml # Basis-Services
|
||||||
|
docker-compose.observability.yml # Monitoring-Stack
|
||||||
|
.env.example # Alle Umgebungsvariablen (keine Werte!)
|
||||||
|
.gitignore
|
||||||
|
README.md # <- Du bist hier
|
||||||
|
|
||||||
|
.keys/ # SSH Deployment Keys
|
||||||
|
deploy_ed25519
|
||||||
|
deploy_ed25519.pub
|
||||||
|
|
||||||
|
docs/ # Projektdokumentation
|
||||||
|
INFRASTRUCTURE.md # Server & VM Konfiguration
|
||||||
|
ACCESS.md # Zugangsdaten & SSH-Infos
|
||||||
|
|
||||||
|
packages/
|
||||||
|
core-service/ # NestJS Backend
|
||||||
|
src/
|
||||||
|
core/
|
||||||
|
auth/ # Auth-Service (Provider-Modell)
|
||||||
|
users/ # User-Verwaltung
|
||||||
|
tenants/ # Tenant-Verwaltung
|
||||||
|
modules/ # Module-Registry
|
||||||
|
common/
|
||||||
|
guards/ # JwtGuard, RolesGuard, ScopeGuard
|
||||||
|
decorators/ # @Public(), @Roles(), @RequireScope()
|
||||||
|
filters/ # GlobalExceptionFilter
|
||||||
|
interceptors/ # Logging, Response-Transformation
|
||||||
|
config/ # Env-Validierung (class-validator)
|
||||||
|
prisma/ # PrismaService + TenantPrismaService
|
||||||
|
prisma/
|
||||||
|
core.schema.prisma # platform_core Tabellen
|
||||||
|
tenant.schema.prisma # Tenant-DB Tabellen
|
||||||
|
|
||||||
|
frontend/ # React + Vite
|
||||||
|
src/
|
||||||
|
shell/ # App-Shell (Layout, Routing)
|
||||||
|
auth/ # Login, 2FA, Token-Management
|
||||||
|
admin/ # Admin-Bereich
|
||||||
|
components/ # Shared UI-Komponenten
|
||||||
|
|
||||||
|
config/ # Service-Konfigurationen
|
||||||
|
traefik/
|
||||||
|
prometheus/
|
||||||
|
step-ca/
|
||||||
|
|
||||||
|
.forgejo/
|
||||||
|
workflows/ # CI/CD Pipelines
|
||||||
|
ci.yml
|
||||||
|
develop.yml
|
||||||
|
release.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Branching & Commits
|
||||||
|
|
||||||
|
### Branching-Strategie: GitFlow
|
||||||
|
|
||||||
|
| Branch | Zweck |
|
||||||
|
|------------- |------------------------------------------|
|
||||||
|
| `main` | Produktion (nur via Merge, geschuetzt) |
|
||||||
|
| `develop` | Integration (nur via Merge, geschuetzt) |
|
||||||
|
| `feature/*` | Neue Features |
|
||||||
|
| `fix/*` | Bugfixes |
|
||||||
|
| `hotfix/*` | Kritische Fixes auf main |
|
||||||
|
|
||||||
|
### Commit-Format: Conventional Commits
|
||||||
|
```
|
||||||
|
feat: Neues Feature
|
||||||
|
fix: Bugfix
|
||||||
|
chore: Tooling, Dependencies
|
||||||
|
docs: Dokumentation
|
||||||
|
refactor: Refactoring ohne Funktionsaenderung
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dokumentation
|
||||||
|
|
||||||
|
| Dokument | Beschreibung |
|
||||||
|
|---------------------------------|-------------------------------------------|
|
||||||
|
| `README.md` | Dieses Dokument (Onboarding) |
|
||||||
|
| `docs/INFRASTRUCTURE.md` | Server-Infrastruktur & VM-Setup |
|
||||||
|
| `docs/ACCESS.md` | Zugangsdaten & SSH-Verbindungen |
|
||||||
|
| `INSIGHT_Konzept_v1.0.docx` | Vollstaendiges Konzeptdokument (23 Kap.) |
|
||||||
|
| `CLAUDE_BRIEFING.docx` | Entwickler-Briefing (Kurzreferenz) |
|
||||||
|
| `Summarize.md` | Aenderungsprotokoll (aktueller Stand) |
|
||||||
|
| `RUNBOOK.md` | Disaster Recovery Anleitung (folgt) |
|
||||||
|
|
|
||||||
66
Summarize.md
Normal file
66
Summarize.md
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
# INSIGHT MVP - Aenderungsprotokoll
|
||||||
|
|
||||||
|
## Stand: 2026-03-08
|
||||||
|
|
||||||
|
### Aktueller Sprint: Sprint 1 (Alpha)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Aenderungen in dieser Session
|
||||||
|
|
||||||
|
#### Projektinitialisierung & Infrastruktur-Definition
|
||||||
|
|
||||||
|
**Was wurde gemacht:**
|
||||||
|
|
||||||
|
1. **SSH Deployment Key erstellt**
|
||||||
|
- Ed25519-Schluessel unter `.keys/deploy_ed25519` generiert
|
||||||
|
- Public Key muss auf dem Entwicklungsserver und in Forgejo hinterlegt werden
|
||||||
|
- Key-Kommentar: `insight-deploy@xinion.lan`
|
||||||
|
|
||||||
|
2. **Infrastruktur-Definition erstellt** (`docs/INFRASTRUCTURE.md`)
|
||||||
|
- ProxmoxVE VM-Spezifikation: Ubuntu 24.04 LTS, 4 vCPU, 8 GB RAM, 60 GB SSD
|
||||||
|
- Docker-Netzwerk-Architektur mit 3 isolierten Netzwerken
|
||||||
|
- Komplette Service-Landschaft definiert (Traefik, Core, Frontend, PostgreSQL, PgBouncer, Redis, step-ca)
|
||||||
|
- Observability-Stack definiert (Prometheus, Grafana, Loki, Tempo, Promtail, cAdvisor)
|
||||||
|
- Schritt-fuer-Schritt VM-Setup Anleitung
|
||||||
|
|
||||||
|
3. **Zugangsdaten-Dokument erstellt** (`docs/ACCESS.md`)
|
||||||
|
- Git Repository Zugangsdaten
|
||||||
|
- SSH-Key Dokumentation und Verwendung
|
||||||
|
- Server-Zugangsdaten (Platzhalter fuer IP)
|
||||||
|
- Alle Service-Ports dokumentiert
|
||||||
|
- Deployment-Pfad dokumentiert
|
||||||
|
- Wichtige Befehle (MacBook & Server)
|
||||||
|
|
||||||
|
4. **Projektstruktur aufgesetzt**
|
||||||
|
- Verzeichnisstruktur gemaess Briefing angelegt
|
||||||
|
- packages/core-service/ (NestJS Backend)
|
||||||
|
- packages/frontend/ (React + Vite)
|
||||||
|
- config/ (Traefik, Prometheus, step-ca)
|
||||||
|
- .forgejo/workflows/ (CI/CD)
|
||||||
|
|
||||||
|
5. **Basis-Konfigurationsdateien erstellt**
|
||||||
|
- `.gitignore` - alle relevanten Ausschluesse
|
||||||
|
- `.env.example` - alle Umgebungsvariablen dokumentiert (ohne Werte)
|
||||||
|
- `README.md` - vollstaendiges Onboarding-Dokument
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Naechste Schritte
|
||||||
|
|
||||||
|
- [ ] VM in ProxmoxVE erstellen und konfigurieren
|
||||||
|
- [ ] SSH Deploy Key auf Server und in Forgejo hinterlegen
|
||||||
|
- [ ] `docker-compose.yml` erstellen (alle Basis-Services)
|
||||||
|
- [ ] `docker-compose.observability.yml` erstellen
|
||||||
|
- [ ] NestJS Core-Service implementieren (Auth, Users, Tenants)
|
||||||
|
- [ ] Prisma-Schemas erstellen (core + tenant)
|
||||||
|
- [ ] React Frontend-Shell implementieren
|
||||||
|
- [ ] CI/CD Pipelines in Forgejo Actions definieren
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Offene Fragen / Abhaengigkeiten
|
||||||
|
|
||||||
|
- Server-IP wird erst bei VM-Erstellung vergeben
|
||||||
|
- DNS-Eintraege (insight-dev.xinion.lan) muessen konfiguriert werden
|
||||||
|
- Forgejo Deploy Key muss manuell hinterlegt werden
|
||||||
0
config/prometheus/.gitkeep
Normal file
0
config/prometheus/.gitkeep
Normal file
0
config/step-ca/.gitkeep
Normal file
0
config/step-ca/.gitkeep
Normal file
0
config/traefik/.gitkeep
Normal file
0
config/traefik/.gitkeep
Normal file
202
docs/ACCESS.md
Normal file
202
docs/ACCESS.md
Normal file
|
|
@ -0,0 +1,202 @@
|
||||||
|
# INSIGHT MVP - Zugangsdaten & Server-Zugriff
|
||||||
|
|
||||||
|
> **Dieses Dokument wird laufend aktualisiert und enthaelt alle relevanten
|
||||||
|
> Zugangsinformationen fuer das Projekt.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Git Repository
|
||||||
|
|
||||||
|
| Parameter | Wert |
|
||||||
|
|------------------|-----------------------------------------------------|
|
||||||
|
| Git-Server | Forgejo (self-hosted) |
|
||||||
|
| URL | `git.xinion.lan` |
|
||||||
|
| Repository (SSH) | `ssh://git@git.xinion.lan/gitadmin/INSIGHT-MVP.git` |
|
||||||
|
| Repository (HTTP)| `https://git.xinion.lan/gitadmin/INSIGHT-MVP` |
|
||||||
|
| Organisation | `gitadmin` |
|
||||||
|
| Zugriff | SSH Key-basiert |
|
||||||
|
| CI/CD | Forgejo Actions (GitHub Actions kompatibel) |
|
||||||
|
| Container Registry | `git.xinion.lan` (Forgejo built-in) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. SSH Deployment Key
|
||||||
|
|
||||||
|
Der Deployment Key liegt im Repository unter `.keys/`:
|
||||||
|
|
||||||
|
| Datei | Beschreibung |
|
||||||
|
|------------------------------|-----------------------|
|
||||||
|
| `.keys/deploy_ed25519` | Private Key (Ed25519) |
|
||||||
|
| `.keys/deploy_ed25519.pub` | Public Key |
|
||||||
|
|
||||||
|
### Public Key (zur Hinterlegung auf Servern)
|
||||||
|
```
|
||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMuTpqzLyjqTIDMJ4bwEE4o2JeHH3imL+NeipeuBfiTo insight-deploy@xinion.lan
|
||||||
|
```
|
||||||
|
|
||||||
|
### SSH-Verbindung zum Server
|
||||||
|
```bash
|
||||||
|
# Verbindung zum Entwicklungsserver:
|
||||||
|
ssh -i .keys/deploy_ed25519 deploy@<SERVER-IP>
|
||||||
|
|
||||||
|
# Mit SSH-Config (empfohlen):
|
||||||
|
# Eintrag in ~/.ssh/config:
|
||||||
|
Host insight-dev
|
||||||
|
HostName <SERVER-IP>
|
||||||
|
User deploy
|
||||||
|
IdentityFile ~/git.xinion.lan/INSIGHT-MVP/.keys/deploy_ed25519
|
||||||
|
StrictHostKeyChecking accept-new
|
||||||
|
```
|
||||||
|
|
||||||
|
### Wo der Public Key hinterlegt werden muss
|
||||||
|
1. **Entwicklungsserver (VM)**: `/home/deploy/.ssh/authorized_keys`
|
||||||
|
2. **Forgejo**: Repository Settings > Deploy Keys (fuer CI/CD)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Entwicklungsserver (ProxmoxVE VM)
|
||||||
|
|
||||||
|
| Parameter | Wert |
|
||||||
|
|------------------|-----------------------------------------|
|
||||||
|
| **Hostname** | `insight-dev-01` |
|
||||||
|
| **OS** | Ubuntu 24.04 LTS |
|
||||||
|
| **IP** | _wird bei VM-Erstellung vergeben_ |
|
||||||
|
| **SSH-Port** | 22 |
|
||||||
|
| **SSH-User** | `deploy` |
|
||||||
|
| **SSH-Key** | `.keys/deploy_ed25519` |
|
||||||
|
| **Docker** | Docker Engine + Compose Plugin |
|
||||||
|
| **Projekt-Pfad** | `/home/deploy/insight/` |
|
||||||
|
|
||||||
|
### Schnellzugriff nach VM-Setup
|
||||||
|
```bash
|
||||||
|
# SSH auf den Server
|
||||||
|
ssh -i .keys/deploy_ed25519 deploy@<SERVER-IP>
|
||||||
|
|
||||||
|
# Status aller Container pruefen
|
||||||
|
docker compose ps
|
||||||
|
|
||||||
|
# Logs eines Services
|
||||||
|
docker compose logs -f core
|
||||||
|
|
||||||
|
# Neustart aller Services
|
||||||
|
docker compose restart
|
||||||
|
|
||||||
|
# Nur Backend neustarten
|
||||||
|
docker compose restart core
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Service-Ports (auf der VM)
|
||||||
|
|
||||||
|
| Service | Interner Port | Externer Port | URL |
|
||||||
|
|-----------------|---------------|---------------|----------------------------------|
|
||||||
|
| Traefik (HTTP) | 80 | 80 | http://insight-dev.xinion.lan |
|
||||||
|
| Traefik (HTTPS) | 443 | 443 | https://insight-dev.xinion.lan |
|
||||||
|
| Traefik Dashboard | 8080 | - | Nur intern |
|
||||||
|
| Core-Service | 3000 | - | Via Traefik: /api/v1/* |
|
||||||
|
| Frontend | 8080 | - | Via Traefik: /* |
|
||||||
|
| PostgreSQL | 5432 | - | Nur intern (Docker-Netzwerk) |
|
||||||
|
| PgBouncer | 6432 | - | Nur intern (Docker-Netzwerk) |
|
||||||
|
| Redis | 6379 | - | Nur intern (Docker-Netzwerk) |
|
||||||
|
| step-ca | 9000 | - | Nur intern (Docker-Netzwerk) |
|
||||||
|
|
||||||
|
### Observability (nur intern, kein oeffentlicher Zugriff)
|
||||||
|
|
||||||
|
| Service | Port | Zugriff |
|
||||||
|
|-----------------|-------|----------------------------------|
|
||||||
|
| Grafana | 3001 | SSH-Tunnel: `ssh -L 3001:localhost:3001 deploy@<IP>` |
|
||||||
|
| Prometheus | 9090 | Nur intern |
|
||||||
|
| Loki | 3100 | Nur intern |
|
||||||
|
| Tempo | 3200 | Nur intern |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Datenbank-Zugangsdaten
|
||||||
|
|
||||||
|
> **Echte Passwoerter stehen in der `.env`-Datei auf dem Server.
|
||||||
|
> Niemals in Git committen!**
|
||||||
|
|
||||||
|
| Parameter | Wert (Platzhalter) |
|
||||||
|
|-------------------|---------------------------------|
|
||||||
|
| DB-Host | `pgbouncer` (via Docker-Netzwerk) |
|
||||||
|
| DB-Port | `6432` |
|
||||||
|
| Core-DB-Name | `platform_core` |
|
||||||
|
| Tenant-DB-Schema | `tenant_{slug}` |
|
||||||
|
| DB-User | Siehe `.env` -> `DB_USER` |
|
||||||
|
| DB-Passwort | Siehe `.env` -> `DB_PASSWORD` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Container Registry
|
||||||
|
|
||||||
|
| Parameter | Wert |
|
||||||
|
|------------------|-----------------------------------------------------|
|
||||||
|
| Registry-URL | `git.xinion.lan` |
|
||||||
|
| Image-Prefix | `git.xinion.lan/gitadmin/insight-{service}` |
|
||||||
|
| Authentifizierung| Forgejo Login-Credentials |
|
||||||
|
|
||||||
|
### Image-Namen
|
||||||
|
```
|
||||||
|
git.xinion.lan/gitadmin/insight-core:latest
|
||||||
|
git.xinion.lan/gitadmin/insight-core:develop
|
||||||
|
git.xinion.lan/gitadmin/insight-core:v0.1.0
|
||||||
|
git.xinion.lan/gitadmin/insight-frontend:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Deployment-Pfad
|
||||||
|
|
||||||
|
```
|
||||||
|
MacBook (Entwicklung)
|
||||||
|
|
|
||||||
|
| git push
|
||||||
|
v
|
||||||
|
Forgejo (git.xinion.lan)
|
||||||
|
|
|
||||||
|
| Forgejo Actions CI/CD
|
||||||
|
| - Lint, Type-Check, Tests, Build
|
||||||
|
| - Docker Image bauen & pushen
|
||||||
|
v
|
||||||
|
Server (insight-dev-01)
|
||||||
|
|
|
||||||
|
| docker compose pull && docker compose up -d
|
||||||
|
v
|
||||||
|
Laufende Anwendung
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Wichtige Befehle
|
||||||
|
|
||||||
|
### Vom MacBook aus
|
||||||
|
```bash
|
||||||
|
# Code pushen
|
||||||
|
git push origin develop
|
||||||
|
|
||||||
|
# SSH auf Server
|
||||||
|
ssh -i .keys/deploy_ed25519 deploy@<SERVER-IP>
|
||||||
|
|
||||||
|
# Grafana oeffnen (SSH-Tunnel)
|
||||||
|
ssh -L 3001:localhost:3001 -i .keys/deploy_ed25519 deploy@<SERVER-IP>
|
||||||
|
# Dann im Browser: http://localhost:3001
|
||||||
|
```
|
||||||
|
|
||||||
|
### Auf dem Server
|
||||||
|
```bash
|
||||||
|
# Alle Services starten
|
||||||
|
docker compose up -d
|
||||||
|
|
||||||
|
# Mit Observability
|
||||||
|
docker compose -f docker-compose.yml -f docker-compose.observability.yml up -d
|
||||||
|
|
||||||
|
# Health-Check
|
||||||
|
curl http://localhost:3000/health
|
||||||
|
|
||||||
|
# Datenbank-Migration
|
||||||
|
docker compose exec core npx prisma migrate deploy
|
||||||
|
|
||||||
|
# Logs folgen
|
||||||
|
docker compose logs -f --tail=100
|
||||||
|
```
|
||||||
257
docs/INFRASTRUCTURE.md
Normal file
257
docs/INFRASTRUCTURE.md
Normal file
|
|
@ -0,0 +1,257 @@
|
||||||
|
# INSIGHT MVP - Infrastruktur-Definition
|
||||||
|
|
||||||
|
## 1. Uebersicht
|
||||||
|
|
||||||
|
Die gesamte INSIGHT-Plattform laeuft auf einer ProxmoxVE-VM im internen Netzwerk.
|
||||||
|
Alle Services werden als Docker-Container betrieben.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. VM-Konfiguration (ProxmoxVE)
|
||||||
|
|
||||||
|
| Komponente | Spezifikation |
|
||||||
|
|-----------------|----------------------------------------|
|
||||||
|
| **Hostname** | `insight-dev-01` |
|
||||||
|
| **OS** | Ubuntu 24.04 LTS (Server) |
|
||||||
|
| **CPU** | 4 vCPUs |
|
||||||
|
| **RAM** | 8 GB (16 GB empfohlen) |
|
||||||
|
| **Storage** | 60 GB SSD |
|
||||||
|
| **Netzwerk** | Feste interne IP (wird bei Setup vergeben) |
|
||||||
|
| **SSH-Zugang** | Key-basiert (Ed25519), kein Passwort-Login |
|
||||||
|
| **User** | `deploy` (non-root, Mitglied der `docker`-Gruppe) |
|
||||||
|
|
||||||
|
### Betriebssystem-Hardening
|
||||||
|
|
||||||
|
- SSH: nur Key-basiert (`PasswordAuthentication no`)
|
||||||
|
- Firewall (ufw):
|
||||||
|
- Port 22 (SSH) - nur internes Netzwerk
|
||||||
|
- Port 80 (HTTP -> Redirect auf HTTPS)
|
||||||
|
- Port 443 (HTTPS)
|
||||||
|
- Alle anderen Ports: DENY
|
||||||
|
- Automatische Sicherheitsupdates: `unattended-upgrades` aktiviert
|
||||||
|
- Fail2ban fuer SSH-Brute-Force-Schutz
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Software auf der VM
|
||||||
|
|
||||||
|
| Software | Version | Installationsmethode |
|
||||||
|
|---------------------|-------------|--------------------------------|
|
||||||
|
| Docker Engine | >= 27.x | Official Docker APT Repository |
|
||||||
|
| Docker Compose | Plugin | Mitgeliefert mit Docker Engine |
|
||||||
|
| Git | >= 2.x | APT |
|
||||||
|
| ufw | Aktuell | APT (vorinstalliert) |
|
||||||
|
| fail2ban | Aktuell | APT |
|
||||||
|
| unattended-upgrades | Aktuell | APT (vorinstalliert) |
|
||||||
|
|
||||||
|
**Kein** Docker Desktop, kein Node.js, kein npm auf der VM.
|
||||||
|
Alles laeuft in Containern.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Docker-Netzwerk-Architektur
|
||||||
|
|
||||||
|
```
|
||||||
|
Internet / Internes Netz
|
||||||
|
|
|
||||||
|
[ Port 80/443 ]
|
||||||
|
|
|
||||||
|
+-------v--------+
|
||||||
|
| Traefik | API Gateway, SSL-Terminierung,
|
||||||
|
| (Gateway) | Rate Limiting, mTLS-Terminierung
|
||||||
|
+---+-------+----+
|
||||||
|
| |
|
||||||
|
+---------+ +---------+
|
||||||
|
| |
|
||||||
|
+-------v--------+ +-------v--------+
|
||||||
|
| Core-Service | | Frontend |
|
||||||
|
| (NestJS) | | (React/Vite) |
|
||||||
|
| Port: 3000 | | Port: 8080 |
|
||||||
|
+---+--------+----+ +----------------+
|
||||||
|
| |
|
||||||
|
+-----v--+ +--v------+
|
||||||
|
| Redis | | PgBouncer|
|
||||||
|
| :6379 | | :6432 |
|
||||||
|
+----+----+ +----+-----+
|
||||||
|
| |
|
||||||
|
| +----v------+
|
||||||
|
| | PostgreSQL |
|
||||||
|
| | :5432 |
|
||||||
|
+-------+------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
### Docker-Netzwerke
|
||||||
|
|
||||||
|
| Netzwerk | Zweck |
|
||||||
|
|---------------|-------------------------------------------------|
|
||||||
|
| `insight-web` | Traefik <-> Core-Service, Frontend (extern erreichbar) |
|
||||||
|
| `insight-db` | Core-Service <-> PgBouncer <-> PostgreSQL (intern) |
|
||||||
|
| `insight-cache`| Core-Service <-> Redis (intern) |
|
||||||
|
|
||||||
|
### mTLS (step-ca)
|
||||||
|
|
||||||
|
Alle interne Kommunikation zwischen Containern wird ueber mTLS abgesichert.
|
||||||
|
step-ca (Smallstep) fungiert als interne Certificate Authority.
|
||||||
|
|
||||||
|
| Komponente | Zertifikat |
|
||||||
|
|---------------|-------------------------------|
|
||||||
|
| Traefik | Wildcard fuer externe Domain |
|
||||||
|
| Core-Service | `core-service.insight.local` |
|
||||||
|
| Frontend | `frontend.insight.local` |
|
||||||
|
| PostgreSQL | `postgres.insight.local` |
|
||||||
|
| Redis | `redis.insight.local` |
|
||||||
|
| PgBouncer | `pgbouncer.insight.local` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Container-Services (docker-compose.yml)
|
||||||
|
|
||||||
|
| Service | Image | Port (intern) | Port (extern) | Beschreibung |
|
||||||
|
|---------------|--------------------------------|---------------|---------------|-------------------------------|
|
||||||
|
| `traefik` | traefik:3 | 80, 443, 8080 | 80, 443 | API Gateway, Reverse Proxy |
|
||||||
|
| `core` | insight-core:latest | 3000 | - | NestJS Backend |
|
||||||
|
| `frontend` | insight-frontend:latest | 8080 | - | React App (Nginx served) |
|
||||||
|
| `postgres` | postgres:16-alpine | 5432 | - | Datenbank |
|
||||||
|
| `pgbouncer` | edoburu/pgbouncer:latest | 6432 | - | Connection Pooler |
|
||||||
|
| `redis` | redis:7-alpine | 6379 | - | Cache, Sessions, Event Bus |
|
||||||
|
| `step-ca` | smallstep/step-ca:latest | 9000 | - | Interne Certificate Authority |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Observability-Stack (docker-compose.observability.yml)
|
||||||
|
|
||||||
|
| Service | Image | Port (intern) | Beschreibung |
|
||||||
|
|------------------|---------------------------------|---------------|-----------------------------|
|
||||||
|
| `prometheus` | prom/prometheus:latest | 9090 | Metrics-Storage |
|
||||||
|
| `grafana` | grafana/grafana:latest | 3001 | Dashboards & Alerting |
|
||||||
|
| `loki` | grafana/loki:latest | 3100 | Log-Storage |
|
||||||
|
| `tempo` | grafana/tempo:latest | 3200, 4317 | Tracing-Backend |
|
||||||
|
| `promtail` | grafana/promtail:latest | - | Log-Collector |
|
||||||
|
| `cadvisor` | gcr.io/cadvisor/cadvisor:latest | 8081 | Container-Metrics |
|
||||||
|
| `postgres-exp` | prometheuscommunity/postgres-exporter | 9187 | DB-Metrics |
|
||||||
|
|
||||||
|
**Grafana ist NICHT oeffentlich erreichbar** - nur ueber SSH-Tunnel oder internes Netz.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Datenbank-Struktur
|
||||||
|
|
||||||
|
```
|
||||||
|
PostgreSQL-Server
|
||||||
|
platform_core <- Einmalig: Tenants, Users, Roles, Modules, Help
|
||||||
|
tenant_{slug} <- Pro Mandant (z.B. tenant_acme_corp)
|
||||||
|
```
|
||||||
|
|
||||||
|
| Datenbank | Zweck |
|
||||||
|
|-----------------|-----------------------------------------------------|
|
||||||
|
| `platform_core` | Plattform-Verwaltung (Users, Tenants, Roles, Modules) |
|
||||||
|
| `tenant_{slug}` | Mandant-Daten (Profile, Stammdaten, Moduldaten) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. DNS / Domains
|
||||||
|
|
||||||
|
| Eintrag | Ziel | Zweck |
|
||||||
|
|----------------------------|--------------------|-------------------------------|
|
||||||
|
| `insight-dev.xinion.lan` | VM-IP | Entwicklungs-Frontend |
|
||||||
|
| `api.insight-dev.xinion.lan` | VM-IP | API-Endpunkt |
|
||||||
|
| `git.xinion.lan` | Forgejo-Server | Git Repository & CI/CD |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Backup (Alpha/Dev)
|
||||||
|
|
||||||
|
| Was | Wohin | Frequenz |
|
||||||
|
|----------------------|----------------------------------------|-----------|
|
||||||
|
| PostgreSQL (alle DBs)| Separates ProxmoxVE Volume | Taeglich |
|
||||||
|
| Media-Dateien | Separates ProxmoxVE Volume | Taeglich |
|
||||||
|
| Konfiguration | Git Repository (ohne .env) | Per Commit|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. VM-Setup Anleitung (Schritt fuer Schritt)
|
||||||
|
|
||||||
|
### 10.1 VM in ProxmoxVE erstellen
|
||||||
|
```bash
|
||||||
|
# ProxmoxVE Web-UI oder CLI:
|
||||||
|
# - Template: Ubuntu 24.04 LTS Cloud-Init
|
||||||
|
# - CPU: 4 Cores
|
||||||
|
# - RAM: 8192 MB
|
||||||
|
# - Disk: 60 GB (SCSI, SSD-backed)
|
||||||
|
# - Network: vmbr0, DHCP oder feste IP
|
||||||
|
```
|
||||||
|
|
||||||
|
### 10.2 Basis-Setup nach Erstinstallation
|
||||||
|
```bash
|
||||||
|
# System aktualisieren
|
||||||
|
sudo apt update && sudo apt upgrade -y
|
||||||
|
|
||||||
|
# Deploy-User anlegen
|
||||||
|
sudo adduser --disabled-password deploy
|
||||||
|
sudo usermod -aG sudo deploy
|
||||||
|
|
||||||
|
# SSH-Key fuer Deploy-User hinterlegen
|
||||||
|
sudo mkdir -p /home/deploy/.ssh
|
||||||
|
sudo cp /path/to/deploy_ed25519.pub /home/deploy/.ssh/authorized_keys
|
||||||
|
sudo chown -R deploy:deploy /home/deploy/.ssh
|
||||||
|
sudo chmod 700 /home/deploy/.ssh
|
||||||
|
sudo chmod 600 /home/deploy/.ssh/authorized_keys
|
||||||
|
|
||||||
|
# SSH haerten
|
||||||
|
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
|
||||||
|
sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
|
||||||
|
sudo systemctl restart sshd
|
||||||
|
```
|
||||||
|
|
||||||
|
### 10.3 Firewall
|
||||||
|
```bash
|
||||||
|
sudo ufw default deny incoming
|
||||||
|
sudo ufw default allow outgoing
|
||||||
|
sudo ufw allow 22/tcp # SSH
|
||||||
|
sudo ufw allow 80/tcp # HTTP
|
||||||
|
sudo ufw allow 443/tcp # HTTPS
|
||||||
|
sudo ufw enable
|
||||||
|
```
|
||||||
|
|
||||||
|
### 10.4 Docker installieren
|
||||||
|
```bash
|
||||||
|
# Docker Official GPG Key
|
||||||
|
sudo apt install -y ca-certificates curl
|
||||||
|
sudo install -m 0755 -d /etc/apt/keyrings
|
||||||
|
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
|
||||||
|
-o /etc/apt/keyrings/docker.asc
|
||||||
|
sudo chmod a+r /etc/apt/keyrings/docker.asc
|
||||||
|
|
||||||
|
# Docker Repo hinzufuegen
|
||||||
|
echo "deb [arch=$(dpkg --print-architecture) \
|
||||||
|
signed-by=/etc/apt/keyrings/docker.asc] \
|
||||||
|
https://download.docker.com/linux/ubuntu \
|
||||||
|
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
|
||||||
|
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||||
|
|
||||||
|
# Docker installieren
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install -y docker-ce docker-ce-cli containerd.io \
|
||||||
|
docker-buildx-plugin docker-compose-plugin
|
||||||
|
|
||||||
|
# Deploy-User zur docker-Gruppe
|
||||||
|
sudo usermod -aG docker deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
### 10.5 Fail2ban
|
||||||
|
```bash
|
||||||
|
sudo apt install -y fail2ban
|
||||||
|
sudo systemctl enable fail2ban
|
||||||
|
sudo systemctl start fail2ban
|
||||||
|
```
|
||||||
|
|
||||||
|
### 10.6 Projekt deployen
|
||||||
|
```bash
|
||||||
|
# Als deploy-User:
|
||||||
|
su - deploy
|
||||||
|
git clone git@git.xinion.lan:gitadmin/INSIGHT-MVP.git ~/insight
|
||||||
|
cd ~/insight
|
||||||
|
cp .env.example .env
|
||||||
|
# .env befuellen mit echten Werten
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
0
packages/core-service/prisma/.gitkeep
Normal file
0
packages/core-service/prisma/.gitkeep
Normal file
0
packages/core-service/src/common/decorators/.gitkeep
Normal file
0
packages/core-service/src/common/decorators/.gitkeep
Normal file
0
packages/core-service/src/common/filters/.gitkeep
Normal file
0
packages/core-service/src/common/filters/.gitkeep
Normal file
0
packages/core-service/src/common/guards/.gitkeep
Normal file
0
packages/core-service/src/common/guards/.gitkeep
Normal file
0
packages/core-service/src/common/interceptors/.gitkeep
Normal file
0
packages/core-service/src/common/interceptors/.gitkeep
Normal file
0
packages/core-service/src/config/.gitkeep
Normal file
0
packages/core-service/src/config/.gitkeep
Normal file
0
packages/core-service/src/core/auth/.gitkeep
Normal file
0
packages/core-service/src/core/auth/.gitkeep
Normal file
0
packages/core-service/src/core/modules/.gitkeep
Normal file
0
packages/core-service/src/core/modules/.gitkeep
Normal file
0
packages/core-service/src/core/tenants/.gitkeep
Normal file
0
packages/core-service/src/core/tenants/.gitkeep
Normal file
0
packages/core-service/src/core/users/.gitkeep
Normal file
0
packages/core-service/src/core/users/.gitkeep
Normal file
0
packages/core-service/src/prisma/.gitkeep
Normal file
0
packages/core-service/src/prisma/.gitkeep
Normal file
0
packages/frontend/public/.gitkeep
Normal file
0
packages/frontend/public/.gitkeep
Normal file
0
packages/frontend/src/admin/.gitkeep
Normal file
0
packages/frontend/src/admin/.gitkeep
Normal file
0
packages/frontend/src/auth/.gitkeep
Normal file
0
packages/frontend/src/auth/.gitkeep
Normal file
0
packages/frontend/src/components/HelpPanel/.gitkeep
Normal file
0
packages/frontend/src/components/HelpPanel/.gitkeep
Normal file
0
packages/frontend/src/components/HelpTooltip/.gitkeep
Normal file
0
packages/frontend/src/components/HelpTooltip/.gitkeep
Normal file
0
packages/frontend/src/shell/.gitkeep
Normal file
0
packages/frontend/src/shell/.gitkeep
Normal file
0
templates/cv/default/.gitkeep
Normal file
0
templates/cv/default/.gitkeep
Normal file
Loading…
Add table
Reference in a new issue