Om een SaaS Platform veilig en stabiel te kunnen schalen is een flinke dosis dev-ops kennis vereist: een snelle, schaalbare Docker container structuur is essentieel voor je de online applicatie. Wij ontwikkelen online platforms, waarin oneindig veel klanten in geïsoleerde omgevingen kunnen werken: één centrale SaaS platform, oneindig veel klant-omgevingen. Hoe ziet deze software architectuur eruit? Een prototype:
Waarom een Docker container fundament nodig is? Lees hier.
Hoe kan de Docker container architectuur voor een SaaS Platform eruit zien, een concept:
Generieke informatie
- Dit betreft de container architectuur voor een SaaS applicatie waarin, volledig automatisch, oneindig veel omgevingen gegenereerd kunnen worden: een subdomein per klant wordt aangemaakt, maar ook oneindig veel hoofddomeinen kunnen hierin leven.
- De SSL certificaten worden voor elke omgeving geheel automatisch gegenereerd en verlengd met LetsEncrypt.
- Na initiële productie zal constante optimalisatie van deze container architectuur zal noodzakelijk zijn, om het online platform veilig, snel en stabiel te houden. Én zodat de server kosten in het business model blijven passen.
Architectuur Docker containers
Allereerst moet de gehele container architectuur stabiel werkend gekregen worden, nog zonder de daadwerkelijke applicatie: alle Docker containers en automatisch gegenereerde container-sets moeten in één platform stabiel worden.
Verdere noodzakelijk taken zodat er onbeperkt nieuwe, geïsoleerde applicatie-omgevingen voor klanten genereren kunnen worden:
1. ‘Bash script’ development
Zodra er een nieuwe omgeving voor een klant aangemaakt moet worden gebeurd dit met behulp van een custom Bash script, die onder andere volgende taken moet uitvoeren om een nieuwe container-set te genereren:
- Alle benodigde folders aanmaken.
- Alle environment variables aanmaken.
- Docker Compose file aanmaken (deze genereert de applicatie container set).
- Host file aanmaken.
- Email settings aanmaken.
2. ‘Docker gen’ container
De Docker Gen taken:
- Geeft de 'Gateway proxy' (Nginx in Gateway container set) routing door voor de nieuwe omgeving.
- Maakt Virtual Host aan.
- Genereert Nginx config voor elke omgeving.
- Leest de gegenereerde environment variables uit van alle ‘Applicatie container sets’.
- Maakt Docker containers aan in betreffende applicatie set, die krijgen de juiste environment variabelen.
3. Taken SSL container in ‘Gateway container set’
- Maakt SSL certificaten aan via LetsEncrypt
- Docker-gen zorgt ervoor dat het juiste SSL certificaat aan betreffende omgeving wordt gekoppeld.
- Automatisch vernieuwen van het SSL certificaat voor alle domeinen, ook via de LetsEncrypt API.
4. Interfaces tussen custom SaaS applicatie en open source code
- Het grootste deel van de applicatie code leeft in de containers ‘PHP / Web applicatie’ en ‘NodeJS’.
- Deze custom applicatie code moet interfacen met alle andere containers binnen de ‘applicatie container set’ om het integrale SaaS platform werkend te krijgen.
- De Proxy / Nginx container werkt hierin als router: alle traffic binnen de ‘applicatie container set’ handled hij.
Veel van deze containers zijn open source beschikbaar, maar de architectuur om dit container platform als beschreven te ontwikkelen is niet beschikbaar, we zullen we dit op maat moeten ontwikkelen, testen en itereren.
En, voordat je deze architectuur kunt gaan produceren zal allereerst een prototype gemaakt moeten worden, waarin flink wat research, configuratie en testing nodig is.
Ook ontkom je niet aan development van custom containers, omdat niet alle containers direct beschikbaar zijn, of out-of-the-box werken zoals gewenst wordt.
Wrap up
Tot zover een concept Docker container structuur voor een online SaaS Platform. Wij realiseerden eerder platforms waarin deze architectuur doorgevoerd is.
Onze ervaring is, om dit goed werkend te krijgen heb je een specialistisch software development team nodig. Waarbij iedereen 'full stack' kan meedenken, maar specialisaties verdeeld zijn. Die software specialisaties zijn noodzakelijk om zo'n online platform veilig, stabiel en schaalbaar te krijgen.