git_diff.txt 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823
  1. Vielen Dank für die Bereitstellung der Dateien. Ich habe alle notwendigen Informationen, um die Dokumentation zu erstellen. Hier ist der Inhalt der finalen Dokumentationsdateien:
  2. ```markdown
  3. # Automatisiertes Büro 2.0 - Projektdokumentation
  4. ## Inhaltsverzeichnis
  5. 1. [Projektübersicht](#projektübersicht)
  6. 2. [Systemarchitektur](#systemarchitektur)
  7. 3. [Entwicklungsumgebung](#entwicklungsumgebung)
  8. 4. [Konfigurationen](#konfigurationen)
  9. 5. [Installationsanleitung](#installationsanleitung)
  10. 6. [Workflows](#workflows)
  11. 7. [Sicherheitskonzept](#sicherheitskonzept)
  12. 8. [Wartung und Monitoring](#wartung-und-monitoring)
  13. 9. [Troubleshooting](#troubleshooting)
  14. ## Projektübersicht
  15. ### Projektziele
  16. - Vollständige Automatisierung administrativer und kaufmännischer Prozesse
  17. - Kostensenkung durch lokale Open-Source-Lösungen
  18. - Unabhängigkeit von externen Diensten
  19. - Zentralisierte Verwaltung aller Geschäftsprozesse
  20. ### Projektumfang
  21. - Integration aller Kommunikationskanäle
  22. - Automatisierte Dokumentenverarbeitung
  23. - Prozessautomatisierung
  24. - Zentrale Authentifizierung
  25. - KI-gestützte Korrespondenz
  26. #### Keycloak-Rolle
  27. Keycloak spielt eine zentrale Rolle als Authentifizierungsstelle. Es stellt die Single-Sign-On (SSO) Funktionalität für alle Dienste der zentralen Plattform bereit und sichert somit den Zugriff auf die verschiedenen Anwendungen.
  28. ## Systemarchitektur
  29. #### Architekturübersicht
  30. ```mermaid
  31. graph TB
  32. subgraph Eingangssysteme
  33. Email[E-Mail]
  34. WhatsApp[WhatsApp]
  35. Post[Physische Post]
  36. Teams[Teams/Webex]
  37. end
  38. subgraph Zentrale_Plattform
  39. NC[Nextcloud - Dokumentenverwaltung]
  40. PL[Paperless - Dokumentenmanagement]
  41. NR[Node-RED - Prozessautomatisierung]
  42. KC[Keycloak - SSO]
  43. OUI[OpenWebUI - KI-Korrespondenz]
  44. KI[Kimai - Zeiterfassung]
  45. end
  46. subgraph Monitoring_Analytics
  47. ELK[ELK Stack - Logging & Analyse]
  48. end
  49. subgraph Geschäftsprozesse
  50. TP[Task-Priorisierung]
  51. subgraph Finanzen
  52. RE[Rechnungserstellung]
  53. ZA[Zahlungsabwicklung]
  54. BA[Banken-API]
  55. end
  56. subgraph Verwaltung
  57. KV[Kundenverwaltung]
  58. ZE[Zeiterfassung]
  59. DO[Dokumentenarchiv]
  60. end
  61. end
  62. Email --> NC
  63. WhatsApp --> NC
  64. Post --> PL
  65. Teams --> NC
  66. NC --> NR
  67. PL --> NR
  68. NR --> TP
  69. KI --> TP
  70. TP --> RE
  71. TP --> ZA
  72. TP --> KV
  73. TP --> ZE
  74. TP --> DO
  75. ZA <--> BA
  76. KC -.->|Authentifizierung| NC
  77. KC -.->|Authentifizierung| PL
  78. KC -.->|Authentifizierung| NR
  79. KC -.->|Authentifizierung| OUI
  80. KC -.->|Authentifizierung| KI
  81. NR --> ELK
  82. OUI --> NR
  83. classDef container fill:#e1f5fe,stroke:#01579b
  84. classDef process fill:#e8f5e9,stroke:#2e7d32
  85. classDef auth fill:#fff3e0,stroke:#ef6c00
  86. classDef monitoring fill:#fce4ec,stroke:#c2185b
  87. class NC,PL,NR,KI container
  88. class TP,RE,ZA,KV,ZE,DO process
  89. class KC auth
  90. class ELK monitoring
  91. ```
  92. #### Beschreibung der Architekturkomponenten
  93. Die Systemarchitektur ist in vier Hauptbereiche gegliedert:
  94. 1. **Eingangssysteme:**
  95. - Erfassen verschiedene Kommunikationskanäle zentral.
  96. - Sorgen für eine einheitliche Weiterverarbeitung aller Eingänge.
  97. 2. **Zentrale Plattform:**
  98. - **Nextcloud (NC):** Dient als zentraler Hub für die Dateiverwaltung und Kollaboration.
  99. - **Paperless (PL):** Zuständig für das Dokumentenmanagement und die optische Zeichenerkennung (OCR).
  100. - **Node-RED (NR):** Automatisierung von Workflows und Geschäftsprozessen.
  101. - **Keycloak (KC):** Bereitstellung von Single-Sign-On (SSO) und Identitätsmanagement.
  102. - Keycloak wird als zentrale Authentifizierungsstelle für alle Dienste der zentralen Plattform verwendet, wodurch ein sicherer und zentralisierter Zugriff gewährleistet wird.
  103. - **OpenWebUI (OUI):** KI-gestützte Kommunikation und Integration in die Workflow-Automatisierung
  104. - **Kimai (KI):** Zeiterfassungslösung zur Verwaltung von Arbeitszeiten und Projekten.
  105. 3. **Geschäftsprozesse:**
  106. - Automatisierte Task-Priorisierung (TP) für eine effiziente Aufgabenverteilung.
  107. - Integrierte Finanzprozesse mit Bankenanbindung (RE, ZA, BA).
  108. - Zentralisierte Verwaltungsprozesse (KV, ZE, DO).
  109. 4. **Monitoring & Analytics:**
  110. - **ELK Stack (ELK):** Ermöglicht umfassendes Logging und Analyse in Echtzeit zur Überwachung aller Systeme.
  111. #### Containerstruktur
  112. - Docker als Containerisierungsplattform
  113. - Microservices-Architektur
  114. - Interne Netzwerkkonfiguration
  115. ### Komponenten
  116. #### Nextcloud
  117. - Funktion: Zentrale Dateiverwaltung und Kollaboration
  118. - Version: `[VERSION]`
  119. - Besondere Konfigurationen:
  120. - [Wird ergänzt]
  121. #### Paperless
  122. - Funktion: Dokumentenmanagement und OCR
  123. - Version: `[VERSION]`
  124. - Besondere Konfigurationen:
  125. - [Wird ergänzt]
  126. #### Keycloak
  127. - Funktion: Single-Sign-On und Identitätsmanagement
  128. - Version: `[VERSION]`
  129. - Besondere Konfigurationen:
  130. - [Wird ergänzt]
  131. #### Node-RED
  132. - Funktion: Workflow-Automatisierung
  133. - Version: `[VERSION]`
  134. - Implementierte Flows:
  135. - [Wird ergänzt]
  136. #### ELK Stack
  137. - Funktion: Logging und Monitoring
  138. - Version: `[VERSION]`
  139. - Besondere Konfigurationen:
  140. - [Wird ergänzt]
  141. #### OpenWebUI
  142. - Funktion: KI-gestützte Kommunikation
  143. - Version: `[VERSION]`
  144. - Integrationen:
  145. - [Wird ergänzt]
  146. #### Kimai
  147. - Funktion: Zeiterfassung
  148. - Version: `[VERSION]`
  149. - Besondere Konfigurationen:
  150. - [Wird ergänzt]
  151. ## Entwicklungsumgebung
  152. ### Systemvoraussetzungen
  153. - Windows mit WSL (Windows Subsystem for Linux)
  154. - Visual Studio Code
  155. - Docker Desktop
  156. - NGINX Proxy Manager (läuft in WSL)
  157. #### Domain-Konfiguration
  158. Die Entwicklungsumgebung nutzt die Domain `mrx8086.com` mit verschiedenen Subdomains für die einzelnen Services. Diese werden lokal über die Windows-Hosts-Datei (`C:\Windows\System32\drivers\etc\hosts`) aufgelöst.
  159. ```plaintext
  160. # Development Environment Host Entries
  161. 127.0.0.1 mrx8086.com
  162. 127.0.0.1 proxy.mrx8086.com # NGINX Proxy Manager
  163. 172.23.171.133 auth.mrx8086.com # Keycloak
  164. 127.0.0.1 cloud.mrx8086.com # Nextcloud
  165. 127.0.0.1 docs.mrx8086.com # Paperless
  166. 127.0.0.1 time.mrx8086.com # Kimai
  167. 127.0.0.1 automate.mrx8086.com # n8n
  168. ```
  169. #### Service-Übersicht
  170. | Subdomain | Service | Beschreibung |
  171. |-----------|---------|--------------|
  172. | proxy.mrx8086.com | NGINX Proxy Manager | Reverse Proxy und SSL-Management (lokal in der Development Umgebung) |
  173. | auth.mrx8086.com | Keycloak | Zentrale Authentifizierung |
  174. | cloud.mrx8086.com | Nextcloud | Dokumentenverwaltung |
  175. | docs.mrx8086.com | Paperless | Dokumentenmanagement |
  176. | time.mrx8086.com | Kimai | Zeiterfassung |
  177. | automate.mrx8086.com | n8n | Workflow-Automatisierung |
  178. #### WSL-Konfiguration
  179. - NGINX Proxy Manager läuft in WSL
  180. - IP-Adresse des WSL-Systems: 172.23.171.133 (Beispiel, kann sich ändern)
  181. - Alle Docker-Container werden innerhalb von WSL betrieben
  182. #### `setup_realm.js`
  183. Dieses Skript wird verwendet, um den Keycloak-Realm, die zugehörigen Clients und Testbenutzer automatisiert zu erstellen. Es verwendet eine `.env`-Datei zur Konfiguration.
  184. #### Verwendung von .env
  185. Die Konfigurationen für das setup_realm.js Script werden in einer .env Datei gespeichert. Die benötigten Umgebungsvariablen sind unten aufgelistet:
  186. - `KEYCLOAK_URL`: Die URL zum Keycloak Server (z.B. https://auth.mrx8086.com)
  187. - `KEYCLOAK_ADMIN_USER`: Der Benutzername des Keycloak Administrators (z.B. admin).
  188. - `KEYCLOAK_ADMIN_PASSWORD`: Das Passwort des Keycloak Administrators.
  189. - `NEXTCLOUD_CLIENT_ID`: Die Client ID für Nextcloud. (z.B. nextcloud)
  190. - `PAPERLESS_CLIENT_ID`: Die Client ID für Paperless (z.B. paperless).
  191. - `NODERED_CLIENT_ID`: Die Client ID für Node-RED (z.B. nodered).
  192. - `TESTADMIN_PASSWORD`: Das Passwort für den Testadmin User.
  193. - `TESTUSER_PASSWORD`: Das Passwort für den Testuser User.
  194. - `TESTSERVICEUSER_PASSWORD`: Das Passwort für den Testserviceuser User.
  195. - `KEYCLOAK_NEXTCLOUD_CLIENT_SECRET`: Das Client Secret für Nextcloud.
  196. - `NEXTCLOUD_URL`: Die URL zur Nextcloud Instanz (z.B. https://cloud.mrx8086.com).
  197. #### NGINX-Konfigurationen
  198. Für jeden Service existiert eine dedizierte NGINX-Konfiguration. In der Development Umgebung wird der **NGINX Proxy Manager** verwendet. Für **Staging** und **Production** werden die entsprechenden NGINX Konfigurationsdateien in `/config/nginx` abgelegt.
  199. ## Konfigurationen
  200. ### Netzwerkkonfiguration
  201. - Interne Netzwerkstruktur (noch zu definieren)
  202. - Reverse Proxy Konfiguration über den Nginx Proxy Manager in der Development Umgebung, und Nginx Server Config in Staging und Production.
  203. - SSL/TLS-Setup: Selbsignierte Zertifikate in der Development Umgebung, Letsencrypt in Staging und Production.
  204. - Konfigurationsdateien für NGINX Server Config sind unter `/config/nginx/sites-available/` zu finden.
  205. - Für die Entwicklungsumgebung werden die Konfigurationen über den Nginx Proxy Manager konfiguriert.
  206. - Die SSL Zertifikate für die Development Umgebung werden als selbsignierte Zertifikate generiert und in `/config/nginx/ssl/mrx8086.com/` abgelegt.
  207. - In der Staging und Production Umgebung werden die Zertifikate über Let's Encrypt oder eine andere Zertifizierungsstelle verwaltet.
  208. #### Umgebungsvariablen
  209. Es werden zwei `.env`-Dateien verwendet:
  210. Eine im `docker/` Verzeichnis für die Docker-Konfiguration und eine im `scripts/setup/keycloak/` für das `setup_realm.js`-Skript.
  211. **`docker/.env`:**
  212. ```env
  213. # Generated on 2024-12-12_18-12-36
  214. # Keycloak Admin
  215. KEYCLOAK_ADMIN_PASSWORD=9aD5Fddh457QqmvQqr6Rb8bu
  216. # Keycloak Database
  217. KC_DB_USERNAME=keycloak
  218. KC_DB_PASSWORD=p47616y763z101f3
  219. ```
  220. **`scripts/setup/keycloak/.env`:**
  221. ```env
  222. KEYCLOAK_URL=https://auth.mrx8086.com
  223. KEYCLOAK_ADMIN_USER=admin
  224. KEYCLOAK_ADMIN_PASSWORD=9aD5Fddh457QqmvQqr6Rb8bu
  225. NEXTCLOUD_CLIENT_ID=nextcloud
  226. PAPERLESS_CLIENT_ID=paperless
  227. NODERED_CLIENT_ID=nodered
  228. TESTADMIN_PASSWORD=TestAdminPwd
  229. TESTUSER_PASSWORD=TestUserPwd
  230. TESTSERVICEUSER_PASSWORD=TestServiceUserPwd
  231. KEYCLOAK_NEXTCLOUD_CLIENT_SECRET=OSbJ08zyjBWChwBR7S6c1q4sU0d8zvEK
  232. NEXTCLOUD_URL=https://cloud.mrx8086.com
  233. ```
  234. Die Passwörter in der `.env` Datei im `scripts/setup/keycloak` werden vom `setup_environment.sh` Skript generiert.
  235. #### Keycloak-Konfiguration
  236. Keycloak ist als zentrale Authentifizierungsstelle konfiguriert. Die Realm-Konfiguration, Clients und Benutzer werden über das `setup_realm.js` Skript definiert, die Konfiguration wird über die `.env` Datei im `/scripts/setup/keycloak` Verzeichnis angepasst.
  237. ##### Realm-Konfiguration
  238. - **Realm-Name:** `office-automation`
  239. - **Anzeige Name:** `Office Automation`
  240. - **SSL ist erforderlich**: `external`
  241. - **Registrierung ist nicht erlaubt**: `false`
  242. - **Login mit Email ist erlaubt**: `true`
  243. - **Doppelte Email ist nicht erlaubt**: `false`
  244. - **Passwort Reset ist erlaubt**: `true`
  245. - **Username Bearbeitung ist nicht erlaubt**: `false`
  246. - **Brute Force Schutz ist aktiviert**: `true`
  247. - **Permanente Sperrung ist nicht aktiviert**: `false`
  248. - **Standard Signature Algorithm**: `RS256`
  249. - **WebAuthn Policy Signatur Algorithmen**: `ES256`
  250. - **WebAuthn Policy Attestation Conveyance Preference**: `none`
  251. - **WebAuthn Policy Authenticator Attachment**: `cross-platform`
  252. - **WebAuthn Policy Require Resident Key**: `not specified`
  253. - **WebAuthn Policy User Verification Requirement**: `preferred`
  254. - **WebAuthn Policy Create Timeout**: `0`
  255. - **WebAuthn Policy Avoid Same Authenticator Register**: `false`
  256. - **Default Default Client Scopes**: `email`, `profile`, `roles`, `web-origins`
  257. - **Default Optional Client Scopes**: `address`, `phone`, `offline_access`, `microprofile-jwt`
  258. ##### Clients
  259. Die folgenden Clients werden über das Skript konfiguriert:
  260. - **Nextcloud:**
  261. - **Client ID:** `nextcloud`
  262. - **Name:** `Nextcloud`
  263. - **Redirect URIs:**
  264. - `https://cloud.mrx8086.com/apps/sociallogin/custom_oidc/keycloak`
  265. - `https://cloud.mrx8086.com/apps/user_oidc/code`
  266. - **Post Logout Redirect URIs:** `https://cloud.mrx8086.com/*`
  267. - **Paperless:**
  268. - **Client ID:** `paperless`
  269. - **Name:** `Paperless`
  270. - **Redirect URIs:** `https://docs.mrx8086.com/*`
  271. - **Node-RED:**
  272. - **Client ID:** `nodered`
  273. - **Name:** `Node-RED`
  274. - **Redirect URIs:** `https://automate.mrx8086.com/*`
  275. ##### Gruppen
  276. - **nextcloud-admins:** Gruppe für Nextcloud Benutzer mit Admin Rechten.
  277. - **nextcloud-users:** Gruppe für reguläre Nextcloud Benutzer.
  278. - **nextcloud-youpi:** Gruppe für Nextcloud Youpi Benutzer.
  279. - **nextcloud-service:** Gruppe für Nextcloud Service Benutzer.
  280. ##### Benutzer
  281. - **testadmin:**
  282. - Benutzername: `testadmin`
  283. - Passwort: wird entweder aus der Umgebungsvariable `TESTADMIN_PASSWORD` gelesen oder standardmäßig `initial123!` gesetzt.
  284. - Gruppen: `nextcloud-admins`,`nextcloud-users`
  285. - **testuser:**
  286. - Benutzername: `testuser`
  287. - Passwort: wird entweder aus der Umgebungsvariable `TESTUSER_PASSWORD` gelesen oder standardmäßig `initial123!` gesetzt.
  288. - Gruppen: `nextcloud-users`,`nextcloud-youpi`
  289. - **testserviceuser:**
  290. - Benutzername: `testserviceuser`
  291. - Passwort: wird entweder aus der Umgebungsvariable `TESTSERVICEUSER_PASSWORD` gelesen oder standardmäßig `initial123!` gesetzt.
  292. - Gruppen: `nextcloud-service`
  293. #### SSL/TLS-Setup
  294. - **Entwicklungsumgebung (`dev`):** Für lokale Entwicklung werden selbsignierte SSL-Zertifikate verwendet.
  295. - **Staging/Produktionsumgebung (`staging`, `production`):** Hier werden SSL-Zertifikate über Let's Encrypt oder eine ähnliche Zertifizierungsstelle verwaltet.
  296. ## Installationsanleitung
  297. #### Voraussetzungen
  298. - Docker Version: `[VERSION]`
  299. - Minimal Systemanforderungen:
  300. - CPU: `[ANFORDERUNG]`
  301. - RAM: `[ANFORDERUNG]`
  302. - Speicher: `[ANFORDERUNG]`
  303. - Für die Ausführung des `setup_realm.js` Skriptes wird `Node.js` benötigt
  304. - Die genaue Version von `Node.js` wird zu einem späteren Zeitpunkt dokumentiert.
  305. - Vor dem starten müssen die Passwörter generiert und die `.env` Dateien erstellt werden. Hierzu wird das `setup_environment.sh` verwendet. Dieses Skript sollte **nicht in der Produktionsumgebung** verwendet werden.
  306. - Das Skript erstellt die benötigten Verzeichnisse, generiert zufällige Passwörter, speichert diese verschlüsselt ab, und erstellt die benötigten `.env` Dateien.
  307. - Für die Ausführung des `setup_realm.js` Skriptes wird `Node.js` und `npm` benötigt
  308. - Die benötigten Node Module `dotenv` und `axios` können mit `npm install dotenv axios` installiert werden.
  309. - Die `.env` Dateien werden im `/docker` und im `/scripts/setup/keycloak` Verzeichnis abgelegt.
  310. #### Keycloak-Installation
  311. 1. Führe das `setup_environment.sh` Skript aus, um die .env Dateien, die Passwörter zu generieren und die Credentials zu verschlüsseln.
  312. 2. Kopiere die `docker-compose.yml` Datei in das `docker/` Verzeichnis.
  313. 3. Kopiere die `.env` Datei in das `docker/` Verzeichnis.
  314. 4. Führe `docker-compose up -d` im `docker/` Verzeichnis aus um Keycloak zu starten.
  315. #### Ausführen von `setup_realm.js`
  316. 1. Stelle sicher, dass Node.js und npm installiert sind.
  317. 2. Wechsle in das `/scripts/setup/keycloak` Verzeichnis.
  318. 3. Installiere die benötigten npm Pakete mit `npm install dotenv axios`.
  319. 4. Führe das Skript mit `node setup_realm.js` aus. Dies erstellt den Keycloak-Realm, die Clients und die Testbenutzer.
  320. * Das Script befindet sich im `/scripts/setup/keycloak` Verzeichnis
  321. ## Workflows
  322. #### Dokumentenverarbeitung
  323. - Eingangsverarbeitung
  324. - OCR-Prozess
  325. - Kategorisierung
  326. - Archivierung
  327. #### Geschäftsprozesse
  328. - Rechnungsstellung
  329. - Zahlungsabwicklung
  330. - Kundenmanagement
  331. - Zeiterfassung
  332. #### Authentifizierungsflow
  333. Die Authentifizierung der Benutzer für alle Dienste wird über Keycloak abgewickelt. Details zu den Authentifizierungsabläufen werden in einem späteren Schritt dokumentiert.
  334. ## Sicherheitskonzept
  335. #### Zugriffsmanagement
  336. - Rollenkonzept (wird in späteren schritten dokumentiert)
  337. - Berechtigungsmatrix (wird in späteren schritten dokumentiert)
  338. - Authentifizierungsflows (siehe Workflows)
  339. - Keycloak wird als zentrale Authentifizierungsstelle verwendet, Passwortrichtlinien werden in Keycloak definiert.
  340. #### Datensicherheit
  341. - Verschlüsselung (wird in späteren schritten dokumentiert)
  342. - Backup-Strategie (wird in späteren schritten dokumentiert)
  343. - Notfallwiederherstellung (wird in späteren schritten dokumentiert)
  344. ## Wartung und Monitoring
  345. #### Regelmäßige Wartungsaufgaben
  346. - Backup-Überprüfung
  347. - Updates
  348. - Performance-Monitoring
  349. Details zur Wartung und dem Monitoring werden in späteren Schritten dokumentiert.
  350. ## Troubleshooting
  351. #### Bekannte Probleme
  352. - [Wird ergänzt mit auftretenden Problemen]
  353. #### Debugging
  354. - Log-Analyse
  355. - Fehlerbehandlung
  356. - Support-Prozesse
  357. Details zu bekannten Problemen und zur Fehlerbehandlung werden in späteren Schritten dokumentiert.
  358. ```
  359. ```markdown
  360. # Automated Office 2.0 - Current Project State
  361. ## Overview
  362. Project to automate all administrative and commercial processes within the company, using open-source solutions.
  363. ## Current Implementation Status
  364. ### 1. Project Structure
  365. - Basic directory structure created
  366. - Ansible roles established (common, docker, nginx, services)
  367. - Configuration directories set up for all services
  368. - Documentation structure established
  369. ### 2. Environment Setup
  370. - Development environment using WSL
  371. - NGINX running in WSL for development using NGINX Proxy Manager
  372. - Docker environment being set up
  373. - SSL certificates in place for development (self-signed)
  374. - Staging and Production environment will use NGINX Server Configs and letsencrypt SSL certificates
  375. ### 3. Service Status
  376. #### Keycloak (auth.mrx8086.com)
  377. - NGINX configuration complete
  378. - Docker setup complete
  379. - Keycloak is running behind a reverse proxy
  380. - Implemented setup_realm.js script for automated realm, client and user setup
  381. - SSL certificates configured (self-signed)
  382. - `setup_realm.js` configures the `office-automation` realm, `nextcloud`, `paperless`, and `nodered` clients.
  383. - Test users `testadmin`, `testuser` and `testserviceuser` are also created.
  384. - Client Scopes for `openid`, `profile` and `groups-nextcloud` are added to the nextcloud client.
  385. - Groups `nextcloud-admins`, `nextcloud-users`, `nextcloud-youpi` and `nextcloud-service` are created.
  386. #### Nextcloud (cloud.mrx8086.com)
  387. - NGINX configuration complete
  388. - Docker setup complete
  389. - SSL certificates configured
  390. - Nextcloud is configured to use Keycloak for authentication
  391. #### Paperless (docs.mrx8086.com)
  392. - NGINX configuration complete
  393. - Docker setup pending
  394. - SSL certificates configured
  395. #### Node-RED (automate.mrx8086.com)
  396. - NGINX configuration complete
  397. - Docker setup pending
  398. - SSL certificates configured
  399. - Chosen over n8n for better open-source compatibility
  400. ### 4. Security
  401. - Automated password generation implemented
  402. - Encrypted credentials storage system in place
  403. - SSL certificates managed and deployed
  404. ### 5. Development Decisions
  405. - Using WSL for development environment
  406. - NGINX running directly in WSL for development
  407. - Docker containers for all services
  408. - Focusing on completely open-source solutions
  409. - Development environment uses Nginx Proxy Manager
  410. - Staging and Production will use Nginx Server Config files
  411. ## Next Steps
  412. 1. Complete Paperless and Node-RED docker setup
  413. 2. Test Paperless and Node-RED authentication against Keycloak
  414. 3. Proceed with remaining service deployments
  415. 4. Setup Letsencrypt SSL Certificates in the Staging Environment
  416. ## Important Files Location
  417. - NGINX configs: /config/nginx/sites-available/
  418. - SSL certificates: /config/nginx/ssl/mrx8086.com/
  419. - Docker compose: /docker/docker-compose.yml
  420. - Environment variables: /config/.env
  421. - Encrypted credentials: /config/credentials/
  422. - Keycloak setup script: /scripts/install/setup_realm.js
  423. ## Development Environment
  424. - Domain: mrx8086.com
  425. - SSL certificates in place (self-signed)
  426. - NGINX running in WSL
  427. - Docker running in WSL
  428. ```
  429. ```markdown
  430. # Ansible Setup Documentation
  431. ## Overview
  432. Ansible wird für das automatisierte Deployment des Automated Office Systems verwendet.
  433. ## Roles Structure
  434. ### Common Role
  435. - Basis-Systemkonfiguration
  436. - Sicherheitseinstellungen (fail2ban, UFW)
  437. - Grundlegende Systempakete
  438. ```yaml
  439. # Standardvariablen
  440. timezone: "Europe/Berlin"
  441. fail2ban_bantime: 600
  442. fail2ban_findtime: 600
  443. fail2ban_maxretry: 3
  444. ```
  445. ### Docker Role
  446. - Docker Installation und Konfiguration
  447. - Docker Compose Setup
  448. - Docker Netzwerk-Konfiguration
  449. ```yaml
  450. # Docker Standardvariablen
  451. docker_version: "latest"
  452. docker_compose_version: "2.21.0"
  453. docker_users: ["{{ ansible_user }}"]
  454. ```
  455. ### NGINX Role
  456. - NGINX Installation
  457. - SSL/TLS Setup
  458. - Virtual Host Konfiguration
  459. ```yaml
  460. # NGINX Standardvariablen
  461. nginx_worker_processes: auto
  462. nginx_worker_connections: 1024
  463. nginx_client_max_body_size: "100M"
  464. ```
  465. ### Services Role
  466. - Deployment der Docker-Container
  467. - Service-spezifische Konfigurationen
  468. - Datenpersistenz-Setup
  469. ## Inventory Structure
  470. ```plaintext
  471. inventory/
  472. ├── production/
  473. └── staging/
  474. └── hosts
  475. ```
  476. ## Variables
  477. ```yaml
  478. # vars/defaults/main.yml
  479. base_domain: "example.com"
  480. ssl_email: "admin@example.com"
  481. services:
  482. keycloak: true
  483. nextcloud: true
  484. paperless: true
  485. nodered: true
  486. ```
  487. ```yaml
  488. # ansible/roles/common/defaults/main.yml
  489. ---
  490. # System
  491. timezone: "Europe/Berlin"
  492. # Security
  493. fail2ban_bantime: 600
  494. fail2ban_findtime: 600
  495. fail2ban_maxretry: 3
  496. # Firewall ports to open
  497. ufw_allowed_ports:
  498. - { port: 22, proto: tcp } # SSH
  499. - { port: 80, proto: tcp } # HTTP
  500. - { port: 443, proto: tcp } # HTTPS
  501. ```
  502. ```yaml
  503. # ansible/roles/docker/defaults/main.yml
  504. ---
  505. # Docker Standardvariablen
  506. docker_version: "latest"
  507. docker_compose_version: "2.21.0"
  508. docker_users: ["{{ ansible_user }}"]
  509. ```
  510. ```yaml
  511. # ansible/roles/nginx/defaults/main.yml
  512. ---
  513. # NGINX Standardvariablen
  514. nginx_worker_processes: auto
  515. nginx_worker_connections: 1024
  516. nginx_client_max_body_size: "100M"
  517. ```
  518. ```yaml
  519. # ansible/vars/defaults/main.yml
  520. ---
  521. # Domain-Konfiguration
  522. base_domain: "example.com"
  523. ssl_email: "admin@example.com"
  524. # Aktivierte Services
  525. services:
  526. keycloak: true
  527. nextcloud: true
  528. paperless: true
  529. nodered: true
  530. # Ports
  531. keycloak_port: 8080
  532. nextcloud_port: 8081
  533. paperless_port: 8000
  534. nodered_port: 1880
  535. # Docker-Konfiguration
  536. docker_compose_version: "2.21.0"
  537. ```
  538. ## Deployment Flow
  539. 1. Common Role: Systemvorbereitung
  540. 2. Docker Role: Container-Runtime
  541. 3. NGINX Role: Reverse Proxy
  542. 4. Services Role: Anwendungen
  543. ## Wichtige Befehle
  544. ```bash
  545. # Staging Deployment
  546. ansible-playbook -i inventory/staging site.yml
  547. # Production Deployment
  548. ansible-playbook -i inventory/production site.yml
  549. ```
  550. ## Sicherheitsaspekte
  551. - Automatische Passwortverwaltung
  552. - SSL/TLS-Konfiguration
  553. - Firewall-Einstellungen
  554. - Fail2ban-Integration
  555. ## Entwicklungshinweise
  556. - Lokales Testing über WSL
  557. - Staging-Umgebung für Tests
  558. - Produktionsumgebung für finale Deployments
  559. ## Updates und Wartung
  560. - Regelmäßige Updates über Ansible
  561. - Backup-Integration
  562. - Monitoring-Setup
  563. ```
  564. ```bash
  565. #!/bin/bash
  566. set -e
  567. # Ensure we're in the project root directory
  568. PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
  569. # Define directories relative to project root
  570. CREDENTIALS_DIR="${PROJECT_ROOT}/config/credentials"
  571. DOCKER_DIR="${PROJECT_ROOT}/docker"
  572. KEYCLOAK_SETUP_DIR="${PROJECT_ROOT}/scripts/setup/keycloak"
  573. ANSIBLE_PLAYBOOK="${PROJECT_ROOT}/ansible/site.yml"
  574. ANSIBLE_INVENTORY="${PROJECT_ROOT}/ansible/inventory/staging/hosts"
  575. NEXTCLOUD_DATA_DIR="${PROJECT_ROOT}/data/nextcloud/data"
  576. TEMP_FILE=$(mktemp)
  577. KEYCLOAK_DB_DIR="${PROJECT_ROOT}/data/keycloak-db"
  578. # Create necessary directories
  579. sudo mkdir -p "${CREDENTIALS_DIR}"
  580. sudo mkdir -p "${DOCKER_DIR}"
  581. sudo mkdir -p "${KEYCLOAK_SETUP_DIR}"
  582. # Initialize password variables
  583. KEYCLOAK_ADMIN_PASSWORD=""
  584. KC_DB_PASSWORD=""
  585. TESTADMIN_PASSWORD=""
  586. TESTUSER_PASSWORD=""
  587. TESTSERVICEUSER_PASSWORD=""
  588. KEYCLOAK_NEXTCLOUD_CLIENT_SECRET=""
  589. # Function to read a password from a .env file
  590. read_password_from_env() {
  591. local env_file="$1"
  592. local variable_name="$2"
  593. if [ -f "$env_file" ]; then
  594. grep "^${variable_name}=" "$env_file" | cut -d '=' -f2
  595. fi
  596. }
  597. # Function to generate secure passwords
  598. generate_password() {
  599. openssl rand -base64 32
  600. }
  601. # Function to generate password if empty
  602. generate_password_if_empty() {
  603. local variable_name="$1"
  604. eval "local value=\$$variable_name"
  605. if [ -z "$value" ]; then
  606. eval "$variable_name=\"$(generate_password)\""
  607. echo ">>> Generiertes Passwort für: $variable_name"
  608. fi
  609. }
  610. # Function to create .env file
  611. create_env_file() {
  612. local env_file="$1"
  613. local content="$2"
  614. if [ ! -f "$env_file" ]; then
  615. echo "$content" > "$env_file"
  616. echo ">>> .env file created: $env_file"
  617. else
  618. echo ">>> .env file already exists: $env_file"
  619. fi
  620. }
  621. echo ">>> Überprüfe bestehende .env Dateien und lese Passwörter..."
  622. # Try reading passwords from existing .env files
  623. if [ -f "$DOCKER_DIR/.env" ]; then
  624. KC_DB_PASSWORD=$(read_password_from_env "$DOCKER_DIR/.env" "KC_DB_PASSWORD")
  625. KEYCLOAK_ADMIN_PASSWORD=$(read_password_from_env "$DOCKER_DIR/.env" "KEYCLOAK_ADMIN_PASSWORD")
  626. fi
  627. if [ -f "$KEYCLOAK_SETUP_DIR/.env" ]; then
  628. KEYCLOAK_ADMIN_PASSWORD=$(read_password_from_env "$KEYCLOAK_SETUP_DIR/.env" "KEYCLOAK_ADMIN_PASSWORD") # Überschreibt ggf. den Wert aus docker/.env
  629. TESTADMIN_PASSWORD=$(read_password_from_env "$KEYCLOAK_SETUP_DIR/.env" "TESTADMIN_PASSWORD")
  630. TESTUSER_PASSWORD=$(read_password_from_env "$KEYCLOAK_SETUP_DIR/.env" "TESTUSER_PASSWORD")
  631. TESTSERVICEUSER_PASSWORD=$(read_password_from_env "$KEYCLOAK_SETUP_DIR/.env" "TESTSERVICEUSER_PASSWORD")
  632. KEYCLOAK_NEXTCLOUD_CLIENT_SECRET=$(read_password_from_env "$KEYCLOAK_SETUP_DIR/.env" "KEYCLOAK_NEXTCLOUD_CLIENT_SECRET")
  633. fi
  634. echo ">>> Generiere neue Passwörter für fehlende Werte..."
  635. # Generate passwords if they are still empty
  636. generate_password_if_empty KEYCLOAK_ADMIN_PASSWORD
  637. generate_password_if_empty KC_DB_PASSWORD
  638. generate_password_if_empty TESTADMIN_PASSWORD
  639. generate_password_if_empty TESTUSER_PASSWORD
  640. generate_password_if_empty TESTSERVICEUSER_PASSWORD
  641. generate_password_if_empty KEYCLOAK_NEXTCLOUD_CLIENT_SECRET
  642. # Date for documentation
  643. SETUP_DATE=$(date '+%Y-%m-%d_%H-%M-%S')
  644. # Create credentials content
  645. CREDENTIALS_CONTENT=$(cat <<EOL
  646. Setup Date: ${SETUP_DATE}
  647. Keycloak Admin Credentials:
  648. Username: admin
  649. Password: ${KEYCLOAK_ADMIN_PASSWORD}
  650. Keycloak Database Credentials:
  651. Username: keycloak
  652. Password: ${KC_DB_PASSWORD}
  653. Test User Credentials:
  654. Admin Password: ${TESTADMIN_PASSWORD}
  655. User Password: ${TESTUSER_PASSWORD}
  656. Service User Password: ${TESTSERVICEUSER_PASSWORD}
  657. Nextcloud Client Secret: ${KEYCLOAK_NEXTCLOUD_CLIENT_SECRET}
  658. EOL
  659. )
  660. # Store credentials hash
  661. CREDENTIALS_HASH=$(echo "$CREDENTIALS_CONTENT" | sha256sum | awk '{print $1}')
  662. echo "$CREDENTIALS_HASH" > "${CREDENTIALS_DIR}/credentials_hash.txt"
  663. echo ">>> Credentials hash stored in: ${CREDENTIALS_DIR}/credentials_hash.txt"
  664. # Set GPG PASSPHRASE
  665. export GPG_PASSPHRASE=$(generate_password)
  666. # Set GPG agent environment variable
  667. export GPG_TTY=$(tty)
  668. echo ">>> Trying openssl encryption first"
  669. # Alternative Verschlüsselung mit Openssl
  670. echo "$CREDENTIALS_CONTENT" > "$TEMP_FILE"
  671. if openssl enc -aes-256-cbc -pbkdf2 -salt -in "$TEMP_FILE" -out "${CREDENTIALS_DIR}/credentials_${SETUP_DATE}.txt.enc" -k "$GPG_PASSPHRASE" ; then
  672. echo ">>> Credentials encrypted successfully using openssl"
  673. mv "${CREDENTIALS_DIR}/credentials_${SETUP_DATE}.txt.enc" "${CREDENTIALS_DIR}/credentials_${SETUP_DATE}.txt.gpg"
  674. else
  675. echo ">>> Openssl encryption failed, trying gpg"
  676. # Attempt to kill existing gpg agent
  677. gpgconf --kill gpg-agent 2>/dev/null
  678. echo ">>> Attempting to manually start gpg-agent with pinentry-curses"
  679. gpg-agent --daemon --pinentry-program /usr/bin/pinentry-curses
  680. gpg-connect-agent /bye 2>/dev/null
  681. eval $(gpg-agent --daemon)
  682. gpg-connect-agent updatestartuptty /bye 2>/dev/null
  683. # Attempt to encrypt credentials using GPG with error handling
  684. if echo "$CREDENTIALS_CONTENT" | gpg --symmetric --cipher-algo AES256 -vvv -o "${CREDENTIALS_DIR}/credentials_${SETUP_DATE}.txt.gpg" ; then
  685. echo ">>> Credentials encrypted successfully using gpg."
  686. else
  687. echo
  688. ```