54P by xguru 2달전 | favorite | 댓글 8개
  • OVH 클라우드의 큰 서버 하나에서 여러개의 SaaS앱을 운영중
    • 하루에 약 6백만개의 캐쉬 안된 리퀘스트를 처리
    • 백엔드는 Django/Python + MySQL + Redis + WebSocket(Pub/sub)
    • 나의 비밀은 OpenResty (Dynamic web platform based on NGINX and LuaJIT)
      • Lua 스크립트를 이용하여 복잡한 페이지 캐슁을 처리하고, DDos를 막고, 웹소켓을 처리하고, 장기 실행용 요청들을 오프로딩 처리함
      • 1500 짜리 Lua 코드로 구성된 "가난한 자의 Cloudflare"
    • 이 앱들은 Docker 전에 만들어진 것들이라 그냥 프로세스로 실행됨(systemd)
    • 초기엔 uwsgi를 사용했지만, gunicorn 이 훨씬 효율적이어서 이제 완전히 바꿈
    • 나의 SPOF는 DNS임. 나는 DNSMadeEasy와 관계가 좋아서 자동 ban 걱정은 안했는데, 이제 DigiCert가 그들을 인수해버려서 문제
    • 결제는 Stripe 와 Paypal 로 처리. Paypal을 싫어하는 데도 추가한 것은, 언제 Stripe가 경고없이 차단할지 몰라서임
    • 사용자 업로드는 aiohttp Python 서버로 파일을 Wasabi 와 Backblaze로 보내고 nginx에서 캐쉬함. 그래서 클라우드 전송량 요금은 0임
    • 웹소켓 레이어는 약간 불안정. 처음엔 파이썬 웹소켓 asyncio 라이브러리로 모든걸 처리했는데, 어느정도는 동작했지만 나중에 멀티 프로세스로 처리하려고 하자 리소스를 엄청 먹기 시작함
    • 그래서 OpenResty 의 웹소켓을 이용하기로 결정했지만 복잡한 로직을 Lua로 작성하기는 싫었음
      • Redis Pub/Sub을 이용해서 메시지를 파이썬 프로세스에 전달하도록 변경
    • 하지만 내 서비스 이름은 알려주지 않을 거임(경쟁자가 더 생기는 것은 싫거든!)
  • 난 유명하지 않는 옵션을 선택하는 경향이 있는데, 솔로 개발자에게는 생산적이라고 생각
    • PostgreSQL + SQLite
    • 메인 언어 Rust
    • 프론트엔드는 htmx + tailwindcss
    • CloudFlare + Vultr 호스팅
    • nginx + nixos + circle ci
  • 누군가는 싫어하겠지만 난 Wordpress 를 선택한게 최선이었음
    • 포럼은 bbPress
    • 멤버가 포스팅하는 커뮤니티는 buddyPress
    • 뉴스레터는 무지 비싼 SaaS 대신 저렴한 mailster.co 플러그인(Critsend.com 이용)
    • 원하는 대부분의 기능들은 플러그인으로 찾아보면 다 있음 : 검색 가능한 FAQ, Captcha, 광고, 디스코드에 포스팅하기, 사용자 신고 시스템 등등
    • https://rpgplayground.com/ 운영중
  • OpenAI랑 경쟁하는 서비스인 https://text-generator.io 를 운영
    • 기존엔 GCP에서 쿠버네티스 쓰다가, 이제는 Cloudflare 터널을 통해서 집에서 내 GPU들로 운영함. 이렇게 하면 GPU 가격이 10배 저렴.
    • 입력된 링크나 이미지에서 Tesseract / Unified IO / OFA / Beautiful Soup 등을 통해서 분석하고 이미지/영수증에 대한 답변을 해줌
    • 사이트 자체는 AppEngine에서 Python + Stripe + Firebase UI 로 되어있어서 매주 적은 비용으로 운영중
  • Render 에서 호스팅중
  • https://allaboutberlin.com 운영중
    • DigitalOcean 의 Docker 에서 Craft CMS로 운영중
    • Craft는 워드프레스에서는 만들기 어려운, 사용자 정의 필드가 있는 사용자 정의 게시물 유형을 쉽게 만들수 있음
    • 하지만 워드프레스가 아니기 때문에, 필요한 플러그인이 많지는 않음
    • nginx 로 캐싱 및 많은 것들을 처리함
  • 생산적이 되고 싶으면 PETAL을 시도해봐
    • Phoenix + Elixir + Tailwind + Alpine.js + LiveView
  • Rails + Postgres + Redis + SideKiq
    • Herokus 에 호스팅, 에러 추적은 Sentry, 성능 모니터링은 New Relic, 메일은 ㄴend Grid
    • 최근에 Google Analytics를 Plausible 로 교체하고, Ahoy(Rails Middleware) 사용해서 내부에서 심도있는 분석중
    • 고객지원/채팅은 Intercom 사용중인데 Chatwoot로 교체예정
    • Heroku 에서 벗어날 예정인데, 대표적인 대체제인 Render가 아직 자동 페일오버 되는 HA Postgres 옵션이 없음
    • GitHub 마스터 브랜치에 푸시하면 프로덕션에 자동 디플로이.
      • 마스터브랜치에 머지는 PR로만 가능하고, Linter(Rubocop) + Tests(Rspec on CircleCI) + 100% 커버리지(codecov.io) 에서 Green 이어야만 가능
    • UI는 부트스트랩이고, 자바스크립트로 서버사이드 렌더링 중
      • 더 인터랙션이 필요한 UI에 대해서는 Hotwire/Turbo vs. Alpine vs. Stimulus vs. React 고민중
  • Agtech 플랫폼 개발중
    • 백엔드 : Rust, Rocket, sqlx, Postgres, Ansible 약간
    • 프론트엔드 : Rescript + React. Rust/WASM 꽤 많이 사용중인데 이건 실수였음. 되돌리려고 시도중

와 혼자서 이걸 다 어떻게 관리하시나요 ㄷㄷ

오래 처리되는 웹 요청을 오프로드 한다는 게 어떻게 한다는 건지 참 궁금한게 별 이야기가 없네요 ^^;

와 정말 다양하게 쓰네요,, PETAL 이런 조합은 처음 봐요 굿

진짜 유용한 아티클이네요 감사감사!