Байршуулалт¶
Экосистемийн бүх үйлчилгээ нэг байршуулалтын загвар ашиглана. Энэ хуудас нь тэр загварыг тайлбарлана.
Хостын тодорхой мэдээлэл энд байхгүй
Серверийн хаяг, хэрэглэгчийн нэр, нууц тохиргоо зэрэг ажиллагааны дэлгэрэнгүй нь энэ нийтийн сайтад ороогүй. Тэдгээр нь тухайн репо доторх хаалттай runbook-д байрлана.
Ерөнхий загвар¶
Интернэт
│
▼
┌─────────────────┐
│ edge nginx │ TLS termination · HSTS · rate limit
│ (контейнер) │ vhost бүр → дотоод үйлчилгээ
└────────┬────────┘
│ дундын Docker сүлжээ
┌────────┴──────────────────────────────┐
│ │
▼ ▼ ▼
апп A апп B статик сайт
(Go + Next) (Go + Next) (nginx)
│ │
└────────┬───────┘
▼
PostgreSQL · Redis (дундын)
Гол зарчмууд:
- Нэг edge, олон vhost. Гадна талд ганцхан nginx контейнер 80/443 портыг эзэмшинэ.
Домэйн бүр өөрийн
serverблоктой, дотоод үйлчилгээ рүү прокси хийнэ. - Дотоод үйлчилгээ гадагш нээлттэй биш. Апп-ууд зөвхөн дундын Docker сүлжээнд
сонсоно, эсвэл
127.0.0.1-д bind хийнэ. Гаднаас шууд хандах боломжгүй. - Дундын дэд бүтэц. PostgreSQL, Redis нь нэг instance-аар олон апп-д үйлчилнэ; апп бүр өөрийн DB/schema-тай.
- 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,
certbotwebroot горимоор. - ACME challenge нь port 80 дээрх
/.well-known/acme-challenge/замаар үйлчлэгдэнэ. - Шинэчлэлт нь автоматаар, cron-оор долоо хоног тутам; амжилттай бол nginx reload хийнэ.
Шинэ домэйн нэмэхэд:
- DNS-ийг сервер рүү заана.
- Port 80-ийн ACME блокт домэйныг нэмнэ.
- Certbot-оор гэрчилгээ авна.
- HTTPS vhost-ыг нэмж, гэрчилгээг заана.
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 хуудаснаас үзнэ үү.