Kdykoliv vidím inženýry psát o jejich stacku, jsem zvědavý na nové nástroje. Zvláště když pracujete sami, neustále hledáte, jak se poučit ze zkušeností ostatních.
V roce 2015 jsem byl frustrován současnou úrovní správců hesel, zejména proto, že pro lidi, kteří provozují soukromé servery, nebylo nic slušného. Začal jsem pracovat na Psono, open-source správci hesel s úrovní šifrování a možnostmi bezpečného sdílení, které jsem považoval za dostatečné. Psono nebylo nikdy zamýšleno jako SaaS, jinak bych pravděpodobně hned na začátku integroval podporu pro více tenantů.
Abychom získali trochu přehled o rozsahu Psona: Psono je v současné době instalováno lokálně ve zhruba 70 zemích s více než 4000 instalacemi. Samotné Psono SaaS aktuálně používá přes 15 000 lidí, většina z nich používá naši bezplatnou komunitní edici Psono která běží na stejném technologickém stacku jako náš placený Enterprise produkt.
Stack typické instalace Psono se skládá z databáze, serveru, dvou webových klientů (jeden pro běžné uživatele a druhý pro administrátory), aplikací pro iOS a Android, prohlížečových rozšíření pro Chrome a Firefox. Zákazník si může na to nainstalovat bránu LDAP nebo souborový server.
Vedle toho mám k dispozici mnohem více infrastruktur. Počínaje webovou stránkou pro pohon firemní a produktové stránky, mám licenční server pro náš enterprise produkt, centrální ERP systém pro vyřizování nabídek a faktur, obchod, kde si lidé mohou zakoupit Psono SaaS a spravovat svou instalaci, a autentizační službu s OIDC.
V průběhu článku uvidíte, že preferuji starou a nudnou technologii.
Jazyky
- Python: Veškerý backendový kód je napsán v Pythonu. Největší výhody Pythonu spočívají v jeho bohatém ekosystému. Nedostatek typů (mnoho lidí to považuje za nevýhodu) umožňuje nesmírně rychle psát vaše webové služby, což je coby startup jeden z klíčových aspektů, na které byste se měli v programovacím jazyce zaměřit.
- Javascript: Ach ne... kdo by to čekal... je prostě nemožné vytvořit jakoukoliv webovou stránku bez Javascriptu, už v roce 2015. ;)
Python je pro webové služby můj oblíbený jazyk. (Omlouvám se zde za své myšlenky, proč ne XY je lepší než Python. To by vyplnilo další blogový článek.) Existuje jen jedna nevýhoda, kterou musíte čelit, a to je schopnost doručit kód se všemi spolehlivými závislostmi, což je velmi důležité, pokud lidé instalují váš software lokálně a žádají podporu, když se dostanou do problémů. (Rychlostně - co by někdo jiný mohl zde dodat - na tom nezáleží. Python je dostatečně rychlý).
Frameworky
- Django: "Je to jako super síla pro sólové vývojáře" (pokud mohu citovat Athony N. Simona zde). Spolu s ekosystémem řeší téměř všechny problémy, se kterými se můžete setkat. Autentizace, šablony, e-maily, migrace databází, totp, ... jen namátkou několik.
- Django Rest Framework: Aktuálně pohání všechny API a dělá skvělou práci. Různé vrstvy (serializace, autentizace, oprávnění, pohledy) udržují váš kód nesmírně čistý.
- React: Nedávno jsem migroval běžného webového klienta na React. Stará verze klienta (pamatujte, že byla spuštěna v roce 2015) byla napsána v AngularJS a bylo to docela náročné zůstat zpětně kompatibilní se starým klientem, např. všechny cesty k uživateli by se neměly měnit, protože by mohli mít záložky na tajemství ve své dokumentaci nebo používají tzv. sdílení odkazů. Také lidé používali vlastní bannery s vlastním logem atd., kde cesty v systému by se neměly měnit.
- webpack: Zmínil jsem to zde, protože je to aktuálně jediná část, se kterou jsem nespokojen. Je pomalý, trháte si vlasy, těžko se učí... jedinou výhodou, kterou máte, je, že se nikdy nezaseknete. Jakýkoliv problém, se kterým se můžete setkat, byl již položen na Stackoverflow a najdete řešení.
- Gatsby: Pohání naše statické webové stránky pro firmu a produkt. Dříve jsem používal WordPress, ale režijní náklady řízení s aktualizacemi a neustálý strach z kompromitace webu (a potenciální negativní publicita) nás přiměli přejít na Gatsby. Doteď jsem se nikdy neohlédl zpět.
- Vuepress: Nejvhodnější systém pro správu dokumentací, který jsem mohl najít. Kompiluje do statických webů, vypadá moderně a aktuálně pohání Psono dokumentaci
- Material UI: Hlavní knihovna pohánějící frontend. Je bohatý na funkce, dobře spolupracuje s Reactem a vypadá dost moderně ve srovnání se staršími Bootstrap založenými tématy.
Určitě existují bezpočet dalších, které by si zasloužily, aby o nich bylo zmíněno, přesto jsou podle mého názoru tyto "nejdůležitější".
Databáze
I když Django podporuje více databází, poměrně brzo jsem narazil na otázku, zda chci podporovat všechny databáze Django, nebo jen konkrétní. Kořenem této otázky bylo, že jsem ukládal zanořené stromové struktury do databáze. Takže stromy s více kořeny a sdílenými větvemi. Dotazování na tyto bylo klíčové, takže po prozkoumání všech dostupných možností jsem se rozhodl jít s rozšířením ltree pro Postgre.
Pokud plánujete vyvinout cokoliv a provozovat to sólo, musí to běžet spolehlivě v cloudu, spravované cloudovým poskytovatelem. Pravděpodobně také nechcete být zamknuti u jednoho dodavatele, takže nic specificky cloudového, což docela omezuje vaše možnosti.
Moje rozhodnutí:
- Postgres: Existují dvě open-source databáze, ze kterých si můžete vybrat. MariaDB nebo Postgres. Vždy jsem plánoval jít s Mariou (hlavně kvůli Galera Cluster María DB, jeden z těch mladistvých příběhů "mladý vývojář potřebuje plánovat na hyper růst" ;D), avšak kvůli chybějícím ltree rozšířením jsem neměl na výběr. V dnešní době s veškerým vývojem, který jde do Postgresu, možnosti rozdělení dat pro rostoucí aplikace, jsem nikdy nelitoval tohoto rozhodnutí.
- Redis: Plánováno k použití jako cache pro větší instalace. Také zde si můžete vybrat mezi Redis a Memcache. Oba jsou vynikající, ale hlavně kvůli protokolu Redis, který je nyní faktickým standardem pro ukládání do cache, jsem se rozhodl pro Redis. Jedinou nevýhodou, kterou jsem s Redisem kdy zažil, je, že je jednovláknový.
Infrastruktura
Jen malý přehled o infrastruktuře, na které se opírá Psono:
- Gitlab: Gitlab pohání veškerou automatizaci Psona. Všimněte si, že vše v Psono je automatizováno, což je jeden z klíčových aspektů toho, jak mohu řídit vydání a udržovat celý ekosystém Psona. V roce 2015 byl každý open source projekt na Githubu, ale Gitlab byl (a stále je) jen tak mocný a co do vlastností nadpřirozený (s výjimkou vyhledávací funkce githubu). Gitlab pohání buildy, vydání, skeny zranitelnosti na KAŽDÉM kousku software, který používáme.
- Cloudflare: Pravděpodobně nejvíce inovativní společnost, o které vím, která mě ovlivnila za posledních 10 let. Je férové říct, že Cloudflare dnes pohání internet. Poskytuje mi spolehlivé nameservery, TLS, slušné CDN a pokročilé funkce jako jejich edge worker. Ochrana před DDoS a WAF funkcionalita poskytují určitý extra benefit, což jako správce hesel je docela důležité. Rád bych použil jejich SSL jako službu funkci, aby SaaS zákazníci mohli konfigurovat své vlastní domény, ale firewall Cloudflare na úrovni Enterprise je prostě příliš tvrdý. Stále doufám, že to někde vydají jako samostatný plugin, který si lze zakoupit.
- namecheap: Moje preferované řešení pro domény a SSL certifikáty.
- Google Cloud Run: Všechny backendové servery běží na Google Cloud Runu, což je nesmírně nákladově efektivní a spolehlivé, když chcete spouštět flotilu služeb. Jakmile máte svůj stack spuštěny, dělá to docela skvělou práci. Jejich špičková API / cli integrace je tu absolutní plus. Existuje několik nevýhod jako chybějící podpora ze strany Google nebo hrozba, že Google může někdy rozhodnout, že být #3 jako poskytovatel Cloudových služeb nemusí stát za to, a oni produkt zruší.
- Artifactory: Chrání moji buildovací pipeline před výpadky npm a ukládá moje buildové artefakty (což nebylo zahrnuto v Gitlabu v roce 2015).
- Docker Hub: Ukládá všechny docker kontejnery a provádí nějaké další bezpečnostní skeny a distribuci mých kontejnerů.
- Brevo: Zajišťuje všechny e-maily. Na rozdíl od většiny poskytovatelů e-mailových řešení má Brevo slušné logování a analýzy. Jejich podpora je špičková. Jediným problémem je, že jejich e-maily jsou někdy odesílány do spamové schránky (i s nastavením SPF, DMARC a atd.), ale kromě toho odvádějí skvělou práci.
- Poeditor: Zajišťuje všechny překlady. Pěkná věc je, že přispěvatelé mohou žádat o přístup, což je klíčové, když chcete, aby externí osoby pomáhaly s překladem vašeho projektu. Jejich podpora je úžasná a dostanete nesmírně rychlé odpovědi.
- Docker: Jedno z nejlepších rozhodnutí pro celý projekt. Zvláště jelikož používám Python a dodávat funkční Python kód se všemi Python / OS knihovními závislostmi je náročné. Pokud věci mají běžet u zákazníka na premisu a s požadavkem, že může systém aktualizovat a spravovat. Docker nám umožňuje dělat vše z toho a dává mi plnou kontrolu nad nainstalovanými balíčky, což řeší alespoň 70% všech problémů s podporou (zatímco přivádí 20% nových problémů, protože lidé nejsou zvyklí na Docker ;D).
Monitorování
Tak věci se mohou pokazit a vy potřebujete vědět, kdy se to stane a získat nějaké náhledy do problému. To je tam, kde tyto nástroje přijdou vhod:
- Google Cloud logging: Pokud jste na Google, vaše přirozené řešení
- Sentry: Moje číslo jedna řešení pro hlášení chyb. Jakmile to vyzkoušíte, nikdy to nebudete chtít postrádat. Dává mi potřebné vhledy do všech chyb.
- Uptimerobot: Volá zdravotní kontrolu mých různých služeb a upozorní mne, pokud by něco spadlo. Veřejná statusová stránka pro Psono, mimochodem, může být nalezena zde https://stats.psono.com/, což je jen malá část služeb, které tato věc monitoruje pro mě, ale doufejme, že to trochu demonstruje spolehlivost systému.
Vývojová infrastruktura
Malý přehled o tom, jak můj lokální vývojový stack vypadá:
- Windows s WSL: Pravděpodobně za to dostanu dost kritiky, ale ano, běžím na Windows. Za poslední roky jsem vždy někde měl Linuxovou VM, ke které bych se připojil na vývoj, ale nyní je to poháněno WSL. Mám z obou světů to nejlepší.
- Pycharm / Webstorm: Používám Jetbrain IDE. Funkčnost pro vzdálený vývoj je pro můj vývojový proud klíčová a tato filozofie "s bateriemi včetně" mi vyhovuje dobře. Někdy mám otevřeno asi 20 projektů, což vyžaduje slušný hardware s dostatečnou RAM. VSCode se zdá být dnes dobrou alternativou, ale během posledních pár let jsem si zvykl na Jetbrains a naučit se něco nového vždy vyžaduje určitou duševní sílu, kterou aktuálně nechci vynakládat na tohle. Řekl bych, že by každý měl použít něco, na co je zvyklý.
Podpora
Existují určité nástroje, které jsou samozřejmě potřebné pro zajištění podpory lidem používajícím produkt:
- Freshdesk: Typický software pro e-mailové tikety. Pomáhá mi sledovat různé zákaznické požadavky. Dříve to poskytovalo slušnou bezplatnou úroveň, což je zejména ve fázi zakládání klíčové.
- Discord: Někteří lidé mohou preferovat chat nebo vyžadovat přímější konverzaci / pomoc. To je tam, kde discord přichází vhod.
Jiná
Existují určité jiné nástroje, které jsem chtěl zmínit, které mohou být užitečné pro ostatní. Zvláště banky pro lidi, kteří chtějí provozovat svůj podnik v Německu:
- Odoo: Nejlepší ERP systém. Jeho open source edice je zdarma a může být snadno rozšířena pomocí pythonu a nějakého XML znalosti. Jeho možnosti přizpůsobení a integrace s vlastními API jsou špičkové.
- Holvi: Náš hlavní bankovní účet. V Německu potřebujete banku, která vám umožní nastavit zakladatelský účet, v němčině "Gründerkonto", tedy bankovní účet spojený s firmou, která ještě není zcela zaregistrována, a kde můžete převést počáteční peníze, které jsou vyžadovány k registraci společnosti. Trochu slepičí a vejčí problém. A velké banky, které to umožňují, obvykle stojí nohu a ruku. Registrace také proběhla celkem bez problémů. Jedinou nevýhodou je chybějící podpora pro mezinárodní platby, ale to je místo, kde další služba přichází vhod.
- Wise: Náš druhý bankovní účet. Jejich poplatky jsou extrémně nízké (např. žádné měsíční poplatky), proces nastavení funguje bezchybně, jsou dobře propojení a umožňují mezinárodní bankovní převody a převody jsou rychle prováděny, takže nemusíte čekat týdny nebo podobně.
Bezpečnost
Myslím, že by to mohl být samostatný blogový příspěvek o tom, jak jsme strukturovali uživatelské účty, infrastrukturu, přístupová práva. Protože tohle je jeden z nejklíčovějších aspektů bezpečnosti Psono, nebudu se zde podrobněji vyjadřovat a pokusím se být dostatečně obecný. Používáme jak Google Cloud, tak Azure služby. Obojí s úplně oddělenými uživateli a skupinami. Existují uživatelé věnovaní administrativním úkolům a uživatelské účty pro "každodenní činnosti". Existují různé fyzické a virtuální systémy, které používám k přístupu / podpoře / řízení / administraci Psono. Administrativní úkoly se dělají pouze na samostatném, speciálně zodolněném fyzickém zařízení, které se používají výhradně pro tyto úkoly. Každý účet je chráněn hardwarovými tokeny. Všechny systémy jsou centrálně spravovány a jsou nastaveny bezpečnostní politiky, které zajišťují, že všechna zařízení splňují bezpečnostní standardy, které obvykle najdete v bankách.
Poděkování
Tento článek byl silně inspirován článkem Anthony N. Simonse o Panelbear.