Initial commit - SOGOMS v1.0.0

- sogoctl: supervisor avec health checks et restart auto
- sogoway: gateway HTTP, auth JWT, routing par hostname
- sogoms-db: microservice MariaDB avec pool par application
- Protocol IPC Unix socket JSON length-prefixed
- Config YAML multi-application (prokov)
- Deploy script pour container Alpine gw3

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-15 19:09:00 +01:00
commit 7e27f87d6f
64 changed files with 7951 additions and 0 deletions

97
README.md Normal file
View File

@@ -0,0 +1,97 @@
# SOGOMS
**Service Oriented GO MicroServices** - Plateforme SaaS modulaire multi-tenant.
## Architecture
```
Client → Nginx(:443) → Sogoway(:8080) → Sogoms-db → MariaDB
Unix Socket
```
| Binaire | Rôle | Port/Socket |
|---------|------|-------------|
| `sogoctl` | Superviseur PID 1, health checks, restart auto | - |
| `sogoway` | Gateway HTTP, auth JWT, routing par hostname | TCP :8080 |
| `sogoms-db` | Accès MariaDB, pool par application | Unix socket |
## Déploiement
```bash
./deploy.sh
```
Déploie sur le container `gw3` (Alpine) via IN3.
## Lancement
Sur gw3 :
```bash
/opt/sogoms/bin/sogoctl
```
## Configuration
Chaque application cliente a son fichier dans `config/routes/` :
```yaml
# config/routes/prokov.yaml
app: prokov
hosts:
- prokov.unikoffice.com
database:
host: 13.23.33.4
user: prokov_user
password_file: /secrets/prokov_db_pass
name: prokov
auth:
jwt_secret_file: /secrets/prokov_jwt_secret
jwt_expiry: 24h
```
## Structure
```
cmd/
sogoctl/main.go # Superviseur
sogoway/main.go # Gateway HTTP
sogoms/db/main.go # Microservice DB
internal/
protocol/ # IPC Unix socket (JSON length-prefixed)
config/ # Chargement YAML, registry par host
auth/ # JWT (HS256), bcrypt passwords
config/
sogoctl.yaml # Services à superviser
routes/*.yaml # Config par application
scenarios/ # Scénarios YAML (V2)
```
## API Endpoints
```bash
# Health check
curl http://localhost:8080/health
# Login
curl -X POST http://localhost:8080/api/auth/login \
-H "Host: prokov.unikoffice.com" \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","password":"secret"}'
# User info (avec token)
curl http://localhost:8080/api/auth/me \
-H "Host: prokov.unikoffice.com" \
-H "Authorization: Bearer <token>"
```
## Prérequis
- Go 1.22+
- MariaDB/MySQL
- Container Alpine (gw3)
## Licence
Propriétaire