Platforma běží v jednom kontejneru a může pustit například přes docker-compose příkazem:
docker-compose build
a následně docker-compose up -d
.
Následně je potřeba nastavit IP addresu DNS serveru na svém stroji, na adresu kontejneru.
Pro linux existuje skript update-ns.sh, který přepíná mezi přidáním nameserveru a odebráním
Tento dokument slouží jako technická příručka pro webhostingovou platformu. Webhostingová platforma běží na kontejneru využívajícím Alpine Linux jako operační systém. Samotná platforma je složena s několika služeb, které vzájemně komunikují. v následujících částech budou popsány podrobněji.
Dnsmasq je lehký server DNS a DHCP, který je využíván v platformě k překladu názvu hostitele a jeho odpovídající IP adresy v místní síti.
Jednotlivé záznamy hostitelu/IP jsou uloženy v "hostfile"
Na platformě jsou nakonfigurované jsou 2 hostifile:
- priority - pro záznamy Aplikačního serveru a GUI panelu.
- users - pro záznamy uživatelů - spravovány HostingWorker službou.
Před spuštením kontejneru není předem určena IP adresa kontejneru, z tohoto důvodu nejsou záznamy hostitele uloženy přímo v souborech hostitele, ale místo toho jsou uloženy v samostatném souboru s koncovkou .dat, který se při spuštění načte do souboru hostitele se správnou IP adresou pomocí DnsUtil skriptu. (/opt/app/worker/DnsUtil.php)
Webový server používaný ke správě virtuálních hostitelů pro platformu.
Defaultně nakonfigurované virtuální hostitle jsou pouze pro GUI a aplikační server.
Ve složce /etc/nginx/http.d se ukládají virtuální hosti. Ti jsou spravováni službou HostingWorker.
Virtuální host se vytváři ze šablony a obecně pro něj plati, že má kořen ve /var/www/{domena}. Tato složka je pro něj vytvořena
Vsftpd je lehký, bezpečný a rychlý FTP server, který je pro platformu je nakonfigurovaný s podporou virtuálních uzivatelu přes pam.d pwdfile. FTP uživatele spravuje HostingWorker služba. "virtuální uživatel" Odpovídá doméně a existuje pouze jeden účet na doménu. "Virtuální uživatel" má přístup pouze ke své složce v adresaci /var/www/{domena}
Postgresql je systém správy relačních databází. Na platformě defaultně existují databaze pro aplikacni server, které ukládají stav a nastavení všech služeb pro daného virtuálního hostitele a uživatele, který virtualního hostitele objednal. Postgres také používáme pro databáze uživatelů. Služba HostingWorker je zodpovědná za vytvoření uživatele a databáze a konfiguraci přístupu pro něj.
PHP aplikace, která primárně přijmá požadavky na správu hostingu pro uživatele. Server je napojený na HostingWorker, přes Redis frontu, které posílá zprávy s definicí operace a parametrami operace.
Rozhraní pro uživatele. Jednoduchá React SPA, která komunikuje s aplikačním serverem.
Hlavní komponenta platformy. Dlouhodobě běžící PHP skript ke správě služeb. Provadí CRUD operace v jednotlivých službách a zároveň je schopný po provedení operace, aktualizovat konfiguraci dané služby za běhu. Je napojený na aplikační server přes redis frontu, přes kterou přijmá požadavky s parametry na provední operace.
O spouštění služeb na kontejneru se stará open-rc.
Pro službu HostingWorker existuje vlastní openrc skript, který se stará o 2 věci:
- Při spuštění provede migrace databázi pro Aplikační server stránky, přegeneruje hostfiles pro Dnsmasq s IP addressou kontejneru.
- Spuštění/zastavení/restart služby HostingWorker
Zbytek se služeb se spustí a platfroma je připravena k použití.
Příklad: vytvoření hostingu: Pokud se uživatel přihlásí a vyvolá požadavek na zřízení webhostingu (např. s domenou "domena.cz") tak přijde požadavek aplikačnímu server. Aplikační server nasledně v databázi vytvoří zaznam o zřízení virtualu, databaze a domeny. Všem znaznamům nastaví stav CREATING. Poté pro každý vyvořený zanam vytvoří zprávu pro Redis frontu, ve které jsou udaje zadané uživatelem a oprace, která se musí provést. Tím požadavek v aplikačním serveru končí a uživatel nyní může hosting vidět v gui panelu. Zprávy redis fronty konzumuje HostingWorker, který následně požadavek vykoná:
- Pro virtual vytvoří podle šablony nový soubor ve složce /etc/nginx/http.d se jménem domena.cz.
Dale vytvoří složku v adresáři /var/www/domenacz a vytvoří ve vsftpd službě virtualního uživatele, který bude mít práva na tuto složku
Nakonec vynutí update konfiguraci nginx wokeru a nastavi v databazi ftp heslo a stav virtualu na CREATED. - Pro doménu vytvoří záznam v .dat souboru pro uživatele /etc/dnsmasq.d/users.hosts.dat a překlopí tento soubor do /etc/dnsmasq.d/users.hosts. Na dnsmsaq serveru nakonec vynutí aktualizaci konfigurace a nastaví v databázi stav CREATED doméně.
- Pro databazi vytvoří v postgresql uživatele a databazi domenacz vytvoří heslo přidá práva vytvořenému uživateli na vyvořenou databazi a nakonec nastaví v hostingové databazi heslo db a stav na CREATED