docs(feature-plan): Replace WordPress with DokuWiki integration
- Replaced open_workshop_api (WordPress REST API) with open_workshop_dokuwiki - DokuWiki chosen for equipment documentation: - File-based, no separate database needed - Built-in versioning and history - Wiki syntax perfect for technical docs - Granular ACL (Odoo writable, all readable) - XML-RPC API for bidirectional sync - Planned DokuWiki features: - Automatic wiki page per equipment - Namespace structure: ausruestung:bereich:maschinenname - Template system with equipment data - Smart button 'Wiki öffnen' in Equipment form - Auto-sync on equipment changes - WordPress integration now optional: - Can be added later for public presentation - DokuWiki handles documentation (priority) - WordPress for marketing/SEO (future) - Updated architecture diagram and implementation status - open_workshop_api moved to 'optional' status
This commit is contained in:
parent
1b203eeb10
commit
92490aeb9c
|
|
@ -68,7 +68,8 @@ open_workshop/
|
|||
├── open_workshop/ # ✅ Alt-Modul (installable=False, Kompatibilität)
|
||||
├── open_workshop_base/ # ✅ FERTIG – Backend, _inherits maintenance.equipment
|
||||
├── open_workshop_pos/ # ✅ FERTIG – POS-Integration (JS, XML, UI)
|
||||
└── open_workshop_api/ # ⏳ GEPLANT – REST API für WordPress
|
||||
├── open_workshop_dokuwiki/ # ⏳ IN ENTWICKLUNG – DokuWiki-Integration
|
||||
└── open_workshop_api/ # 💤 OPTIONAL – REST API (zurückgestellt)
|
||||
```
|
||||
|
||||
**Entfernt:** open_workshop_maintenance (verworfen - Funktionalität direkt in open_workshop_base integriert)
|
||||
|
|
@ -140,87 +141,154 @@ Vollständig separiertes POS-Modul mit:
|
|||
|
||||
---
|
||||
|
||||
# 5. Modul: open_workshop_api ⏳ GEPLANT
|
||||
# 5. Modul: open_workshop_dokuwiki ⏳ IN ENTWICKLUNG
|
||||
|
||||
**Status: NOCH NICHT IMPLEMENTIERT**
|
||||
**Status: IN ENTWICKLUNG (Branch: feature/dokuwiki-integration)**
|
||||
|
||||
Dieses Modul stellt die **REST API** bereit, über die WordPress öffentlich verfügbare Daten abholt.
|
||||
Dieses Modul integriert **DokuWiki** als Dokumentationssystem für Equipment.
|
||||
|
||||
## 5.1 Ziele
|
||||
|
||||
- Minimaler externer Zugriff (nur API-Endpunkte)
|
||||
- JSON-Ausgabe für WordPress
|
||||
- Keine Odoo-Website erforderlich
|
||||
- Odoo selbst bleibt **nicht öffentlich erreichbar**
|
||||
- Automatische Wiki-Seiten für jedes Equipment
|
||||
- Strukturierte Dokumentation mit Templates
|
||||
- Bidirektionale Synchronisation (Odoo → DokuWiki)
|
||||
- Versionierung durch DokuWiki eingebaut
|
||||
- ACL: Odoo-Namespace nur für Odoo beschreibbar, für alle lesbar
|
||||
|
||||
## 5.2 API-Endpunkte
|
||||
## 5.2 Architektur
|
||||
|
||||
Pflicht:
|
||||
```
|
||||
Odoo (maintenance.equipment)
|
||||
↓
|
||||
XML-RPC Client
|
||||
↓
|
||||
DokuWiki API (wiki.putPage)
|
||||
↓
|
||||
ausruestung:bereich:maschinenname
|
||||
```
|
||||
|
||||
## 5.3 DokuWiki-Namespace-Struktur
|
||||
|
||||
```
|
||||
ausruestung:holzwerkstatt:formatkreissaege
|
||||
ausruestung:lasercutter:epilog_fusion_m2
|
||||
ausruestung:elektronik:loetstation_1
|
||||
```
|
||||
|
||||
**Namespace-Regeln:**
|
||||
- Hauptnamespace: `ausruestung:`
|
||||
- Zweite Ebene: Bereich (ows_area_id)
|
||||
- Dritte Ebene: Equipment-Name (normalisiert, lowercase, ohne Sonderzeichen)
|
||||
|
||||
## 5.4 Template-System
|
||||
|
||||
Automatisch generierte Seiten mit folgender Struktur:
|
||||
|
||||
```wiki
|
||||
====== [Equipment Name] ======
|
||||
|
||||
===== Grunddaten =====
|
||||
* **Seriennummer:** [serial_no]
|
||||
* **Bereich:** [area_id.name]
|
||||
* **Kategorie:** [category] (🟢🟡🔴)
|
||||
* **Standort:** [location]
|
||||
* **Hersteller:** [partner_id.name]
|
||||
|
||||
===== Sicherheit =====
|
||||
* **Einweisungspflichtig:** [Ja/Nein basierend auf category]
|
||||
* **Nutzungsprodukte:** [product_ids]
|
||||
* **Einweisungsprodukte:** [training_ids]
|
||||
|
||||
===== Bedienung =====
|
||||
[Platzhalter für Anleitung - manuell editierbar]
|
||||
|
||||
===== Wartung =====
|
||||
* **Nächste Wartung:** [next_action_date]
|
||||
* **Wartungshistorie:** Link zu Maintenance Requests
|
||||
|
||||
===== Notizen =====
|
||||
[note aus equipment.note oder editierbar]
|
||||
```
|
||||
|
||||
## 5.5 Technische Umsetzung
|
||||
|
||||
**Python-Bibliothek:**
|
||||
- `dokuwiki` (Python XML-RPC Client für DokuWiki)
|
||||
- Installation: `pip install dokuwiki`
|
||||
|
||||
**API-Methoden:**
|
||||
```python
|
||||
# DokuWiki XML-RPC API
|
||||
wiki.putPage(page_id, content, summary, minor) # Seite erstellen/aktualisieren
|
||||
wiki.getPage(page_id) # Seite lesen
|
||||
wiki.getAllPages() # Alle Seiten auflisten
|
||||
```
|
||||
|
||||
**Odoo-Integration:**
|
||||
- Neues Model: `ows.dokuwiki.config` (DokuWiki-URL, Credentials)
|
||||
- Methode auf `maintenance.equipment`: `sync_to_dokuwiki()`
|
||||
- Automated Action: Bei Equipment-Änderung → Wiki aktualisieren
|
||||
- Smart Button: "Wiki öffnen" → Link zur DokuWiki-Seite
|
||||
|
||||
## 5.6 Sicherheitsmechanismen
|
||||
|
||||
**DokuWiki ACL:**
|
||||
```
|
||||
ausruestung:* @ALL 1 # Lesezugriff für alle
|
||||
ausruestung:* @odoo 8 # Schreibzugriff nur für Odoo-User
|
||||
```
|
||||
|
||||
**Odoo-Seite:**
|
||||
- Credentials in System-Parameter oder ir.config_parameter
|
||||
- Verschlüsselte Speicherung des API-Passworts
|
||||
- Logging aller Wiki-Änderungen
|
||||
|
||||
## 5.7 Vorteile DokuWiki
|
||||
|
||||
✅ **Leichtgewichtig** – File-based, keine separate Datenbank
|
||||
✅ **Versionierung** – Eingebautes History-System
|
||||
✅ **Wiki-Syntax** – Perfekt für strukturierte Dokumentation
|
||||
✅ **ACL-System** – Granulare Berechtigungen
|
||||
✅ **Suchfunktion** – Volltext-Suche eingebaut
|
||||
✅ **Plugins** – Erweiterbar (Markdown, Galleries, etc.)
|
||||
✅ **Open Source** – Keine Lizenzkosten
|
||||
|
||||
---
|
||||
|
||||
# 6. Modul: open_workshop_api ⏳ GEPLANT
|
||||
|
||||
**Status: ZURÜCKGESTELLT (DokuWiki hat Priorität)**
|
||||
|
||||
REST API für externe Systeme (falls später WordPress/App-Integration gewünscht).
|
||||
|
||||
## 6.1 Potenzielle Endpunkte
|
||||
|
||||
```
|
||||
GET /api/v1/machines
|
||||
GET /api/v1/machine/<id>
|
||||
```
|
||||
|
||||
Empfohlen:
|
||||
|
||||
```
|
||||
GET /api/v1/areas
|
||||
GET /api/v1/files/<attachment_id>
|
||||
GET /api/v1/events (später für Kurse)
|
||||
```
|
||||
|
||||
## 5.3 JSON Beispiel
|
||||
**Hinweis:** Mit DokuWiki kann die öffentliche Dokumentation direkt über das Wiki erfolgen.
|
||||
Eine separate REST API ist optional und wird nur bei Bedarf implementiert.
|
||||
|
||||
```json
|
||||
{
|
||||
"id": 12,
|
||||
"name": "Formatkreissäge",
|
||||
"status": "available",
|
||||
"area": "Holzwerkstatt",
|
||||
"image_url": "https://odoo.example.org/api/v1/file/29",
|
||||
"manual_url": "https://odoo.example.org/api/v1/file/55",
|
||||
"training_required": true
|
||||
}
|
||||
```
|
||||
## 6.1 Warum DokuWiki statt WordPress?
|
||||
|
||||
## 5.4 Sicherheitsmechanismen
|
||||
- **Einfacher**: Keine separate Datenbank, file-based
|
||||
- **Wiki-Syntax**: Perfekt für technische Dokumentation
|
||||
- **Versionierung**: Eingebautes History-System
|
||||
- **ACL**: Feinere Berechtigungskontrolle
|
||||
- **Leichtgewichtig**: Weniger Overhead als WordPress
|
||||
- **Integration**: XML-RPC API für bidirektionale Sync
|
||||
|
||||
- CORS nur für WordPress-Domain erlauben
|
||||
- Optionaler Token im Header (`Authorization: Bearer <token>`)
|
||||
- Kein Zugriff auf `/web`, `/api/web`, `/pos`
|
||||
- Rate Limiting via Reverse Proxy
|
||||
## 6.2 Zukunft: WordPress optional
|
||||
|
||||
---
|
||||
Falls später gewünscht, kann WordPress **zusätzlich** die öffentliche Maschinenliste anzeigen:
|
||||
- DokuWiki für **Dokumentation** (intern/extern lesbar)
|
||||
- WordPress für **Präsentation** (extern mit Bildern, SEO)
|
||||
- Beide Systeme greifen auf Odoo-Daten zu
|
||||
|
||||
# 6. WordPress Integration ⏳ GEPLANT
|
||||
|
||||
**Status: VORBEREITET (API noch nicht implementiert)**
|
||||
|
||||
WordPress bleibt die öffentliche Website.
|
||||
|
||||
## 6.1 Warum?
|
||||
|
||||
- Sehr hohe Performance (CDN, Caching)
|
||||
- SEO-optimiert
|
||||
- Keine Belastung deiner Internetleitung
|
||||
- Keine Sicherheitsrisiken im internen Odoo
|
||||
- Keine Lizenzkosten
|
||||
|
||||
## 6.2 WordPress Plugin (bereitgestellt)
|
||||
|
||||
Das Plugin:
|
||||
|
||||
- Ruft Odoo-API ab
|
||||
- Rendert Maschinenliste via Shortcode
|
||||
- Konsumiert JSON-Daten
|
||||
- Unterstützt Token-Auth
|
||||
|
||||
Beispiel:
|
||||
|
||||
```
|
||||
[openworkshop_machines]
|
||||
```
|
||||
Aktuell hat DokuWiki-Integration **Priorität**.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -229,46 +297,58 @@ Beispiel:
|
|||
```
|
||||
Internet
|
||||
|
|
||||
WordPress (Frontend, CDN)
|
||||
DokuWiki (Dokumentation)
|
||||
WordPress (optional: Präsentation)
|
||||
|
|
||||
fetch JSON via REST API
|
||||
XML-RPC / REST API
|
||||
|
|
||||
----------------------------
|
||||
| API Gateway (open_workshop_api)
|
||||
| Exposed only: /api/v1/*
|
||||
| Odoo Backend (LAN/VPN)
|
||||
| open_workshop_dokuwiki
|
||||
| maintenance.equipment
|
||||
----------------------------
|
||||
|
|
||||
Odoo Backend (LAN/VPN)
|
||||
Maschinen, POS, Benutzer, Einweisungen
|
||||
POS, Benutzer, Einweisungen
|
||||
```
|
||||
|
||||
**Kein direkter Zugriff auf Odoo-Weboberfläche!**
|
||||
**Fokus:** Equipment-Dokumentation über DokuWiki, WordPress später optional.
|
||||
|
||||
---
|
||||
|
||||
# 8. Sicherheit
|
||||
|
||||
- Reverse Proxy (Traefik/Nginx) muss alle Odoo-Backoffice-URLS sperren
|
||||
- Nur `/api/v1/*` darf öffentlich sein
|
||||
**DokuWiki ACL:**
|
||||
- Namespace `ausruestung:*` lesbar für alle (@ALL = 1)
|
||||
- Namespace `ausruestung:*` schreibbar nur für Odoo (@odoo = 8)
|
||||
- Manuelle Edits durch Admins möglich
|
||||
|
||||
**Odoo:**
|
||||
- DokuWiki-Credentials in ir.config_parameter
|
||||
- XML-RPC über HTTPS
|
||||
- Logging aller Wiki-Operationen
|
||||
- Backup-System für Wiki-Dateien
|
||||
|
||||
**Optional (REST API):**
|
||||
- Reverse Proxy sperrt alle Odoo-URLs außer `/api/v1/*`
|
||||
- HTTPS erzwingen
|
||||
- Rate-Limit + Firewall-Regeln
|
||||
- Token-Authentifizierung optional zusätzlich einsetzbar
|
||||
- Rate-Limit + Firewall
|
||||
- Token-Auth
|
||||
|
||||
---
|
||||
|
||||
# 9. Vorteile dieser Architektur
|
||||
|
||||
✔ **WordPress bleibt ultraschnell** (1000 Besucher/Tag problemlos)
|
||||
✔ **DokuWiki für Dokumentation** – Wiki-Syntax perfekt für Anleitungen
|
||||
✔ **Versionierung eingebaut** – History für alle Änderungen
|
||||
✔ **Odoo bleibt sicher** hinter Firewall
|
||||
✔ **Keine Benutzerkosten** → alle Ehrenamtlichen können intern mitarbeiten
|
||||
✔ **Keine Benutzerkosten** – alle Ehrenamtlichen können intern mitarbeiten
|
||||
✔ **Modular, wartbar, zukunftssicher**
|
||||
✔ **API erlaubt feine Steuerung**, welche Daten öffentlich sind
|
||||
✔ **Keine Last auf DSL-Leitung** (WordPress hostet extern)
|
||||
✔ **Maintenance-Integration** ohne Extra-Modul direkt in Base
|
||||
✔ **Bidirektionale Sync** – Odoo aktualisiert Wiki automatisch
|
||||
✔ **Öffentlich lesbar** – Anleitungen für alle verfügbar
|
||||
✔ **WordPress optional** – Kann später für Marketing/SEO ergänzt werden
|
||||
|
||||
---
|
||||
|
||||
# 10. Implementierungsstand (08.12.2025)
|
||||
# 10. Implementierungsstand (13.12.2025)
|
||||
|
||||
| Schritt | Status | Details |
|
||||
|---------|--------|---------|
|
||||
|
|
@ -276,45 +356,55 @@ Beispiel:
|
|||
| 2. open_workshop_pos | ✅ **FERTIG** | POS-Integration komplett |
|
||||
| 3. ~~open_workshop_maintenance~~ | ❌ **VERWORFEN** | Direkt in Base integriert |
|
||||
| 4. Maintenance Integration | ✅ **FERTIG** | _inherits Pattern implementiert |
|
||||
| 5. Migration Workflow | ✅ **FERTIG** | SQL + Python, CI/CD integriert |
|
||||
| 6. open_workshop_api | ⏳ **GEPLANT** | REST API für WordPress |
|
||||
| 7. WordPress Plugin | ⏳ **GEPLANT** | Frontend-Integration |
|
||||
| 5. Equipment-View Integration | ✅ **FERTIG** | Related fields, Menu-Migration |
|
||||
| 6. Migration Workflow | ✅ **FERTIG** | SQL + Python, CI/CD integriert |
|
||||
| 7. open_workshop_dokuwiki | ⏳ **IN ENTWICKLUNG** | Branch: feature/dokuwiki-integration |
|
||||
| 8. open_workshop_api | 💤 **OPTIONAL** | Zurückgestellt, bei Bedarf |
|
||||
|
||||
---
|
||||
|
||||
# 11. Nächste Schritte
|
||||
|
||||
1. **open_workshop_api** entwickeln
|
||||
- REST Controller implementieren
|
||||
- JSON-Serializer für machines/areas
|
||||
- CORS und Security konfigurieren
|
||||
- Token-Auth optional hinzufügen
|
||||
1. **open_workshop_dokuwiki** entwickeln
|
||||
- DokuWiki XML-RPC Client implementieren
|
||||
- Template-System für Equipment-Seiten
|
||||
- Sync-Mechanismus (Odoo → Wiki)
|
||||
- Smart Button "Wiki öffnen"
|
||||
- ACL-Konfiguration dokumentieren
|
||||
|
||||
2. **WordPress Plugin** anpassen
|
||||
- API-Endpunkte konfigurieren
|
||||
- Shortcode-Rendering
|
||||
- Caching implementieren
|
||||
2. **DokuWiki aufsetzen**
|
||||
- Installation auf Server
|
||||
- Namespace `ausruestung:` anlegen
|
||||
- ACL konfigurieren (@odoo Gruppe)
|
||||
- XML-RPC API aktivieren
|
||||
|
||||
3. **Testing & Deployment**
|
||||
- API-Tests schreiben
|
||||
- Reverse Proxy konfigurieren
|
||||
- Performance-Tests
|
||||
- Go-Live vorbereiten
|
||||
3. **Testing**
|
||||
- Equipment-Seiten automatisch generieren
|
||||
- Sync bei Änderungen testen
|
||||
- ACL-Rechte validieren
|
||||
- Performance testen
|
||||
|
||||
4. **Optional: WordPress Plugin**
|
||||
- Falls öffentliche Präsentation gewünscht
|
||||
- REST API dann implementieren
|
||||
- Caching-Layer hinzufügen
|
||||
|
||||
---
|
||||
|
||||
# 12. Endfazit
|
||||
|
||||
Diese Architektur hat sich bewährt:
|
||||
Diese Architektur vereint das Beste aus beiden Welten:
|
||||
|
||||
- ✅ **Technisch korrekt** – _inherits Pattern statt separatem Modul
|
||||
- ✅ **Performant** – Maintenance.equipment als Single Source of Truth
|
||||
- ✅ **Sicher** – API-Layer trennt intern/extern
|
||||
- ✅ **Kostenoptimiert** – Keine Odoo.sh Lizenzen nötig
|
||||
- ✅ **Dokumentiert** – DokuWiki für strukturierte Anleitungen
|
||||
- ✅ **Versioniert** – History-System eingebaut
|
||||
- ✅ **Öffentlich zugänglich** – Wiki lesbar für alle
|
||||
- ✅ **Kostenoptimiert** – Keine zusätzlichen Lizenzen
|
||||
- ✅ **Langfristig erweiterbar** – Modularer Aufbau
|
||||
- ✅ **Produktiv im Einsatz** – Migration erfolgreich abgeschlossen
|
||||
|
||||
Die API ist **zentrales Zukunftsmodul** für die WordPress-Integration.
|
||||
**DokuWiki-Integration ist der nächste logische Schritt** für bessere Equipment-Dokumentation.
|
||||
|
||||
**Letztes Update: 08.12.2025**
|
||||
**Letztes Update: 13.12.2025**
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user