- J’exploite plusieurs applis SaaS sur un gros serveur chez OVHcloud
- Environ 6 millions de requêtes non mises en cache traitées par jour
- Backend : Django/Python + MySQL + Redis + WebSocket (Pub/Sub)
- Mon secret, c’est OpenResty (plateforme web dynamique basée sur NGINX et LuaJIT)
- J’utilise des scripts Lua pour gérer un cache de pages complexe, bloquer les DDoS, traiter les WebSocket et déporter les requêtes longues
- Un « Cloudflare du pauvre » composé de 1 500 lignes de code Lua
- Ces applis ont été créées avant Docker, donc elles tournent simplement comme des processus (
systemd)
- Au début, j’utilisais
uwsgi, mais gunicorn est bien plus efficace, donc j’ai complètement migré
- Mon SPOF, c’est le DNS. J’étais en bons termes avec DNSMadeEasy donc je ne craignais pas les bannissements automatiques, mais maintenant DigiCert les a rachetés, donc ça devient un problème
- Les paiements passent par Stripe et PayPal. J’ai ajouté PayPal malgré le fait que je ne l’aime pas, parce qu’on ne sait jamais quand Stripe peut bloquer un compte sans prévenir
- Les uploads utilisateurs passent par un serveur Python
aiohttp qui envoie les fichiers vers Wasabi et Backblaze, puis nginx les met en cache. Résultat : 0 frais de bande passante cloud
- La couche WebSocket est un peu instable. Au départ, je gérais tout avec une bibliothèque Python WebSocket
asyncio, et ça marchait à peu près, mais quand j’ai voulu passer au multi-processus, ça s’est mis à consommer énormément de ressources
- J’ai donc décidé d’utiliser les WebSocket d’OpenResty, mais je ne voulais pas écrire une logique complexe en Lua
- J’ai changé l’architecture pour utiliser Redis Pub/Sub afin de transmettre les messages aux processus Python
- Mais je ne donnerai pas le nom de mon service (je n’ai pas envie d’avoir encore plus de concurrents !)
- J’ai tendance à choisir des options peu connues, mais je pense que c’est productif pour un développeur solo
- PostgreSQL + SQLite
- Langage principal : Rust
- Frontend : htmx + tailwindcss
- Hébergement : CloudFlare + Vultr
nginx + NixOS + CircleCI
- Certains détesteront peut-être ça, mais choisir WordPress a été la meilleure décision pour moi
- Forum : bbPress
- Communauté où les membres publient : buddyPress
- Newsletter : le plugin abordable mailster.co (avec Critsend.com) au lieu d’un SaaS hors de prix
- Presque toutes les fonctionnalités que je voulais existaient déjà en plugin : FAQ avec recherche, captcha, publicité, publication sur Discord, système de signalement utilisateur, etc.
- J’exploite https://rpgplayground.com/
- J’exploite https://text-generator.io, un service qui concurrence OpenAI
- Avant, j’utilisais Kubernetes sur GCP, mais maintenant je fais tourner le service chez moi sur mes propres GPU via un tunnel Cloudflare. Ça rend le coût GPU 10 fois moins cher.
- Le service analyse les liens ou images fournis avec Tesseract / Unified IO / OFA / Beautiful Soup, et répond à des questions sur les images ou les reçus
- Le site lui-même tourne sur AppEngine avec Python + Stripe + Firebase UI, donc le coût hebdomadaire reste faible
- Hébergé sur Render
- J’exploite https://allaboutberlin.com
- Le site tourne avec Craft CMS dans Docker chez DigitalOcean
- Craft permet de créer facilement des types de contenu personnalisés avec des champs personnalisés, ce qui est difficile à faire dans WordPress
- Mais comme ce n’est pas WordPress, il n’y a pas autant de plugins disponibles
nginx gère le cache et beaucoup d’autres choses
- Si vous voulez être productif, essayez PETAL
- Phoenix + Elixir + Tailwind + Alpine.js + LiveView
- Rails + Postgres + Redis + SideKiq
- Hébergé sur Heroku, suivi des erreurs avec Sentry, monitoring des performances avec New Relic, emails avec SendGrid
- J’ai récemment remplacé Google Analytics par Plausible et j’utilise Ahoy (middleware Rails) pour faire des analyses internes détaillées
- Pour le support client / chat, j’utilise Intercom mais je prévois de passer à Chatwoot
- Je prévois de quitter Heroku, mais Render, l’alternative la plus connue, n’a pas encore d’option HA Postgres avec basculement automatique
- Un push sur la branche master de GitHub déclenche un déploiement automatique en production
- Les merges vers la branche master ne sont possibles que via PR, et seulement si le linter (Rubocop) + les tests (
Rspec sur CircleCI) + 100 % de couverture (codecov.io) sont au vert
- L’UI est en Bootstrap et je fais du rendu côté serveur avec JavaScript
- Pour les UI demandant plus d’interactions, j’hésite entre Hotwire/Turbo vs. Alpine vs. Stimulus vs. React
- Je développe une plateforme agtech
- Backend : Rust, Rocket,
sqlx, Postgres, un peu d’Ansible
- Frontend : ReScript + React. J’utilise pas mal de Rust/WASM, mais c’était une erreur. J’essaie de revenir en arrière
8 commentaires
Waouh, comment vous gérez tout ça tout seul ? impressionnant
Je me demande vraiment ce que signifie le fait de déporter les requêtes web qui prennent longtemps à être traitées ; il n’y a pas vraiment beaucoup d’explications à ce sujet ^^;
Dammm
Waouh, vous utilisez vraiment des choses très variées,, c’est la première fois que je vois une combinaison comme PETAL, bien joué
👍
Article vraiment très utile, merci beaucoup !
La stack d’architecture d’une startup tech en solo
La stack technique de Healthchecks.io, un SaaS géré en solo
Recommandations d’outils pour les développeurs SaaS en solo
Exploiter une startup pour 6 $ par an
Exploiter une startup logicielle avec un minimum d’effort
Stimulus + Turbo Frames - Hotwire : HTML Over The Wire
Consultez aussi d’anciens billets publiés sur 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