Embra chạy app thế nào
Từ code tới app đang chạy:
git push / embra up │ ▼ ┌──────────────┐ build trong microVM dùng một lần │ Build │ Railpack hoặc Dockerfile (BuildKit) └──────┬───────┘ │ image pin theo digest (sha256:…) ▼ ┌──────────────┐ rehearsal migration trên bản copy data │ Plan │ → chờ approve (production) └──────┬───────┘ ▼ ┌──────────────┐ migration → start container → health check │ Deploy │ → chuyển traffic → theo dõi └──────┬───────┘ ▼ Internet ──HTTPS──▶ Edge (Caddy) ──▶ App container (gVisor) ──▶ Postgres riêng của environmentCác thành phần
Phần tiêu đề “Các thành phần”| Thành phần | Làm gì | Bạn thấy ở đâu |
|---|---|---|
| Build | Mỗi build chạy trong một microVM (Firecracker) riêng, dùng xong bỏ. Railpack tự nhận diện app, hoặc dùng Dockerfile của bạn | Build log, operation build |
| Image | Kết quả build, gắn với một digest sha256:…. Deploy chỉ nhận image pin theo digest, không nhận tag |
embra.json khi deploy bằng CLI |
| Plan | Bản mô tả deploy: image, env var, migration. Approve là approve đúng bản này (binding digest) | “Xem và duyệt” |
| App container | Chạy bằng containerd trong sandbox gVisor, kể cả worker và cron: code của bạn không gọi thẳng kernel của server | Log, metrics |
| Edge | Caddy nhận HTTPS, cấp certificate, route tới app | Domain của app |
| Postgres | Mỗi environment một Postgres riêng (PostgreSQL 18), volume ZFS riêng. Chỉ app cùng environment kết nối được | Database và migration |
Control plane và host
Phần tiêu đề “Control plane và host”Embra chia làm hai phần:
- Control plane: nhận request từ console, CLI, GitHub webhook; kiểm quyền; ghi mọi thao tác thành một operation có state (Operation và trạng thái).
- Host agent: phần duy nhất đụng vào server (volume, container, network, Postgres, backup). Chỉ control plane gọi được agent; agent không nhận lệnh từ internet.
Mọi thay đổi đi qua operation. Bước nào không chắc đã xong (ví dụ mất kết nối giữa lúc chạy migration), Embra dừng và chặn environment thay vì tự retry: RECOVERY_REQUIRED, MIGRATION_UNKNOWN.
Migration và rehearsal
Phần tiêu đề “Migration và rehearsal”- Rehearsal chạy migration trên một bản clone ZFS của database production, không đụng production.
- Ngay trước khi chạy migration thật, Embra kiểm schema production còn đúng bản đã rehearsal (
SCHEMA_DRIFTnếu không), rồi chụp snapshot. - Code mới chỉ start sau khi migration xong.
Chi tiết: Database và migration.