Hver gang jeg ser ingeniører skrive om teknologistacken deres, blir jeg nysgjerrig på å lære om nye verktøy. Spesielt når du driver ting på egen hånd, ser du alltid etter å lære av andres erfaringer.
I 2015 var jeg frustrert over nivået på de nåværende passordbehandlerne, spesielt fordi det ikke fantes noe anstendig for folk som kjører private servere. Jeg begynte å jobbe med Psono, en åpen kildekode passordbehandler med et anstendig nivå av kryptering og sikre delingsalternativer. Psono var aldri ment å kjøres som SaaS, ellers hadde jeg sannsynligvis støttet flere leietakere helt fra starten.
Bare slik at du får en liten oversikt over omfanget av Psono. Psono er for tiden installert lokalt i omkring 70 land, med mer enn 4000 installasjoner. Psono SaaS alene brukes for tiden av over 15.000 mennesker, de fleste bruker vår gratis fellesskapsutgave av Psono som kjører på samme teknologistack som vårt betalte Enterprise-produkt.
Stakken til en typisk Psono-installasjon består av en database, server, to webklienter (en for vanlige brukere og en for administratorer), apper for iOS og Android, nettleserutvidelser for Chrome og Firefox. En kunde kan installere en LDAP-gateway eller en filserver på toppen av det.
Ved siden av det har jeg mye mer infrastruktur på plass. Fra nettstedet som driver selskapets hjemmeside og produktside har jeg en lisensserver for vår enterprise-produkt, et sentralt ERP-system for å håndtere tilbud og fakturaer, en butikk hvor folk kan kjøpe Psono SaaS og administrere deres installasjon og en autentiseringstjeneste med OIDC.
Gjennom artikkelen vil du se at jeg foretrekker gammel og kjedelig teknologi.
Språk
- Python: All backend-koden er skrevet i Python. De største fordelene med Python er dets rike økosystem. Mangelen på typer (mange anser dette som en ulempe) gjør det ekstremt raskt å skrive webtjenester, som for en startup er en av nøkkelaspektene du bør se etter i et programmeringsspråk.
- Javascript: Å nei... hvem skulle trodd det... Det er bare umulig å lage et nettsted uten Javascript, allerede tilbake i 2015. ;)
Python er mitt favorittspråk for webtjenester. (Jeg lar være å dele mine tanker om hvorfor ikke XY er bedre enn Python. Det ville fylle en annen bloggartikel.) Det er bare én ulempe du må motvirke, og det er muligheten til å levere kode med alle avhengigheter pålitelig, noe som er spesielt viktig hvis folk installerer programvaren din lokalt og ber om støtte hvis de støter på problemer. (Hastighetsmessig, som andre folk kanskje vil legge til her, spiller ingen rolle. Python er raskt nok).
Rammeverk
- Django: "Det er som en superkraft for soloutviklere" (om jeg kan sitere Athony N. Simons her). Sammen med økosystemet løser det nesten alle problemer du kan støte på. Autentisering, maler, e-post, database-migreringer, TOTP, ... bare for å nevne noen.
- Django Rest Framework: Det driver alle API-ene og gjør en utmerket jobb. De forskjellige lagene (serialisering, autentisering, tillatelser, visninger) holder koden din ekstremt ren.
- React: Jeg har nylig migrert den vanlige webklienten til React. Den gamle webklienten (husk at den ble startet i 2015) ble skrevet i AngularJS, og det var ganske en utfordring å forbli bakoverkompatibel med den gamle klienten, f.eks. alle stier til brukeren skal ikke endres, da de kanskje har bokmerket lenker til hemmeligheter i dokumentasjonen eller har såkalte lenkedelinger i bruk. Også folk brukte tilpasset merkevarebygging med egne logoer og lignende hvor stier i systemet ikke burde endres.
- webpack: Jeg ønsket å nevne det her, da det for tiden er den eneste delen jeg er misfornøyd med. Det er tregt, hårtrekkende, vanskelig å lære... den eneste fordelen du har er at du aldri blir sittende fast. Ethvert problem du måtte oppleve, ble allerede spurt om på Stackoverflow, og du finner en løsning.
- Gatsby: Driver våre statiske nettsteder for selskapet og produktet. Tidligere brukte jeg Wordpress, men administrasjonsoverheadet med oppdateringer og konstant frykt for at nettstedet blir kompromittert (og den potensielle negative omtalen) fikk oss til å bytte til Gatsby. Så langt ser jeg ikke tilbake.
- Vuepress: Det mest anstendige dokumenthåndteringssystemet jeg kunne finne. Det kompileres til statiske nettsteder, ser moderne ut og driver for tiden Psonos dokumentasjon
- Material UI: Hovedbiblioteket som driver frontend. Det er funksjonsrikt, fungerer godt sammen med React og ser ganske moderne ut, i motsetning til eldre Bootstrap-baserte temaer.
Det finnes utvilsomt utallige andre som fortjener å bli nevnt her, men dette er de "viktigste" etter min mening.
Databaser
Selv om Django støtter flere databaser, ble jeg ganske tidlig stilt spørsmålet om jeg ønsket å støtte alle Djangos databaser eller bare en bestemt. Roten til dette spørsmålet var at jeg lagret nestede trestrukturer i databasen. Så trær med flere røtter og delte grener. Effektiv spørring av disse var avgjørende, så etter å ha utforsket alle tilgjengelige alternativer bestemte jeg meg for å gå med Postgre's ltree-utvidelse.
Hvis du planlegger å utvikle noe og gjøre det alene, må det kjøres pålitelige i skyen, administrert av skyleverandøren. Du vil sannsynligvis også unngå å bli låst til en leverandør, så ingenting spesifikt for skyen, som sterkt begrenser valgene dine.
Min beslutning:
- Postgres: Det er to åpne kildekode-databaser du kan velge mellom. MariaDB eller Postgres. Jeg planla alltid å gå med Maria (hovedsakelig på grunn av Maria DB's Galera Cluster, en av disse feilaktige "unge utviklere må planlegge for hypervekst" historiene ;D) , men på grunn av mangelen på ltree-utvidelser ble jeg tvunget. I dag, med all utviklingen som går inn i Postgres sharding-alternativer, har jeg aldri angret den beslutningen så langt.
- Redis: Planlagt å brukes som cache for større installasjoner. Også her kan du velge enten Redis eller Memcache. Begge er utmerkede, men hovedsakelig på grunn av Redis-protokollen som nå er de facto-standarden for caching, gikk jeg med Redis. Den eneste ulempen jeg noen gang har opplevd med Redis er at det er enkelttrådet.
Infrastruktur
Bare en liten oversikt over infrastrukturen som Psono er avhengig av:
- Gitlab: Gitlab driver all automatiseringen av Psono. Bemerkelsesverdig er alt i Psono automatisert, noe som er en av nøkkelaspektene for hvordan jeg kan håndtere utgivelser og vedlikeholde hele Psono-økosystemet. Tilbake i 2015 kjørte hvert åpen kildekodeprosjekt på Github, men Gitlab var (og er fortsatt) bare så mektig og funksjonsmessig overlegen (med unntak av Githubs søkefunksjonalitet). Gitlab driver bygger, utgivelser, sårbarhetsskanninger av HVER eneste del av programvaren vi bruker.
- Cloudflare: Sannsynligvis det mest innovative selskapet jeg vet om som har påvirket meg de siste 10 årene. Det er rettferdig å si at Cloudflare driver internett i dag. Det gir meg pålitelige navneservere, TLS, en anstendig CDN og avanserte funksjoner som deres kantarbeider. DDoS-beskyttelsen og WAF-funksjonaliteten gir en viss ekstra, som for en passordbehandler er ganske viktig. Jeg vil gjerne bruke deres SSL som en tjenestefunksjon for å tillate SaaS-kunder å konfigurere sine egne domener, men betalingsmuren til Cloudflare's Enterprise-nivå er bare for vanskelig. Jeg håper fortsatt at de slipper det et sted som et selvstendig plugin som man kan kjøpe.
- namecheap: Min favorittløsning for domener og SSL-sertifikater.
- Google Cloud Run: Alle backend-servere kjører på Google Cloud Run, som er ekstremt kostnadseffektiv og pålitelig når du vil opprette en flåte av tjenester. Når du har stacken din i gang, gjør den en ganske god jobb. Deres topp moderne API/CLI-integrasjon er et absolutt pluss her. Det er et par ulemper, som den manglende støtten fra Google eller trusselen om at Google kan bestemme på et tidspunkt at det ikke er verdt å være nr. 3 som skytjenesteleverandør, og de kansellerer produktet.
- Artifactory: Beskytter byggepipeline min mot npm-utbrudd og lagrer byggeartefaktene mine (som ikke var bundlet i Gitlab i 2015)
- Docker Hub: Lagre alle docker-beholderne og gjøre noen ekstra sikkerhetsskanninger og distribusjon av containerne mine.
- Mailgun: Håndterer alle e-poster. I motsetning til de fleste e-postløsningsleverandører, har Mailgun anstendig logging og analysefunksjonalitet. Supporten deres er toppen av toppen. Det eneste problemet er at e-postene deres noen ganger blir sendt til spam-innboksen (selv med SPF, DMARC og så videre på plass), men bortsett fra det gjør de en flott jobb.
- Poeditor: Håndterer alle oversettelser. Det fine er at bidragsytere kan be om tilgang, noe som er avgjørende hvis du vil at eksterne skal hjelpe til med å oversette prosjektet ditt. Supporten deres er utmerket, og du får svært raske svar.
- Docker: En av de beste beslutningene for hele prosjektet. Spesielt siden jeg bruker Python og leverer fungerende Python-kode med alle Python/OS-bibliotekavhengigheter er vanskelig. Hvis ting skal kjøres hos en kunde på stedet, og kravet er at han kan oppdatere og vedlikeholde systemet. Docker lar oss gjøre alt det og gir meg full kontroll over de installerte pakkene, noe som løser minst 70% av alle støtteproblemer (mens de introduserer 20% nye problemer ettersom folk ikke er vant til Docker ;D).
Overvåking
Så ting kan gå galt, og du må vite når det skjer og få noen innsikter i problemet. Det er her disse verktøyene kommer godt med:
- Google Cloud logging: Hvis du er på Google, er det din naturlige løsning
- Sentry: Min nummer én feilrapportløsning. Når du har prøvd det ut, vil du aldri gå glipp av det. Det gir meg den nødvendige innsikten i alle feil.
- Uptimerobot: Ringer helseøkten til de forskjellige tjenestene mine og varsler meg hvis noe går ned. Den offentlige status-siden for Psono kan for øvrig finnes her https://stats.psono.com/, som bare er en liten brøkdel av tjenestene denne tingen overvåker for meg, men som forhåpentligvis viser systemets pålitelighet litt.
Utviklingsinfrastruktur
En liten oversikt over hvordan min lokale utviklingsstabel ser ut:
- Windows med WSL: Jeg får nok mye motbør for dette, men ja, jeg kjører på Windows. De siste årene hadde jeg alltid et sted en Linux VM som jeg koblet til for utvikling, men i dag drives det av WSL. Jeg får det beste av begge verdener.
- Pycharm/Webstorm: Jeg bruker Jetbrain IDEer. Den eksterne utviklingsfunksjonaliteten er avgjørende for min utviklingsflyt, og denne "batteriene inkludert" filosofien passer meg godt. Noen ganger har jeg omtrent 20 prosjekter åpne, noe som krever anstendig maskinvare med nok RAM. VSCode ser ut til å være et godt alternativ i dag, men i løpet av de siste årene har jeg blitt vant til Jetbrains, og å lære noe nytt krever alltid litt mental styrke som jeg for øyeblikket ikke er villig til å investere i. Jeg vil si at alle skal bruke noe de er vant til.
Støtte
Det finnes visse verktøy, selvfølgelig, som kreves for å håndtere støtte for folk som bruker produktet:
- Freshdesk: En typisk e-post billettprogramvare. Det hjelper meg å holde styr på de forskjellige kundens forespørsler. I tidligere tider ga det et anstendig gratisnivå, noe som spesielt i oppstartfasen er avgjørende.
- Discord: Noen kan foretrekke chat eller krever en mer direkte samtale/hjelp. Det er her Discord kommer godt med.
Annet
Det er visse andre verktøy jeg ville nevne som kan være nyttige for andre. Spesielt bankene for folk som ønsker å drive virksomheten sin i Tyskland:
- Odoo: Det beste ERP-systemet. Den er gratis i åpen kildekode-utgaven og kan enkelt utvides med Python og noe XML-kunnskap. Dens tilpasnings- og integreringsalternativer med egendefinerte API-er er topp.
- Holvi: Vår hovedbankkonto. I Tyskland trenger du en bank som lar deg opprette en Gründerkonto, et bankkonto som er knyttet til et selskap som ennå ikke er fullstendig registrert, og hvor du kan overføre den innledende kontanter som kreves for å registrere selskapet. Litt av et høna-og-egget problem. Og de store bankene som tillater det koster vanligvis en formue. Registreringsprosessen fungerte også ganske feilfritt. Den eneste ulempen er mangelen på støtte for internasjonale betalinger, men det er her den neste tjenesten kommer godt med.
- Wise: Vår andre bankkonto. Avgiftene deres er ekstremt lave (f.eks. ingen månedlige avgifter), oppsettsprosessen fungerer feilfritt, de er godt koblet og lar internasjonale bankoverføringer og overføringer gjennomføres raskt, slik at du ikke må vente i uker eller lignende.
Sikkerhet
Jeg antar at dette kunne vært en egen bloggpost om hvordan vi strukturerte brukerkontoer, infrastruktur, tilgangsrettigheter. Ettersom dette er et av de mest avgjørende aspektene for sikkerheten til Psono, går jeg ikke i detaljer her og prøver å være vagt nok. Vi bruker både Google Cloud og Azure-tjenester. Begge med helt separate brukere og grupper. Det er brukere dedikert til administrasjonsoppgaver og brukerkontoer for "daglig drift". Det er forskjellige fysiske og virtuelle systemer som jeg bruker til å få tilgang / støtte / administrere / administrere Psono. Administrasjonsoppgaver utføres kun på en separat, spesielt herdet fysisk enhet som er utelukkende brukt til disse oppgavene. Hver konto er beskyttet med maskinvare-token. Alle systemer er sentralt administrert, og sikkerhetspolicyer på plass for å sikre at alle enheter følger sikkerhetsstandardene du vanligvis finner i banker.
Kreditt
Denne artikkelen ble sterkt inspirert av Anthony N. Simons' artikkel om Panelbear.