bae705aa97
- Add NFC ePassport roadmap (ICAO 9303, eIDAS) - Add TensorFlow.js edge face detection (BlazeFace) - Add structured audit logger (GDPR-compliant) - Risk scoring support Part of KYC Apple Native UX v1.1.0
235 lines
4.7 KiB
Markdown
235 lines
4.7 KiB
Markdown
# Self-Hosted Infrastructure
|
|
|
|
> Allt är self-hosted. Inga externa beroenden.
|
|
|
|
---
|
|
|
|
## Filosofi
|
|
|
|
**"Om vi inte kontrollerar infrastrukturen, kontrollerar vi inte produkten."**
|
|
|
|
Allt körs på egna servrar. Inga externa AI-tjänster. Inga externa lagringstjänster. Inga externa monitoreringstjänster.
|
|
|
|
---
|
|
|
|
## Infrastruktur
|
|
|
|
### Core Services
|
|
|
|
| Tjänst | Teknik | Port | Beskrivning |
|
|
|---|---|---|---|
|
|
| **Database** | PostgreSQL + PostGIS | 5432 | Huvuddatabas |
|
|
| **Cache** | Redis | 6379 | Cache + Message broker |
|
|
| **Object Storage** | MinIO | 9000/9001 | S3-kompatibel lagring |
|
|
| **Search** | Elasticsearch | 9200 | Fulltextsökning |
|
|
| **Message Queue** | RabbitMQ | 5672/15672 | Advanced messaging |
|
|
|
|
### Monitoring & Logging
|
|
|
|
| Tjänst | Teknik | Port | Beskrivning |
|
|
|---|---|---|---|
|
|
| **Metrics** | Prometheus | 9090 | Metrikinsamling |
|
|
| **Dashboards** | Grafana | 3000 | Visualisering |
|
|
| **Log Aggregation** | Loki | 3100 | Logghantering |
|
|
| **Log Collector** | Promtail | 9080 | Loggskrapning |
|
|
|
|
### Networking
|
|
|
|
| Tjänst | Teknik | Port | Beskrivning |
|
|
|---|---|---|---|
|
|
| **Reverse Proxy** | Nginx | 80/443 | Lastbalansering |
|
|
| **VPN/Mesh** | Headscale | 8080 | Zero-trust nätverk |
|
|
|
|
### DevOps
|
|
|
|
| Tjänst | Teknik | Port | Beskrivning |
|
|
|---|---|---|---|
|
|
| **CI/CD** | Jenkins | 8081 | Bygg och deploy |
|
|
| **Container Registry** | Docker Registry | 5000 | Image-lagring |
|
|
| **Backup** | Restic | — | Krypterade backups |
|
|
|
|
### Application
|
|
|
|
| Tjänst | Teknik | Port | Beskrivning |
|
|
|---|---|---|---|
|
|
| **API** | FastAPI | 8000 | Huvudapplikation |
|
|
| **Worker** | Celery | — | Bakgrundsjobb |
|
|
| **Scheduler** | Celery Beat | — | Schemalagda uppgifter |
|
|
|
|
---
|
|
|
|
## Snabbstart
|
|
|
|
```bash
|
|
# 1. Klona repo
|
|
git clone <repo-url>
|
|
cd iom
|
|
|
|
# 2. Konfigurera miljö
|
|
cp .env.example .env
|
|
# Redigera .env med dina värden
|
|
|
|
# 3. Starta allt
|
|
docker-compose -f docker-compose.selfhosted.yml up -d
|
|
|
|
# 4. Verifiera
|
|
docker-compose -f docker-compose.selfhosted.yml ps
|
|
|
|
# 5. Skapa första användare
|
|
curl -X POST http://localhost:8000/auth/register \
|
|
-d '{"username": "admin", "password": "***", "role": "admin"}'
|
|
```
|
|
|
|
---
|
|
|
|
## Tjänster
|
|
|
|
### MinIO (Object Storage)
|
|
|
|
- **URL:** http://localhost:9000
|
|
- **Console:** http://localhost:9001
|
|
- **Buckets:** iom-images, iom-exports
|
|
- **Användning:** Bilder, exports, backups
|
|
|
|
### Elasticsearch (Search)
|
|
|
|
- **URL:** http://localhost:9200
|
|
- **Användning:** Fulltextsökning, logganalys
|
|
|
|
### RabbitMQ (Message Queue)
|
|
|
|
- **URL:** http://localhost:15672
|
|
- **Användning:** Advanced messaging, event-driven arkitektur
|
|
|
|
### Headscale (VPN)
|
|
|
|
- **URL:** http://localhost:8080
|
|
- **Användning:** Zero-trust nätverk för noder
|
|
|
|
### Jenkins (CI/CD)
|
|
|
|
- **URL:** http://localhost:8081
|
|
- **Användning:** Bygg, test, deploy
|
|
|
|
### Registry (Container Registry)
|
|
|
|
- **URL:** http://localhost:5000
|
|
- **Användning:** Docker image-lagring
|
|
|
|
---
|
|
|
|
## Backup
|
|
|
|
```bash
|
|
# Manuell backup
|
|
./scripts/backup.sh
|
|
|
|
# Automatisk backup (dagligen)
|
|
# Redigerar crontab
|
|
crontab -e
|
|
# Lägg till:
|
|
0 2 * * * /path/to/iom/scripts/backup.sh
|
|
```
|
|
|
|
---
|
|
|
|
## Övervakning
|
|
|
|
### Grafana Dashboards
|
|
|
|
- **System Overview:** CPU, minne, disk
|
|
- **API Metrics:** Requests, latency, errors
|
|
- **Business Metrics:** Observations, signals, decisions
|
|
- **AI Metrics:** Model accuracy, predictions
|
|
|
|
### Alerts
|
|
|
|
- API nere
|
|
- Hög felprocent
|
|
- Disk full
|
|
- Minne lågt
|
|
- Database connections hög
|
|
|
|
---
|
|
|
|
## Säkerhet
|
|
|
|
### Nätverk
|
|
|
|
- All kommunikation inom Docker-nätverk
|
|
- Nginx som enda exponerad tjänst
|
|
- Headscale för zero-trust VPN
|
|
|
|
### Autentisering
|
|
|
|
- JWT tokens
|
|
- Role-based access control
|
|
- API keys för tjänster
|
|
|
|
### Kryptering
|
|
|
|
- Restic för krypterade backups
|
|
- HTTPS via Nginx
|
|
- PostgreSQL SSL
|
|
|
|
---
|
|
|
|
## Skalning
|
|
|
|
### Horisontell skalning
|
|
|
|
```bash
|
|
# Skala API
|
|
docker-compose -f docker-compose.selfhosted.yml up -d --scale api=3
|
|
|
|
# Skala workers
|
|
docker-compose -f docker-compose.selfhosted.yml up -d --scale worker=5
|
|
```
|
|
|
|
### Vertikal skalning
|
|
|
|
- Öka resurser för PostgreSQL
|
|
- Mer minne för Elasticsearch
|
|
- Större disk för MinIO
|
|
|
|
---
|
|
|
|
## Felsökning
|
|
|
|
```bash
|
|
# Loggar
|
|
docker-compose -f docker-compose.selfhosted.yml logs -f api
|
|
docker-compose -f docker-compose.selfhosted.yml logs -f worker
|
|
|
|
# Status
|
|
docker-compose -f docker-compose.selfhosted.yml ps
|
|
|
|
# Resurser
|
|
docker stats
|
|
|
|
# Nätverk
|
|
docker network inspect iom-network
|
|
```
|
|
|
|
---
|
|
|
|
## Sammanfattning
|
|
|
|
**Komplett self-hosted infrastruktur:**
|
|
|
|
- ✅ Database (PostgreSQL + PostGIS)
|
|
- ✅ Cache (Redis)
|
|
- ✅ Object Storage (MinIO)
|
|
- ✅ Search (Elasticsearch)
|
|
- ✅ Message Queue (RabbitMQ)
|
|
- ✅ Monitoring (Prometheus + Grafana)
|
|
- ✅ Logging (Loki + Promtail)
|
|
- ✅ VPN (Headscale)
|
|
- ✅ CI/CD (Jenkins)
|
|
- ✅ Registry (Docker Registry)
|
|
- ✅ Backup (Restic)
|
|
- ✅ API (FastAPI)
|
|
- ✅ Workers (Celery)
|
|
|
|
**Inga externa beroenden. Full kontroll.**
|