28 คะแนน โดย xguru 2022-05-30 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

ฮาร์ดแวร์ : ใช้เซิร์ฟเวอร์ Dedicated ของ Hetzner 9 เครื่อง : €484 ต่อเดือน

  • HAProxy 4 เครื่อง, เว็บเซิร์ฟเวอร์ 3 เครื่อง, Postgres 2 เครื่อง

ซอฟต์แวร์

  • Ubuntu 20.04
  • รันบริการด้วย Systemd : haproxy / nginx / postgres
  • ใช้ Wireguard สำหรับเครือข่ายส่วนตัวระหว่างเซิร์ฟเวอร์ โดยแยกชั้นไว้ทำให้ HAProxy เชื่อมต่อกับ Postgres ไม่ได้
  • ใช้ Netdata agent มอนิเตอร์เครื่อง/บริการ และเชื่อมกับ Netdata Cloud เพื่อดูภาพรวมทั้งหมดได้
  • ใช้ HAProxy 2.2 สำหรับ load balancing และ rolling update
  • ใช้ PostgreSQL 13 ทำ streaming replication จาก Primary ไปยัง Standby ไม่มี automatic failover
    → สามารถ trigger failover ได้ด้วยคำสั่งเดียว แต่จัดการแบบแมนนวล

บนแอปเซิร์ฟเวอร์

  • รันแอป Python ของ Healthchecks ด้วย uWSGI
  • โปรแกรมเล็กชื่อ hchk ที่เขียนด้วย Go ใช้จัดการ ping API และ inbound email
  • NGINX สำหรับ rate limiting, เสิร์ฟไฟล์สแตติก, reverse proxy (uWSGI และ hchk)
โฆษณา

เครื่องมือ SaaS

  • AWS S3 : จัดเก็บแบ็กอัป DB
  • Braintree : การชำระเงินและจัดการ subscription
  • Cloudflare : DNS
  • Elastic Email : ส่ง transactional email
  • Fastmail : รับ/ส่งอีเมลซัพพอร์ตลูกค้า
  • GitHub : version control และการติดตามงาน, ใช้ GitHub Actions รันทดสอบทุกครั้งที่มี commit
  • Hardypress : ดูแลบล็อกของบริการ (บริการโฮสต์ WordPress แบบสแตติก)
  • HetrixTools : มอนิเตอร์ uptime
  • IcoMoon : สร้าง icon font
  • pgDash : มอนิเตอร์เซิร์ฟเวอร์ PostgreSQL
  • PingPong : ดูแลหน้าสถานะบริการ
  • SSLMate : ทำ certificate provisioning ได้จาก command line
  • Syften : รับการแจ้งเตือนเมื่อมีการพูดถึงบริการ Healthchecks บน HN, Twitter, Reddit ฯลฯ
  • Twillio : ส่ง SMS, การแจ้งเตือนผ่าน Whatsapp และโทรศัพท์

Cron jobs

  • วันละครั้งแบ็กอัป DB ทั้งหมด เข้ารหัสด้วย gpg แล้วอัปโหลดไป S3
  • วันละครั้งส่งการแจ้งเตือนลบผู้ใช้ที่ไม่เคลื่อนไหว
  • วันละครั้งส่งการแจ้งเตือนให้ผู้ใช้ที่เป็นสมาชิกแบบรายปีซึ่งจะต่ออายุภายใน 1 เดือน

สภาพแวดล้อมการพัฒนา

  • เดสก์ท็อปพีซี + จอ 27 นิ้ว 1440p
  • Ubuntu 20.04 + GNOME shell
  • Sublime Text + meld / Sublime Merge
  • Yubikeys
  • Fabric : รันงาน deploy และบำรุงรักษา
  • sops : จัดเก็บ secret
  • โน้ตบุ๊กสำหรับรับมือกรณีฉุกเฉิน