54 ポイント 投稿者 xguru 2022-09-26 | 8件のコメント | WhatsAppで共有
  • 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件のコメント

 
qkreoaksn 2022-09-29

わあ、一人でこれを全部どうやって管理しているんですか……すごいですね。

 
galadbran 2022-09-27

時間のかかるWebリクエストをオフロードするというのが、具体的にどういうことなのかとても気になるのですが、そのあたりの話があまりないですね ^^;

 
bohblue23 2022-09-26

Dammm

 
yshrust 2022-09-26

わあ、本当にいろいろ使っていますね、、PETAL みたいな組み合わせは初めて見ました、いいですね

 
kandk 2022-09-26

👍

 
jujumilk3 2022-09-26

本当に役に立つ記事ですね、ありがとうございます!

 
xguru 2022-10-02

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