diff --git a/Mint Cloud Architecture.canvas b/Mint Cloud Architecture.canvas index 986f592f..87069e23 100644 --- a/Mint Cloud Architecture.canvas +++ b/Mint Cloud Architecture.canvas @@ -18,14 +18,20 @@ {"id":"b8f22db569cc69e9","type":"group","x":920,"y":-140,"width":330,"height":100,"color":"1","label":"ACME (Let's Encrypt)"}, {"id":"44c519bd19bcd65f","type":"group","x":920,"y":-350,"width":330,"height":100,"color":"1","label":"CrowdSec"}, {"id":"d060ee64dd15c9cf","type":"group","x":-1520,"y":-115,"width":330,"height":100,"color":"1","label":"Code Forge (Codey)"}, + {"id":"dcf06ea30c6f733d","type":"text","text":"API","x":-320,"y":-85,"width":130,"height":60}, + {"id":"f2a023a73e2bdcdd","type":"text","text":"etcd","x":-160,"y":-85,"width":130,"height":60}, + {"id":"8b120478236e21dc","type":"text","text":"Sender","x":-810,"y":-490,"width":130,"height":60,"color":"1"}, + {"id":"92fb8d9fa302f6b1","type":"text","text":"Event","x":-655,"y":-490,"width":130,"height":60,"color":"1"}, + {"id":"a66edac3ddd395e2","type":"text","text":"Service Account","x":-889,"y":-245,"width":179,"height":60,"color":"3"}, + {"id":"18a3cf95414f5369","type":"text","text":"Manifest","x":-900,"y":60,"width":140,"height":60,"color":"4"}, + {"id":"5a596f91e7103d0c","type":"text","text":"Environment","x":-700,"y":60,"width":160,"height":60,"color":"4"}, + {"id":"cf45e1c4b0f1b7bf","type":"text","text":"Repo","x":-1060,"y":-20,"width":122,"height":60,"color":"4"}, {"id":"43268b11483c8d6e","type":"text","text":"Scheduler","x":-320,"y":5,"width":130,"height":60}, {"id":"c13b3a207917b83d","type":"text","text":"RBAC","x":-160,"y":5,"width":130,"height":60}, {"id":"6ce5cc096f165c2d","type":"text","text":"enterprise-18.0.tar.gz","x":-359,"y":200,"width":182,"height":69,"color":"1"}, {"id":"eb08434a02553ef4","type":"text","text":"enterprise-17.0.tar.gz","x":-355,"y":299,"width":178,"height":60,"color":"1"}, {"id":"89c42576995a9cc7","type":"text","text":"dump-18.0.sql","x":-162,"y":200,"width":182,"height":69,"color":"1"}, {"id":"8a60def955ac42fa","type":"text","text":"dump-17.0.sql","x":-162,"y":299,"width":182,"height":60,"color":"1"}, - {"id":"dcf06ea30c6f733d","type":"text","text":"API","x":-320,"y":-85,"width":130,"height":60}, - {"id":"f2a023a73e2bdcdd","type":"text","text":"etcd","x":-160,"y":-85,"width":130,"height":60}, {"id":"95766495719a37b3","type":"text","text":"Odoo Build Workflow","x":-320,"y":480,"width":144,"height":60,"color":"4"}, {"id":"9aa0ee094633cdaa","type":"text","text":"Runner","x":-160,"y":480,"width":140,"height":60}, {"id":"5205b20caa2b886b","type":"text","text":"Kubernetes Master","x":-320,"y":-225,"width":225,"height":60,"color":"3"}, @@ -33,52 +39,46 @@ {"id":"a0e6ead9d4c1cb26","type":"text","text":"Transaction","x":-225,"y":-490,"width":130,"height":60,"color":"1"}, {"id":"c7c81edf0fc722ed","type":"text","text":"ConfigMap","x":-680,"y":-20,"width":140,"height":60,"color":"4"}, {"id":"f8ec3076b89362b3","type":"text","text":"App","x":-900,"y":-20,"width":100,"height":60,"color":"4"}, + {"id":"cec3783e47d70aff","type":"text","text":"Cluster","x":-700,"y":-95,"width":160,"height":60,"color":"4"}, + {"id":"ea848f1fde8fa4dd","type":"text","text":"Namespace","x":-900,"y":-95,"width":160,"height":60,"color":"4"}, {"id":"b7199a5adfeeaccb","type":"text","text":"odoo-deploy.yaml","x":-918,"y":249,"width":197,"height":60,"color":"4"}, {"id":"ce16b6db6e27aa72","type":"text","text":"odoo-srv.yaml","x":-700,"y":249,"width":197,"height":60,"color":"4"}, {"id":"0cee2df8faf4757e","type":"text","text":"postgres-deploy.yaml","x":-918,"y":339,"width":197,"height":60,"color":"4"}, {"id":"4bdfa083b05db009","type":"text","text":"postgres-srv.yaml","x":-700,"y":339,"width":197,"height":60,"color":"4"}, - {"id":"8b120478236e21dc","type":"text","text":"Sender","x":-810,"y":-490,"width":130,"height":60,"color":"1"}, - {"id":"cec3783e47d70aff","type":"text","text":"Cluster","x":-700,"y":-95,"width":160,"height":60,"color":"4"}, - {"id":"ea848f1fde8fa4dd","type":"text","text":"Namespace","x":-900,"y":-95,"width":160,"height":60,"color":"4"}, - {"id":"92fb8d9fa302f6b1","type":"text","text":"Event","x":-655,"y":-490,"width":130,"height":60,"color":"1"}, - {"id":"71a51c96b85fadfa","type":"text","text":"Ingress","x":520,"y":-120,"width":120,"height":60}, - {"id":"329ab2c59cf6f4e7","type":"text","text":"Deployment","x":220,"y":-120,"width":150,"height":60}, - {"id":"723f02b644d72fba","type":"text","text":"Prometheus","x":530,"y":120,"width":140,"height":60}, - {"id":"31790cf32eab090a","type":"text","text":"Grafana","x":530,"y":20,"width":140,"height":60}, + {"id":"51772f93b21a71b8","type":"text","text":"Odoo Instance","x":-1076,"y":-245,"width":158,"height":60,"color":"3"}, + {"id":"61818d7dab75d4ed","type":"text","text":"Organisation","x":-1500,"y":-95,"width":130,"height":60,"color":"1"}, + {"id":"8919ecf5c7a821b2","type":"text","text":"Service","x":380,"y":-120,"width":120,"height":60}, + {"id":"d7d15ef18fc64683","type":"text","text":"Init","x":240,"y":120,"width":100,"height":60}, + {"id":"77dffd664ffca082","type":"text","text":"Harbor","x":230,"y":279,"width":140,"height":60}, + {"id":"101fa480091a2153","type":"text","text":"Postgres","x":370,"y":120,"width":120,"height":60}, + {"id":"a28a0de013a4b49b","type":"text","text":"Velero","x":230,"y":360,"width":140,"height":60}, + {"id":"1c0e6a6d1c01f931","type":"text","text":"Storage","x":80,"y":600,"width":130,"height":60,"color":"1"}, + {"id":"b8e5928d7d527c9f","type":"text","text":"Kopia Server","x":240,"y":600,"width":130,"height":60,"color":"6"}, + {"id":"f01f305db5c5b9d2","type":"text","text":"Git Provider","x":-1060,"y":-95,"width":122,"height":60,"color":"4"}, + {"id":"2d0b5156065769f7","type":"text","text":"Git Repos","x":-1345,"y":-95,"width":130,"height":60,"color":"1"}, {"id":"42291fbf852109c2","type":"text","text":"HTTP-API","x":940,"y":-120,"width":130,"height":60,"color":"1"}, {"id":"459f82249f7fcc00","type":"text","text":"DNS-API","x":1100,"y":-120,"width":130,"height":60,"color":"1"}, {"id":"9f8aa0ad1d48cec0","type":"text","text":"IP Blocklist","x":940,"y":-330,"width":130,"height":60,"color":"1"}, - {"id":"8919ecf5c7a821b2","type":"text","text":"Service","x":380,"y":-120,"width":120,"height":60}, - {"id":"d772e43944e83be1","type":"text","text":"Kubernetes Agent","x":213,"y":-260,"width":187,"height":60,"color":"3"}, - {"id":"3aeb969d047cb203","type":"text","text":"Service Account","x":442,"y":-260,"width":198,"height":60,"color":"3"}, {"id":"c43958050f2525ff","type":"text","text":"Keycloak","x":370,"y":20,"width":120,"height":60}, - {"id":"50af5bb0668723b6","type":"text","text":"Addons","x":420,"y":279,"width":140,"height":60}, - {"id":"a3a7196d6996c05c","type":"text","text":"Database","x":420,"y":360,"width":140,"height":60}, {"id":"538706384c193d75","type":"text","text":"Traffic Logs","x":1100,"y":-330,"width":130,"height":60,"color":"1"}, {"id":"9352d048d65c30d7","type":"text","text":"Cert Manager","x":660,"y":-120,"width":120,"height":60}, - {"id":"5fe01b8955580f38","type":"text","text":"Filestore","x":600,"y":279,"width":140,"height":60}, - {"id":"d7d15ef18fc64683","type":"text","text":"Init","x":240,"y":120,"width":100,"height":60}, {"id":"1182553e34d763af","type":"text","text":"Odoo","x":240,"y":20,"width":100,"height":60}, - {"id":"77dffd664ffca082","type":"text","text":"Harbor","x":230,"y":279,"width":140,"height":60}, - {"id":"101fa480091a2153","type":"text","text":"Postgres","x":370,"y":120,"width":120,"height":60}, + {"id":"71a51c96b85fadfa","type":"text","text":"Ingress","x":520,"y":-120,"width":120,"height":60}, + {"id":"723f02b644d72fba","type":"text","text":"Prometheus","x":530,"y":120,"width":140,"height":60}, + {"id":"31790cf32eab090a","type":"text","text":"Grafana","x":530,"y":20,"width":140,"height":60}, + {"id":"3aeb969d047cb203","type":"text","text":"Service Account","x":442,"y":-260,"width":198,"height":60,"color":"3"}, + {"id":"50af5bb0668723b6","type":"text","text":"Addons","x":420,"y":279,"width":140,"height":60}, + {"id":"a3a7196d6996c05c","type":"text","text":"Database","x":420,"y":360,"width":140,"height":60}, + {"id":"5fe01b8955580f38","type":"text","text":"Filestore","x":600,"y":279,"width":140,"height":60}, {"id":"89fd0cbaf4354781","type":"text","text":"Images","x":600,"y":360,"width":140,"height":60}, {"id":"476c8f5d275a6033","type":"text","text":"**K8s**","x":260,"y":-620,"width":115,"height":60,"color":"3"}, + {"id":"329ab2c59cf6f4e7","type":"text","text":"Deployment","x":220,"y":-120,"width":150,"height":60}, + {"id":"d772e43944e83be1","type":"text","text":"Kubernetes Agent","x":213,"y":-260,"width":187,"height":60,"color":"3"}, {"id":"d0270aff89d7d117","type":"text","text":"**Provider**","x":405,"y":-620,"width":115,"height":60,"color":"1"}, {"id":"55a84d654d3f83c5","type":"text","text":"**Container**","x":546,"y":-620,"width":111,"height":60}, {"id":"5336ea7cfa02ef9e","type":"text","text":"**Data**","x":405,"y":-540,"width":115,"height":60,"color":"4"}, {"id":"4ce3abc2078a70ac","type":"text","text":"**Docker**","x":260,"y":-540,"width":115,"height":60,"color":"6"}, - {"id":"a28a0de013a4b49b","type":"text","text":"Velero","x":230,"y":360,"width":140,"height":60}, - {"id":"1c0e6a6d1c01f931","type":"text","text":"Storage","x":80,"y":600,"width":130,"height":60,"color":"1"}, - {"id":"b8e5928d7d527c9f","type":"text","text":"Kopia Server","x":240,"y":600,"width":130,"height":60,"color":"6"}, - {"id":"51772f93b21a71b8","type":"text","text":"Odoo Instance","x":-1076,"y":-245,"width":158,"height":60,"color":"3"}, - {"id":"a66edac3ddd395e2","type":"text","text":"Service Account","x":-889,"y":-245,"width":179,"height":60,"color":"3"}, - {"id":"f01f305db5c5b9d2","type":"text","text":"Git","x":-1060,"y":-95,"width":122,"height":60,"color":"4"}, - {"id":"18a3cf95414f5369","type":"text","text":"Manifest","x":-900,"y":60,"width":140,"height":60,"color":"4"}, - {"id":"5a596f91e7103d0c","type":"text","text":"Environment","x":-700,"y":60,"width":160,"height":60,"color":"4"}, - {"id":"56de67891d2468bf","type":"text","text":"Project","x":-1060,"y":60,"width":122,"height":60,"color":"4"}, - {"id":"cf45e1c4b0f1b7bf","type":"text","text":"Repo","x":-1060,"y":-20,"width":122,"height":60,"color":"4"}, - {"id":"61818d7dab75d4ed","type":"text","text":"Organisation","x":-1500,"y":-95,"width":130,"height":60,"color":"1"}, - {"id":"2d0b5156065769f7","type":"text","text":"Git Repos","x":-1345,"y":-95,"width":130,"height":60,"color":"1"} + {"id":"cd01d999db89ac6e","type":"text","text":"Branch","x":-1058,"y":60,"width":122,"height":60,"color":"4"} ], "edges":[ {"id":"096d8510b30bed73","fromNode":"30d68aaa30e0f119","fromSide":"right","toNode":"16562f1c5a372a6f","toSide":"left","label":"manage"}, diff --git a/Mint Cloud Specification.md b/Mint Cloud Specification.md index 14834d15..ceebfcad 100644 --- a/Mint Cloud Specification.md +++ b/Mint Cloud Specification.md @@ -24,6 +24,7 @@ Die Odoo-Module für den Webshop sind hier beschrieben: [[Specification Website Die Git-Integration ist ein entkoppelte Odoo-Modul: [[Specification Git Kubernetes]] Mit [[Mailgun]] können Absender-Domain registriert werden: . + ### Odoo Deployment Der Cluster ist auf das Deployment der Odoo Webapp ausgerichtet. diff --git a/Richtlinie - Softwareentwicklung.md b/Richtlinie - Softwareentwicklung.md index ca2bbcb8..1246d392 100644 --- a/Richtlinie - Softwareentwicklung.md +++ b/Richtlinie - Softwareentwicklung.md @@ -19,10 +19,12 @@ Für jede Softwareentwicklung wird ein [[Keep a changelog]] geführt. Das Git-Branching-Model sieht folgende Benennung vor: -`main`: Produktiver branch\ -`int`: Integraton und Staging\ -`dev`: Entwicklung - +- `prod`: production +- `main`: production +- `int`: integration +- `test`: testing +- `dev`: development +- `upg`: upgrade ## Linting Wir verwenden [[pre-commit]] für das Linting. \ No newline at end of file diff --git a/Specification Git Kubernetes.md b/Specification Git Kubernetes.md index daf7b0a6..37f84629 100644 --- a/Specification Git Kubernetes.md +++ b/Specification Git Kubernetes.md @@ -20,16 +20,41 @@ models: ```mermaid classDiagram - User --> Repo - - class User{ + Forge <--> User + ForgePartnerRel --> Forge + ForgePartnerRel --> ResPartner + Repo --> Forge + Branch --> Repo + + class User { char name required - many2one app_id required + many2many git_forge_ids + char ssh_private_key } + class Forge { + char name required + char hostname required + many2many user_ids + } + + class ForgePartnerRel { + forge_id many2one required + partner_id many2one required + char name required + } + class Repo{ char name required - char app_name required + many2one forge_id + char reponame required + one2many branch + } + + class Branch{ + char name required + integer sequence required + boolean default } ```