- OVHcloudの大きなサーバー1台で複数のSaaSアプリを運用中
- 1日に約600万件のキャッシュされていないリクエストを処理
- バックエンドは Django/Python + MySQL + Redis + WebSocket(Pub/sub)
- 私の秘密は OpenResty(NGINX と LuaJIT ベースの動的Webプラットフォーム)
- Lua スクリプトを使って複雑なページキャッシュを処理し、DDoSを防ぎ、WebSocketを処理し、長時間実行のリクエストをオフロード処理している
- 1500行の Lua コードで構成された「貧者の Cloudflare」
- これらのアプリは Docker 以前に作られたので、単にプロセスとして実行している(systemd)
- 当初は uwsgi を使っていたが、gunicorn のほうがはるかに効率的だったので、今は完全に切り替えた
- 私の SPOF は DNS。DNSMadeEasy とは関係が良く、自動BANは心配していなかったが、DigiCert が彼らを買収してしまい問題になった
- 決済は Stripe と Paypal で処理。Paypal が嫌いなのに追加したのは、Stripe がいつ警告なしに停止するかわからないから
- ユーザーアップロードは aiohttp の Python サーバーでファイルを Wasabi と Backblaze に送り、nginx でキャッシュしている。そのためクラウド転送料金は0
- WebSocket レイヤーは少し不安定。最初は Python の WebSocket asyncio ライブラリで全部処理していたが、ある程度は動いたものの、後でマルチプロセス化しようとするとリソースを大量に消費し始めた
- そこで OpenResty の WebSocket を使うことにしたが、複雑なロジックを Lua で書きたくはなかった
- Redis Pub/Sub を使ってメッセージを Python プロセスに渡すよう変更
- ただし自分のサービス名は明かさないつもり(競合が増えるのは嫌だから!)
- 私はあまり有名ではない選択肢を選ぶ傾向があるが、ソロ開発者にとっては生産的だと思う
- PostgreSQL + SQLite
- メイン言語は Rust
- フロントエンドは htmx + tailwindcss
- CloudFlare + Vultr ホスティング
- nginx + nixos + circle ci
- 人によっては嫌うだろうけど、私にとっては Wordpress を選んだのが最善だった
- フォーラムは bbPress
- メンバーが投稿するコミュニティは buddyPress
- ニュースレターは非常に高価なSaaSの代わりに、安価な mailster.co プラグイン(Critsend.com を利用)
- 欲しい機能の大半はプラグインで見つかる:検索可能なFAQ、Captcha、広告、Discord への投稿、ユーザー通報システムなど
- https://rpgplayground.com/ を運営中
- OpenAI と競合するサービス https://text-generator.io を運営
- 以前は GCP で Kubernetes を使っていたが、今は Cloudflare トンネル経由で自宅のGPU群で運用している。これで GPU コストが10分の1になった。
- 入力されたリンクや画像を Tesseract / Unified IO / OFA / Beautiful Soup などで解析し、画像やレシートについて回答してくれる
- サイト自体は AppEngine 上の Python + Stripe + Firebase UI で構成されており、毎週わずかなコストで運営中
- Render でホスティング中
- https://allaboutberlin.com を運営中
- DigitalOcean の Docker 上で Craft CMS を運用中
- Craft は、WordPress では作りにくいカスタムフィールド付きのカスタム投稿タイプを簡単に作れる
- ただし WordPress ではないので、必要なプラグインはそれほど多くない
- nginx でキャッシュや多くの処理を行っている
- 生産的になりたいなら PETAL を試してみて
- Phoenix + Elixir + Tailwind + Alpine.js + LiveView
- Rails + Postgres + Redis + SideKiq
- Heroku にホスティング、エラー追跡は Sentry、パフォーマンス監視は New Relic、メールは Send Grid
- 最近 Google Analytics を Plausible に置き換え、Ahoy(Rails Middleware)を使って内部で詳細な分析をしている
- カスタマーサポート/チャットは Intercom を使っているが、Chatwoot に置き換える予定
- Heroku から離れる予定だが、有力な代替候補である Render にはまだ自動フェイルオーバー対応の HA Postgres オプションがない
- GitHub の master ブランチに push すると本番環境に自動デプロイ
- master ブランチへのマージは PR 経由でのみ可能で、Linter(Rubocop)+ Tests(CircleCI 上の Rspec)+ 100% カバレッジ(codecov.io)がすべて Green でなければならない
- UI は Bootstrap で、JavaScript によりサーバーサイドレンダリング中
- よりインタラクションが必要な UI については Hotwire/Turbo vs. Alpine vs. Stimulus vs. React を検討中
- Agtech プラットフォームを開発中
- バックエンド: Rust, Rocket, sqlx, Postgres, Ansible を少し
- フロントエンド: Rescript + React。Rust/WASM もかなり使っているが、これは失敗だった。戻そうとしている
8件のコメント
わあ、一人でこれを全部どうやって管理しているんですか……すごいですね。
時間のかかるWebリクエストをオフロードするというのが、具体的にどういうことなのかとても気になるのですが、そのあたりの話があまりないですね ^^;
Dammm
わあ、本当にいろいろ使っていますね、、PETAL みたいな組み合わせは初めて見ました、いいですね
👍
本当に役に立つ記事ですね、ありがとうございます!
1人技術スタートアップのアーキテクチャスタック
1人SaaSであるHealthchecks.ioの技術スタック
1人SaaS開発者のためのツールおすすめ
スタートアップを年6ドルで運営する
最小限の努力でソフトウェアスタートアップを運営する
Stimulus + Turbo Frames - Hotwire : HTML Over The Wire
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