- Ich betreibe mehrere SaaS-Apps auf einem großen Server in der OVH-Cloud
- Verarbeitet pro Tag etwa 6 Millionen nicht gecachte Requests
- Backend ist Django/Python + MySQL + Redis + WebSocket (Pub/Sub)
- Mein Geheimnis ist OpenResty (dynamische Webplattform auf Basis von NGINX und LuaJIT)
- Mit Lua-Skripten erledige ich komplexes Page-Caching, wehre DDoS ab, verarbeite WebSockets und lagere lang laufende Requests aus
- Ein „Cloudflare für Arme“ aus 1500 Zeilen Lua-Code
- Diese Apps wurden vor Docker gebaut und laufen daher einfach als Prozesse (
systemd)
- Anfangs habe ich
uwsgi verwendet, aber gunicorn ist deutlich effizienter, daher bin ich komplett umgestiegen
- Mein SPOF ist DNS. Ich hatte ein gutes Verhältnis zu DNSMadeEasy und machte mir keine Sorgen über automatische Sperren, aber jetzt hat DigiCert sie übernommen, was problematisch ist
- Zahlungen laufen über Stripe und PayPal. Obwohl ich PayPal nicht mag, habe ich es ergänzt, weil man nie weiß, wann Stripe einen ohne Vorwarnung sperrt
- User-Uploads gehen über einen
aiohttp-Python-Server an Wasabi und Backblaze und werden in nginx gecacht. Deshalb betragen die Cloud-Transferkosten 0
- Die WebSocket-Schicht ist etwas instabil. Anfangs habe ich alles mit einer Python-WebSocket-
asyncio-Bibliothek verarbeitet; das funktionierte bis zu einem gewissen Grad, aber als ich später auf Multiprozess-Verarbeitung umstellen wollte, begann es enorme Ressourcen zu verbrauchen
- Deshalb entschied ich mich für die WebSockets von OpenResty, wollte aber keine komplexe Logik in Lua schreiben
- Also habe ich es so geändert, dass Nachrichten über Redis Pub/Sub an Python-Prozesse weitergereicht werden
- Aber ich werde den Namen meines Dienstes nicht verraten (ich möchte keine zusätzliche Konkurrenz!)
- Ich neige dazu, weniger bekannte Optionen zu wählen, und halte das für produktiv für Solo-Entwickler
- PostgreSQL + SQLite
- Hauptsprache Rust
- Frontend ist htmx + tailwindcss
- CloudFlare + Vultr-Hosting
- nginx + nixos + circle ci
- Manche werden es hassen, aber WordPress zu wählen war für mich die beste Entscheidung
- Forum ist bbPress
- Community, in der Mitglieder posten, ist buddyPress
- Newsletter laufen statt über extrem teures SaaS über das günstige Plugin mailster.co (mit Critsend.com)
- Die meisten Funktionen, die ich wollte, gibt es als Plugins: durchsuchbare FAQ, Captcha, Werbung, auf Discord posten, System für Nutzer-Meldungen usw.
- Ich betreibe https://rpgplayground.com/
- Ich betreibe https://text-generator.io, einen Dienst, der mit OpenAI konkurriert
- Früher lief er auf Kubernetes in GCP, inzwischen betreibe ich ihn über einen Cloudflare-Tunnel mit meinen GPUs zu Hause. So sind die GPU-Kosten zehnmal günstiger
- Analysiert eingegebene Links oder Bilder mit Tesseract / Unified IO / OFA / Beautiful Soup usw. und beantwortet Fragen zu Bildern/Belegen
- Die Website selbst läuft auf AppEngine mit Python + Stripe + Firebase UI und verursacht daher nur geringe wöchentliche Kosten
- Gehostet auf Render
- Ich betreibe https://allaboutberlin.com
- Läuft mit Craft CMS in Docker auf DigitalOcean
- Mit Craft kann man benutzerdefinierte Beitragstypen mit benutzerdefinierten Feldern leicht erstellen, was in WordPress schwerer umzusetzen ist
- Aber weil es nicht WordPress ist, gibt es nicht viele Plugins, die ich brauche
- nginx übernimmt Caching und viele andere Dinge
- Wenn du produktiver werden willst, probier PETAL aus
- Phoenix + Elixir + Tailwind + Alpine.js + LiveView
- Rails + Postgres + Redis + SideKiq
- Gehostet auf Heroku, Error-Tracking mit Sentry, Performance-Monitoring mit New Relic, E-Mail mit Send Grid
- Kürzlich Google Analytics durch Plausible ersetzt und intern tiefgehende Analysen mit Ahoy (Rails Middleware) eingeführt
- Für Kundensupport/Chat nutze ich Intercom, plane aber den Wechsel zu Chatwoot
- Ich will von Heroku weg, aber die naheliegende Alternative Render bietet noch keine HA-Postgres-Option mit automatischem Failover
- Ein Push auf den GitHub-Master-Branch deployt automatisch in Produktion
- Merges in den Master-Branch sind nur per PR möglich und nur dann, wenn Linter (
Rubocop) + Tests (Rspec auf CircleCI) + 100-%-Abdeckung (codecov.io) grün sind
- Die UI ist Bootstrap, und ich rendere serverseitig mit JavaScript
- Für UIs, die mehr Interaktion brauchen, überlege ich zwischen Hotwire/Turbo vs. Alpine vs. Stimulus vs. React
- Ich entwickle eine Agtech-Plattform
- Backend: Rust, Rocket, sqlx, Postgres, ein wenig Ansible
- Frontend: Rescript + React. Ich nutze ziemlich viel Rust/WASM, aber das war ein Fehler. Ich versuche, das rückgängig zu machen
8 Kommentare
Wow, wie verwalten Sie das alles ganz allein? zitter
Mich würde wirklich interessieren, was es eigentlich bedeutet, lang laufende Webanfragen auszulagern — dazu gibt es erstaunlich wenig konkrete Erklärungen. ^^;
Dammm
Wow, ihr nutzt wirklich ganz unterschiedliche Sachen,, so eine Kombination wie PETAL sehe ich zum ersten Mal, gut
👍
Wirklich ein sehr nützlicher Artikel, vielen Dank!
Architektur-Stack eines Ein-Personen-Tech-Startups
Der Tech-Stack von Healthchecks.io, einem Ein-Personen-SaaS
Tool-Empfehlungen für Ein-Personen-SaaS-Entwickler
Ein Startup für 6 $ pro Jahr betreiben
Ein Software-Startup mit minimalem Aufwand betreiben
Stimulus + Turbo Frames - Hotwire : HTML Over The Wire
Siehe auch frühere Beiträge auf HN
2021 https://news.ycombinator.com/item?id=28299053
2020 https://news.ycombinator.com/item?id=25465582
2019 https://news.ycombinator.com/item?id=21024041