# Triển khai tùy chọn, sau khi thử tại máy

VM không sửa nhiệm vụ mơ hồ hay nhà cung cấp AI chưa đăng nhập. Chỉ chuyển sang hạ tầng khi Test thật, quyền và kết quả ở máy đã được kiểm tra.

## 01 · Đối chiếu CLI đã cài

Bản `@2server/cli` đã phát hành/cài được đối chiếu là **0.2.16**. Ví dụ dưới đây dựa trên README và mã phần trợ giúp của bản đó. Kiểm tra bản của bạn trước khi dùng vì bản khác có thể đổi. Cần **Bun ≥ 1.3 và Node ≥ 20**; tạo VM còn cần Terraform, GCP IAP cần gcloud.

```sh
# Chỉ cài khi người vận hành đã duyệt.
npm install -g @2server/cli@0.2.16
npm list -g @2server/cli --depth=0
2srv help
2srv help legacy
```

Ưu tiên `2srv`; `2server` là tên lệnh tương thích. Bản 0.2.16 có `init server|app|extension|service NAME -o FILE`. Các lệnh tạo file khởi điểm để bạn chỉnh, không tạo hệ Soot chạy sẵn. Xem [2server README](https://github.com/2found/2server#readme) và [hướng dẫn vận hành](https://github.com/2found/2server/blob/main/docs/operator-guide.md), đối chiếu bản đã cài nếu tài liệu mới thay đổi.

## 02 · VM đã quản lý hay VM mới?

**VM đã được 2server quản lý:** xác nhận trạng thái đã công bố, chủ sở hữu, quyền truy cập, tài nguyên, mạng và cách vận hành dịch vụ hiện tại. Từ dự án sở hữu VM, kết nối bằng thông tin SSH đã duyệt. Host/user là chỗ giữ mẫu; đường dẫn khóa riêng là tham chiếu, không phải giá trị khóa.

```sh
2srv connect --ssh user@host --identity /absolute/private/ssh-key
```

Connect liên hệ VM và lưu thông tin kết nối riêng được bỏ qua bởi Git, không phải kiểm tra ngoại tuyến. Với GCP IAP/SSH có cấu trúc, dùng `--connection FILE` theo tài liệu. Không bootstrap VM đã quản lý hay dùng bộ Terraform tạo mới để tiếp quản nó.

**VM mới:** chuẩn bị tài khoản/dự án, thanh toán, đăng nhập nhà cung cấp và quyền trước khi lập kế hoạch. Duyệt vùng, loại VM/CPU/bộ nhớ, đĩa, địa chỉ công khai, SSH/IAP, giới hạn truy cập và chi phí định kỳ. VM/lưu trữ/mạng và mức dùng AI tính riêng; xem ước tính hiện tại của nhà cung cấp, không đoán giá đám mây.

- [2server provisioning](https://github.com/2found/2server/blob/main/docs/operator-guide.md#provisioning) — đầu vào GCP/AWS và trách nhiệm giữ trạng thái Terraform riêng.
- [Dự án và thanh toán GCP](https://cloud.google.com/resource-manager/docs/creating-managing-projects) và [xác thực tại máy](https://cloud.google.com/docs/authentication/provide-credentials-adc#local-dev).
- [Thiết lập tài khoản AWS](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct.html) và [xác thực CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-authentication.html).

GCP cần duyệt project/region/zone/machine/disk cùng quyền bật API, compute, IAM, OS Login và IAP. AWS cần region, AMI Debian/Ubuntu amd64 đã kiểm tra, tham chiếu SSH public key và SSH CIDRs giới hạn. Theo hướng dẫn provisioning để lập kế hoạch bằng đường dẫn tfvars tuyệt đối, riêng tư đã duyệt. Dừng để người vận hành xem trước khi apply ở nhà cung cấp. Mất phản hồi không phải lý do tạo tài nguyên lần nữa.

Sau khi VM mới tồn tại — hoặc với VM tương thích có sẵn nhưng chưa được quản lý — chuẩn bị server manifest rỗng. Điều kiện: Debian 12/13 hoặc Ubuntu 22.04/24.04, Python 3, SSH bằng khóa với host key đáng tin, sudo không cần mật khẩu và root trên VM kéo được image từ registry.

```sh
2srv init server my-server -o server.local.json
# Chỉnh/xem lại SSH hoặc GCP IAP; giữ file riêng và ngoài Git.
2srv server bootstrap -f server.local.json
# Chỉ sau khi duyệt đúng đích và cho phép thay đổi hạ tầng:
2srv server bootstrap -f server.local.json --apply
```

Bootstrap cài Docker/Caddy, công bố trạng thái quản lý VM ban đầu và lưu kết nối. Cần manifest rỗng và VM chưa có trạng thái 2server đã công bố. Không có `--apply` chỉ trình bày ý định ngoại tuyến, chưa kiểm tra truy cập thật. Hướng dẫn không tự tạo hay bootstrap VM thay bạn; tiếp tục tại máy vẫn phù hợp.

## 03 · Duyệt đầu vào Soot Service

Đường này dùng **custom `kind: Service`** do bạn soạn, không phải bộ Soot chạy sẵn đã qua admission đầy đủ. Đây là đường tương thích có chủ đích, **không phải native C1/C3 admission**; compiled Data Pool runner nằm ngoài phạm vi thành phần đã được admission đó. Không bỏ qua validator hay tạo biên nhận admission giả. Bản 0.2.16 còn nhận Service cũ nhưng khuyến nghị App template cho phần mở rộng tái sử dụng. Service có trạng thái không tự có đổi luồng blue/green hay rollback lưu lượng như App.

```sh
2srv init service soot-runtime -o soot-service.yaml
```

File Service tạo ra chỉ là khởi điểm. Trước validate/plan, duyệt các đầu vào:

| Đầu vào | Cần xem |
| --- | --- |
| Nguồn/image | Commit nguồn, phần phụ thuộc, digest registry bất biến, quyền kéo image |
| Runtime/cấu hình | Phiên bản, nhiệm vụ, capability đã chọn, saved/active, chính sách AI |
| Dữ liệu | Volume lưu bền cấu hình/chat, một chủ mở kho, lưu trữ tìm kiếm và dung lượng |
| Khóa | Tham chiếu file/kho riêng do người vận hành quản lý, liên kết từng thao tác; không giá trị trong mã/chat/argv |
| Mạng | API/operator riêng, TLS, origin Nest chính xác, tuyến công khai tối thiểu |
| Sức khỏe/tài nguyên | Readiness và dịch vụ phụ thuộc, CPU/bộ nhớ/đĩa, tải dự kiến và chi phí biết được |
| Khôi phục | Sao lưu/khôi phục dữ liệu và khóa, giới hạn thay thế/rollback Service |

`--image` chỉ dành App; đặt digest trong Service spec đã duyệt. Thay image không được ghi cấu hình khởi tạo đè lên cấu hình/dữ liệu hiện có. Một runtime sở hữu một kho chat; dữ liệu tìm kiếm có lưu bền/sao lưu riêng.

```sh
2srv validate -f soot-service.yaml
2srv plan -f soot-service.yaml
# Chỉ sau khi duyệt và cho phép thay đổi hạ tầng rõ ràng:
2srv deploy -f soot-service.yaml --apply
```

`validate` ngoại tuyến. `plan` liên hệ VM/registry và có thể kéo các lớp image nên cần quyền phù hợp. Kế hoạch không phải phê duyệt; apply tính lại theo trạng thái hiện tại.

## 04 · Hai ranh giới của trình duyệt

Backend sản phẩm xác thực người dùng, chọn Soot được phép và giữ khóa runtime/client đáng tin **ở phía máy chủ**. Không nhúng khóa đó vào frontend/bundle công khai. Trình duyệt người dùng không tự khẳng định danh tính đáng tin với runtime. Xem [tích hợp sản phẩm](https://github.com/2found/2agent/blob/main/docs/product-integration.md).

Nest khác: **trình duyệt của người vận hành** dùng operator key **chỉ trong bộ nhớ trang**, tải lại cần xác thực lại. Nest native dùng **kho kết nối riêng**. Kết nối trực tiếp cần TLS đáng tin và origin cho phép chính xác, hoặc proxy loopback cùng origin cố định chuyển nguyên xác thực của người gọi, không chèn khóa chủ. Kho AI, operator key và khóa UI/Soot của Data Pool có quyền riêng.

## 05 · Kiểm tra công việc, không chỉ sức khỏe

1. Readiness và dịch vụ phụ thuộc qua cách vận hành được hỗ trợ.
2. Test bằng mô hình thật ở active revision đã xác nhận, trích nguồn đúng.
3. Đọc đúng quyền được phép, ghi pool và Support đọc bị từ chối khi các lớp khác đã cấu hình.
4. Yêu cầu chưa xác thực vào phần được bảo vệ trả **401**, không chỉ xem health công khai.
5. Chat/cấu hình/Data Pool còn sau thay thế có kiểm soát.
6. Kế hoạch sao lưu/khôi phục dữ liệu, vòng đời khóa riêng và phục hồi đã duyệt.

Container khỏe chưa chứng minh lời gọi AI; khởi động lại chưa chứng minh lưu bền. Ghi từng kiểm tra đã thấy gì, phần nào còn chưa kiểm tra.

## 06 · Sao lưu và kết quả chưa rõ

Sao lưu dữ liệu riêng với nguồn/image. Kho chat cần tiến trình sở hữu đã dừng hoặc snapshot được hỗ trợ, không sao chép DB đang chạy tùy tiện. Dữ liệu tìm kiếm và bí mật riêng có cách phục hồi riêng.

Nếu apply/thay thế mất phản hồi, xem biên nhận gốc và trạng thái tài nguyên thực trước khi thử lại. Rollback image không hoàn tác dữ liệu đã ghi hay thao tác bên ngoài.
