Агуулгыг алгасах

Байршуулалт

Экосистемийн бүх үйлчилгээ нэг байршуулалтын загвар ашиглана. Энэ хуудас нь тэр загварыг тайлбарлана.

Хостын тодорхой мэдээлэл энд байхгүй

Серверийн хаяг, хэрэглэгчийн нэр, нууц тохиргоо зэрэг ажиллагааны дэлгэрэнгүй нь энэ нийтийн сайтад ороогүй. Тэдгээр нь тухайн репо доторх хаалттай runbook-д байрлана.

Ерөнхий загвар

        Интернэт
   ┌─────────────────┐
   │   edge nginx    │  TLS termination · HSTS · rate limit
   │  (контейнер)    │  vhost бүр → дотоод үйлчилгээ
   └────────┬────────┘
            │  дундын Docker сүлжээ
   ┌────────┴──────────────────────────────┐
   │                                       │
   ▼                ▼                      ▼
 апп A            апп B                 статик сайт
 (Go + Next)     (Go + Next)            (nginx)
   │                │
   └────────┬───────┘
   PostgreSQL · Redis  (дундын)

Гол зарчмууд:

  1. Нэг edge, олон vhost. Гадна талд ганцхан nginx контейнер 80/443 портыг эзэмшинэ. Домэйн бүр өөрийн server блоктой, дотоод үйлчилгээ рүү прокси хийнэ.
  2. Дотоод үйлчилгээ гадагш нээлттэй биш. Апп-ууд зөвхөн дундын Docker сүлжээнд сонсоно, эсвэл 127.0.0.1-д bind хийнэ. Гаднаас шууд хандах боломжгүй.
  3. Дундын дэд бүтэц. PostgreSQL, Redis нь нэг instance-аар олон апп-д үйлчилнэ; апп бүр өөрийн DB/schema-тай.
  4. Docker Compose — апп бүр өөрийн compose stack-тай, дундын сүлжээнд залгагдана.

Edge nginx

Edge нь дараах зүйлсийг хариуцна:

Үүрэг Тайлбар
TLS termination Let's Encrypt гэрчилгээ, автомат шинэчлэлт
HSTS max-age=63072000; includeSubDomains
Rate limit Zone-оор: auth (хатуу) · app (зөөлөн) · api
Reverse proxy vhost → дотоод үйлчилгээ
Тодорхойгүй хостыг хаах Default server → холболт таслах

Edge конфиг нь git-ээр удирдагдана

Edge nginx-ийн conf.d хавтас нь тодорхой репо-гоос git-ээр синк хийгддэг. Хост дээр гараар засвар оруулбал дараагийн deploy үед git reset --hard дарж бичнэ.

Тиймээс vhost нэмэх/өөрчлөх ажил нь репо руу commit хийж, CI-гаар тарааж гүйцэтгэгдэнэ.

Хоёр дахь загвар — үйлчилгээ өөрийн vhost-оо эзэмших

Зөвхөн нэг үйлчилгээнд хамаарах vhost-ыг төвлөрсөн файлд бус, тухайн үйлчилгээний репо-д байрлуулж, түүний deploy нь конфигоо edge-ийн conf.d руу тусдаа файлаар суулгах загвар бас бий.

Давуу тал: өөрчлөлт нэг репо дотор дуусна, өөр багийн deploy хүлээхгүй. Нөхцөл: конфиг нь бүрэн бие даасан байх ёстой — өөр файлд тодорхойлогдсон rate-limit zone эсвэл default server рүү хамаарахгүй.

Энэ сайт өөрөө тэр загвараар ажилладаг — Энэ баримтын платформ.

Гэрчилгээ

  • Let's Encrypt, certbot webroot горимоор.
  • ACME challenge нь port 80 дээрх /.well-known/acme-challenge/ замаар үйлчлэгдэнэ.
  • Шинэчлэлт нь автоматаар, cron-оор долоо хоног тутам; амжилттай бол nginx reload хийнэ.

Шинэ домэйн нэмэхэд:

  1. DNS-ийг сервер рүү заана.
  2. Port 80-ийн ACME блокт домэйныг нэмнэ.
  3. Certbot-оор гэрчилгээ авна.
  4. HTTPS vhost-ыг нэмж, гэрчилгээг заана.
  5. nginx -t шалгаад reload.

Статик сайт (баримтын портал)

Баримтын сайтууд нь урьдчилан build хийгдсэн статик HTML. Тэдгээрийг ажиллуулах хамгийн энгийн загвар:

  • MkDocs-оор site/ build хийнэ,
  • үр дүнг сервер лүү хуулна,
  • жижиг nginx:alpine контейнер түүнийг үйлчилнэ,
  • edge nginx түүн рүү прокси хийнэ.

Апп-ын runtime байхгүй тул нөөц бага, эвдрэх зүйл бага.

Энэ сайт яг ийм байдлаар ажиллаж байна — дэлгэрэнгүйг Энэ баримтын платформ хуудаснаас.

Апп deploy

Апп-уудын хувьд хоёр загвар хэрэглэгдэж байна:

Загвар Тайлбар
Хост дээр build CI нь репо-г хост руу синк хийж, docker compose build && up -d ажиллуулна
Registry-ээр CI нь image build хийж registry рүү push, хост нь pull && up -d хийнэ

Чиг хандлага нь хамаарлыг багасгах тал руу — гадаад registry-ээс шууд хост дээрх build руу шилжсэн тохиолдол бий.

Хэсэгчилсэн deploy: CI нь өөрчлөгдсөн зам (paths-filter)-аар аль үйлчилгээг дахин барихыг тодорхойлно. Нэг апп-ын өөрчлөлт бусдыг хөндөхгүй.

Rollback

  • Статик сайт — өмнөх build-ийн архивыг буцааж задлана.
  • Апп — өмнөх image tag руу буцаана (<SVC>_IMAGE_TAG хувьсагчаар пин хийх боломжтой).

Эрүүл мэндийн шалгалт

Үйлчилгээ бүр /health endpoint-тай. Compose-ийн healthcheck нь PostgreSQL, Redis зэрэг дэд бүтцийн бэлэн байдлыг шалгаж, апп-ыг тэдгээр бэлэн болсны дараа асаана.

Deploy-ийн шалгах жагсаалт

  • [ ] DNS зөв заасан
  • [ ] Гэрчилгээ олгогдсон, автомат шинэчлэлтэд хамрагдсан
  • [ ] Edge vhost нэмэгдсэн, репо-д commit хийгдсэн
  • [ ] nginx -t амжилттай
  • [ ] Дотоод үйлчилгээ гадагш нээлттэй биш
  • [ ] /health хариулж байна
  • [ ] Нууц тохиргоо орчны хувьсагчаар, репо-д байхгүй
  • [ ] Rollback хийх арга тодорхой

Дэлгэрэнгүй автоматжуулалтыг CI/CD хуудаснаас үзнэ үү.