Full enterprise web operating system including: - Next.js 14 frontend with App Router, i18n (DE/EN), shadcn/ui - NestJS 10 backend with Prisma, JWT auth, Swagger docs - Keycloak 24 SSO with role-based access control - HR module (employees, time tracking, absences, org chart) - LEAN module (3S planning, morning meeting SQCDM, skill matrix) - Integrations module (PlentyONE, Zulip, Todoist, FreeScout, Nextcloud, ecoDMS, GembaDocs) - Dashboard with customizable drag & drop widget grid - Docker Compose infrastructure (PostgreSQL 16, Redis 7, Keycloak 24) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1.8 KiB
1.8 KiB
tOS Infrastructure Memory
Docker Stack
- Location:
/home/mehmed/Entwicklung/githubProjekte/tOS/docker/ - Compose file:
docker-compose.yml(name: tos) - Services: PostgreSQL 16, Redis 7, Keycloak 24.0
- Network:
tos-network(bridge) - Volumes:
tos-postgres-data,tos-redis-data
Ports (Default)
| Service | Port |
|---|---|
| PostgreSQL | 5432 |
| Redis | 6379 |
| Keycloak | 8080 |
| API | 3001 |
| Frontend | 3000 |
Keycloak Configuration
- Realm:
tOS - Clients:
tos-frontend(public),tos-backend(confidential) - Roles Hierarchy:
- admin -> hr-manager, manager, department_head, team-lead, employee
- hr-manager -> employee
- manager -> department_head, employee
- department_head -> team-lead, employee
- team-lead -> employee
- Test Users: admin, manager, depthead, employee, hrmanager, teamlead
- Default passwords:
<username>123(temporary)
Environment Variables
- Root
.env.example: Application config (NextAuth, Keycloak, API keys) - Docker
.env.example: Container config (ports, credentials) - Critical Production Secrets:
ENCRYPTION_KEY- 32 bytes for credential encryptionJWT_SECRET- API token signingNEXTAUTH_SECRET- Session encryptionKEYCLOAK_BACKEND_CLIENT_SECRET
Package Scripts
pnpm docker:up # Start infrastructure
pnpm docker:down # Stop infrastructure
pnpm docker:logs # View logs
pnpm docker:reset # Destroy volumes and restart
pnpm dev # Start dev servers
Known Issues / Lessons Learned
- Keycloak 24+ (UBI9) has no curl; use bash TCP redirect for health checks
- Realm import: file must be at
/opt/keycloak/data/import/with--import-realmflag - Health check
start_periodshould be 90s+ for Keycloak (Java startup)