Kedykoľvek vidím inžinierov písať o ich stacku, som zvedavý, aby som spoznal nové nástroje. Najmä keď všetko bežíte sólo, vždy hľadáte možnosť poučiť sa zo skúseností iných.
V roku 2015 som bol frustrovaný úrovňou existujúcich správcov hesiel, najmä tým, že nič poriadne nebolo pre ľudí spravujúcich vlastné servery. Začal som pracovať na Psono, open source správcovi hesiel s poriadnou úrovňou šifrovania a bezpečnými možnosťami zdieľania. Psono nikdy nemalo byť SaaS, inak by som pravdepodobne už od začiatku podporil viacerých nájomcov.
Aby ste mali predstavu o rozsahu Psono: Psono je aktuálne nainštalované lokálne v približne 70 krajinách, s viac než 4000 inštaláciami. Samotný Psono SaaS momentálne používa vyše 15 000 ľudí, pričom väčšina z nich využíva bezplatnú komunitnú edíciu Psono, ktorá beží na rovnakej technológii ako náš platený Enterprise produkt.
Stack typickej inštalácie Psono pozostáva z databázy, servera, dvoch web klientov (jeden pre bežných používateľov a jeden pre adminov), aplikácií pre iOS a Android, rozšírení prehliadača pre Chrome a Firefox. Zákazník si môže doinštalovať LDAP bránu alebo fileserver navyše.
Okrem toho mám v prevádzke omnoho viac infraštruktúr. Od web stránky, ktorá poháňa firemnú hlavnú stránku a stránku produktu, mám licenčný server pre náš enterprise produkt, centrálny ERP systém na spracovanie cenových ponúk a faktúr, eshop, kde si môžu ľudia zakúpiť Psono SaaS a spravovať svoju inštaláciu, a autentifikačnú službu s OIDC.
V priebehu tohto článku uvidíte, že uprednostňujem staršiu a "nudnú" technológiu.
Jazyky
- Python: Všetok backendový kód je písaný v Pythone. Najväčšou výhodou Pythonu je jeho bohatý ekosystém. Nedostatok typov (čo mnohí považujú za nevýhodu) umožňuje extrémne rýchle písanie webová služby, čo je v startupe jeden z hlavných aspektov, na ktorý by ste mali pri výbere programovacieho jazyka pozerať.
- Javascript: Ach nie... kto by to bol čakal... Vytvoriť akúkoľvek webstránku bez Javascriptu je už od roku 2015 prakticky nemožné. ;)
Python je pre webové služby môj obľúbený jazyk. (Vynechám tu úvahy, prečo nie XY je lepší ako Python. To by bolo na samostatný článok.) Existuje len jedna nevýhoda, ktorú musíte riešiť, a to zabezpečiť spoľahlivé doručenie kódu so všetkými závislosťami, čo je kľúčové najmä v prípade, ak si ľudia vašu aplikáciu inštalujú lokálne a v prípade problémov žiadajú podporu. (Rýchlosť, čo možno niekto pridá, nehrá úlohu. Python je dostatočne rýchly.)
Frameworky
- Django: "Je to ako super sila pre samostatných vývojárov." (ak môžem citovať Athony N. Simonsa). Spolu s ekosystémom rieši takmer všetky problémy, na ktoré môžete naraziť. Autentifikácia, templaty, emaily, migrácie databáz, totp, ... a mnoho ďalších.
- Django Rest Framework: Momentálne poháňa všetky API a robí to výborne. Rôzne vrstvy (serializácia, autentifikácia, povolenia, pohľady) udržujú váš kód extrémne čistý.
- React: Nedávno som migroval bežného web klienta na React. Starý web klient (nezabudnite, že vznikol v roku 2015) bol napísaný v AngularJS a bola to skutočná výzva zostať spätne kompatibilný so starým klientom, napr. všetky cesty užívateľov sa nesmeli zmeniť, keďže mohli mať uložené odkazy na tajomstvá v ich dokumentácii alebo používať tzv. link shary. Tiež ľudia používali vlastné značkovanie s logami atď., takže cesty v systéme sa nesmeli zmeniť.
- webpack: Spomínam ho osobitne, keďže je to momentálne jediná časť, s ktorou nie som spokojný. Je pomalý, ťahá za vlasy, ťažko sa učí... jedinou výhodou je, že nikdy nezostanete zaseknutí. Každý problém už niekto riešil na Stackoverflow a nájdete riešenie.
- Gatsby: Poháňa naše statické webstránky pre firmu aj produkt. Kedysi som používal Wordpress, no prechod na Gatsby nastal pre zložité manažovanie updatov a neustály strach, že stránku kompromitujú (a možné negatívne PR). Zatiaľ som to neľutoval.
- Vuepress: Najlepšie riešenie pre správu dokumentácie, aké som našiel. Prekladá sa do statických stránok, vyzerá moderne a poháňa Psono dokumentáciu.
- Material UI: Hlavná knižnica, ktorá poháňa frontend. Je bohatá na funkcie, dobre spolupracuje s Reactom a vyzerá veľmi moderne, na rozdiel od starších Bootstrap tém.
Samozrejme, je mnoho ďalších, ktoré by bolo vhodné spomenúť, no podľa mňa sú toto tie najdôležitejšie.
Databázy
Aj keď Django podporuje viacero databáz, čoskoro som narazil na otázku, či chcem podporovať všetky Django databázy, alebo len jednu konkrétnu. Dôvodom bolo, že som ukladal vnorené stromové štruktúry do databázy. Takže stromy s viacerými koreňmi a zdieľanými vetvami. Efektívne dopytovanie týchto štruktúr bolo kľúčové, takže po preskúmaní všetkých možností som sa rozhodol pre Postgre ltree extension.
Ak plánujete niečo vyvíjať a prevádzkovať sólo, musí to spoľahlivo bežať v cloude, spravované cloudovým providerom. Pravdepodobne nechcete byť viazaní na určitú platformu, takže nič špecifické pre jedného providera, čo značne obmedzuje vaše možnosti.
Moje rozhodnutie:
- Postgres: Sú dve open source databázy, ktoré si môžete vybrať: MariaDB alebo Postgres. Pôvodne som uvažoval nad Mariou (hlavne kvôli Maria DB's Galera Cluster – jedna z tých príbehov, keď mladý vývojár plánuje hyper rast ;D), ale kvôli chýbajúcej ltree extension som bol donútený ísť do Postgresu. Dnes, s vývojom v oblasti shardovania v Postgrese, toto rozhodnutie neľutujem.
- Redis: Plánujem používať ako cache pri väčších inštaláciách. Aj tu si môžete vybrať Redis alebo Memcache. Obe sú skvelé, no kvôli tomu, že Redis protokol je dnes de facto štandard pre cache, išiel som do Redisu. Jedinou nevýhodou je, že Redis je single-threaded.
Infrastruktúra
Stručný prehľad infraštruktúry, na ktorej Psono stojí:
- Gitlab: Gitlab poháňa všetku automatizáciu Psono. Všetko v Psono je automatizované, čo je hlavný dôvod, ako dokážem spravovať vydávania a udržiavať celý Psono ekosystém. V roku 2015 bežal každý open source projekt na Githube, ale Gitlab bol (a stále je) výkonom i funkciami lepší (okrem vyhľadávania Githubu). Gitlab spracováva buildy, vydania, skenovanie zraniteľností každého softvéru, ktorý používame.
- Cloudflare: Pravdepodobne najinovatívnejšia spoločnosť, ktorá ma ovplyvnila za posledných 10 rokov. Je férové povedať, že Cloudflare dnes poháňa internet. Poskytuje mi spoľahlivé nameservery, TLS, CDN, a pokročilé funkcie ako edge worker. Ochrana pred DDoS a WAF sú pre správcu hesiel veľmi dôležité. Rád by som používal ich funkciu SSL as a Service, aby si zákazníci SaaS mohli nastaviť vlastné domény, ale cenová stena Cloudflare Enterprise je príliš vysoká. Stále dúfam, že ju raz vydajú ako nezávislý plugin na kúpu.
- namecheap: Moje riešenie pre domény a SSL certifikáty.
- Google Cloud Run: Všetky backend servery bežia na Google Cloud Run, ktorý je extrémne nákladovo efektívny a spoľahlivý ak potrebujete rozbehnúť flotilu služieb. Keď už všetko beží, robí to skvelú prácu. Výborná API / cli integrácia je veľkým plusom. Sú tu aj nevýhody, ako slabá podpora Google alebo riziko, že Google sa rozhodne ukončiť produkt, ak už nebude chcieť zostať trojkou medzi cloud providermi.
- Artifactory: Chráni moju build pipeline pred výpadkami npm a ukladá build artefakty (v 2015 to Gitlab ešte nemal).
- Docker Hub: Skladujem tu všetky docker kontejnery, prebieha tu aj bezpečnostné skenovanie a distribúcia kontajnerov.
- Brevo: Spracováva všetky emaily. Na rozdiel od väčšiny providerov má Brevo dobrý logging a analytické funkcie. Podpora je špičková. Jediný problém je, že ich emaily niekedy končia v spame (aj so správne nastaveným SPF, DMARC atď.), ale inak robia skvelú prácu.
- Poeditor: Spravuje preklady. Prispievatelia môžu požiadať o prístup, čo je kľúčové ak chcete zapojiť externých ľudí. Podpora je výborná a odpovede sú rýchle.
- Docker: Jedno z najlepších rozhodnutí pre celý projekt. Hlavne ak používate Python, je veľmi náročné doručiť funkčný code so všetkými závislosťami. Ak má vec bežať u zákazníka on-premise a je požiadavka, že musí vedieť systém aktualizovať a spravovať, Docker toto všetko umožní a dáva mi plnú kontrolu nad inštalovanými balíkmi, čo rieši aspoň 70 % všetkých support problémov (aj keď zavedie 20 % nových, keďže ľudia Docker nepoznajú ;D).
Monitoring
Veci sa môžu pokaziť a vy musíte vedieť kedy a mať prehľad o problémových miestach. Tu pomáhajú tieto nástroje:
- Google Cloud logging: Ak ste na Google, prirodzená voľba
- Sentry: Moje hlavné riešenie reportovania chýb. Keď ho raz vyskúšate, nebudete chcieť nič iné. Dáva mi potrebný prehľad o všetkých chybách.
- Uptimerobot: Volá healthcheck mojich služieb a upozorní ma v prípade výpadku. Public status stránku Psono nájdete tu https://stats.psono.com/, čo je len malý zlomok služieb, na ktoré ten nástroj dozerá, ale dúfam, že to demonštruje spoľahlivosť systému.
Vývojárska infraštruktúra
Malý prehľad o tom, ako vyzerá môj lokálny vývojársky stack:
- Windows s WSL: Pravdepodobne za toto schytám veľa kritiky, no áno, bežím na Windowse. Roky som mal niekde Linux VM na ktorý som sa pripájal pre vývoj, dnes je to WSL a mám to najlepšie z oboch svetov.
- Pycharm / Webstorm: Používam Jetbrains IDE. Funkcionalita vzdialeného vývoja je kľúčová pre môj workflow a táto "batérie súčasťou balenia" filozofia mi sedí. Niekedy mám otvorených asi 20 projektov, takže treba dosť RAM. VSCode je dnes zrejme dobrá alternatíva, ale roky som si zvykol na Jetbrains a učiť sa nový nástroj chce mentálnu silu, ktorú teraz nechcem investovať. Každý by mal používať to, na čo je zvyknutý.
Podpora
Sú tu samozrejme aj nástroje potrebné na podporu používateľov:
- Freshdesk: Typický emailový tiketovací systém. Pomáha mi sledovať požiadavky od zákazníkov. V začiatkoch mal slušnú free verziu, čo je pre startupy kľúčové.
- Discord: Niektorí dávajú prednosť chatu alebo potrebujú priamy kontakt/pomoc. Tu sa hodí Discord.
Ostatné
Sú aj ďalšie nástroje, ktoré chcem spomenúť, najmä banky pre ľudí, ktorí chcú podnikať v Nemecku:
- Odoo: Najlepší ERP systém. Open source edícia je zadarmo, dá sa jednoducho rozšíriť pomocou Pythonu a XML. Možnosti prispôsobenia a integrácie s vlastnými API sú špičkové.
- Holvi: Náš hlavný bankový účet. V Nemecku potrebujete banku, ktorá vám umožní založiť "Gründerkonto" (zakladateľský účet), teda účet pre firmu, ktorá ešte nie je zapísaná a kam môžete poslať počiatočný kapitál potrebný na zápis firmy. Je to trochu problém "slepice a vajca". Veľké banky to síce umožňujú, ale sú drahé. Proces registrácie prebehol bez problémov. Jedinou nevýhodou je chýbajúca podpora pre zahraničné platby, čo však rieši nasledujúci servis.
- Wise: Náš druhý účet v banke. Poplatky sú extrémne nízke (napr. žiadne mesačné poplatky), zriadenie je bezproblémové, umožňuje medzinárodné prevody a tie prebehnú rýchlo, takže nemusíte čakať týždne.
Bezpečnosť
Asi by sa dal napísať samostatný článok o štruktúre používateľských účtov, infraštruktúre, prístupových práv. Keďže toto je jedna z najzásadnejších vecí pre bezpečnosť Psono, nebudem zachádzať do detailov a budem radšej vágny. Používame Google Cloud aj Azure služby. Obe s úplne oddelenými používateľmi a skupinami. Sú tu účty určené len na administráciu a účty na bežnú prácu. Používam rôzne fyzické aj virtuálne systémy, cez ktoré pristupujem k Psono / podporujem / spravujem ho. Administratíva sa vykonáva len na špeciálne zabezpečenom zariadení, vyhradenom len na tieto úkony. Každý účet chráni hardvérový token. Všetky systémy sú centrálne spravované a bezpečnostnými politikami sa zabezpečuje, aby všetky zariadenia spĺňali bezpečnostné štandardy, aké by ste našli v bankách.
Poďakovanie
Tento článok je silne inšpirovaný článkom Anthonyho N. Simona o Panelbear.