> For the complete documentation index, see [llms.txt](https://docs.verge.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.verge.io/learn-the-platform/vi/mo-dun-6-may-ao/02-recipes-marketplace.md).

# Recipe & Marketplace

## Tổng quan

Việc cấu hình thủ công từng máy ảo từ đầu rất tốn thời gian và dễ sai sót. VergeOS **các công thức** giải quyết vấn đề này bằng cách cung cấp các mẫu golden image có thể tùy chỉnh, giúp chuẩn hóa việc cấp phát VM nhưng vẫn cho phép tùy chỉnh theo từng phiên bản. Kết hợp với **danh mục Marketplace**, các công thức cho phép bạn triển khai các VM sẵn sàng cho sản xuất chỉ trong vài phút -- từ máy chủ Ubuntu đến môi trường đánh giá Windows -- với cấu hình nhất quán mỗi lần.

```mermaid
flowchart LR
    subgraph sources["Nguồn công thức"]
        direction TB
        MP["Marketplace<br/>(do VergeOS cung cấp)"]
        LOCAL["Danh mục cục bộ<br/>(các công thức tùy chỉnh)"]
        REMOTE["Kho lưu trữ từ xa<br/>(các công thức dùng chung)"]
    end

    subgraph deploy["Triển khai"]
        direction TB
        Q["Trả lời câu hỏi<br/>(CPU, RAM, Mạng, Lưu trữ)"]
        AUTO["Tự động hóa<br/>(Cơ sở dữ liệu, Cloud-Init)"]
        VM["Phiên bản VM đang chạy"]
    end

    sources --> Q --> AUTO --> VM
```

Một công thức gồm ba thành phần:

1. **VM cơ sở** -- Một máy ảo đã được tổng quát hóa, đóng vai trò là golden image (mẫu)
2. **Câu hỏi** -- Các trường nhập được tổ chức theo từng phần để thu thập giá trị tùy chỉnh cho mỗi phiên bản (lõi CPU, RAM, hostname, cấu hình mạng, thông tin xác thực)
3. **Tự động hóa** -- Các thao tác cơ sở dữ liệu và script cloud-init/Cloudbase-init chạy phía sau để cấu hình VM trong lần khởi động đầu tiên

## Danh mục Marketplace

Mỗi hệ thống VergeOS đều đi kèm với **Marketplace** -- một kho lưu trữ từ xa do VergeOS cung cấp, chứa các công thức VM dựng sẵn sẵn sàng sử dụng ngay. Marketplace tự động có sẵn khi cài đặt và các danh mục của nó được đặt thành `scope=global`, khiến chúng cũng có thể truy cập được cho tất cả tenant.

### Truy cập Marketplace

1. Đi tới **Máy** > **Máy ảo** từ menu bên trái.
2. Nhấp **Mới**.
3. Trong **Chọn loại** ở bảng bên trái, chọn **Marketplace** (hoặc một danh mục cụ thể như "Hệ điều hành (Marketplace)" hoặc "Ứng dụng (Marketplace)").
4. Chọn một công thức từ danh sách và nhấp vào **Tiếp theo** để bắt đầu trả lời các câu hỏi.

### Các công thức hệ điều hành có sẵn

Marketplace bao gồm các công thức cho nhiều hệ điều hành:

| Danh mục             | Các công thức có sẵn                                                                        |
| -------------------- | ------------------------------------------------------------------------------------------- |
| **Ubuntu**           | Server 18.04 (Bionic), 20.04 (Focal), 22.04 (Jammy), 24.04 (Noble) -- các bản phát hành LTS |
| **Tương thích RHEL** | Rocky Linux 8 & 9, AlmaLinux 8 & 9, CentOS 7, CentOS Stream 8                               |
| **Debian**           | Debian 10 (Buster), 11 (Bullseye), 12 (Bookworm), 13 (Trixie)                               |
| **Fedora**           | Fedora 35, 36, 37, 38                                                                       |
| **Amazon**           | Amazon Linux 2 LTS                                                                          |
| **Windows**          | Windows Server 2019 Evaluation, 2022 Evaluation, 2025 Evaluation                            |

{% hint style="success" %}
Các công thức Linux sử dụng **cloud-init** với các cloud image dựng sẵn được tải xuống trong quá trình cấp phát. Các công thức Windows sử dụng **Cloudbase-init** với các ISO đánh giá và thiết lập tự động không cần giám sát. Cả hai cách đều tạo ra một VM đã được cấu hình đầy đủ, có thể khởi động mà không cần cài đặt hệ điều hành thủ công.
{% endhint %}

## Sử dụng công thức Marketplace

Triển khai VM từ một công thức Marketplace tuân theo quy trình hỏi-đáp có hướng dẫn. Dưới đây là một ví dụ điển hình sử dụng công thức Ubuntu Server:

### Hướng dẫn từng bước

1. **Đi tới** thành **Máy** > **Máy ảo** > **Mới**.
2. **Chọn** công thức (ví dụ: "Ubuntu Server 24.04 (Noble Numbat)") từ danh mục Marketplace.
3. **Trả lời các câu hỏi** được hiển thị trong từng phần:

#### Cài đặt phiên bản VM

| Thay đổi theo tình huống | Tên hiển thị                              | Mô tả                                   |
| ------------------------ | ----------------------------------------- | --------------------------------------- |
| `YB_CPU_CORES`           | Số lõi                                    | Số lõi CPU ảo                           |
| `YB_RAM`                 | RAM                                       | Phân bổ bộ nhớ (MB)                     |
| `YB_HOSTNAME`            | Tên máy                                   | hostname của hệ điều hành khách         |
| `SELECT_CREATE_UEFI`     | Bật UEFI                                  | Chế độ khởi động UEFI (khuyến nghị)     |
| `YB_DISABLE_CLOUDINIT`   | Tắt Cloud-init sau lần khởi động đầu tiên | Tùy chọn: `true`, `false`, hoặc `purge` |

#### Cài đặt mạng

| Thay đổi theo tình huống       | Tên hiển thị         | Mô tả                                   |
| ------------------------------ | -------------------- | --------------------------------------- |
| `YB_IP_ADDR_TYPE`              | Loại địa chỉ IP      | `dhcp` hoặc `tĩnh`                      |
| `YB_NIC_ETH0_EXTERNAL_GATEWAY` | Mạng                 | Mạng đích cho NIC chính                 |
| `YB_NIC_ETH0_IP_ADDR`          | Địa chỉ IP           | IP tĩnh (nếu đã chọn tĩnh)              |
| `YB_NIC_ETH0_CIDR`             | CIDR mặt nạ mạng con | ví dụ, `/24`                            |
| `YB_NIC_ETH0_GW`               | Cổng mặc định        | Địa chỉ IP cổng mặc định                |
| `YB_NIC_ETH0_NS`               | Máy chủ tên          | Các máy chủ DNS phân tách bằng dấu phẩy |

#### Cài đặt lưu trữ

| Thay đổi theo tình huống | Tên hiển thị         | Mô tả                       |
| ------------------------ | -------------------- | --------------------------- |
| `YB_DRIVE_OS_SIZE`       | Dung lượng ổ đĩa HĐH | Kích thước đĩa tính bằng GB |
| `SELECT_OS_TIER`         | Tầng ổ đĩa HĐH       | Tầng lưu trữ vSAN ưu tiên   |

#### Tài khoản người dùng

| Thay đổi theo tình huống | Tên hiển thị   | Mô tả                           |
| ------------------------ | -------------- | ------------------------------- |
| `YB_USER`                | Tên người dùng | Tên người dùng quản trị ban đầu |
| `YB_PASSWORD`            | Mật khẩu       | Mật khẩu quản trị ban đầu       |

4. **Nhấp vào Gửi** để tạo VM.
5. Quá trình tự động hóa công thức sẽ chạy -- tạo ổ đĩa, tải xuống cloud image, cấu hình các tệp cloud-init và đặt loại máy.
6. **Bật nguồn** VM. Cloud-init chạy trong lần khởi động đầu tiên để áp dụng cấu hình của bạn (hostname, người dùng, mạng, gói).

## Câu hỏi và biến của công thức

Các câu hỏi của công thức là những khối xây dựng làm cho công thức có thể tùy chỉnh. Mỗi câu hỏi thu thập một giá trị được lưu dưới dạng biến và có thể được tham chiếu trong các script cloud-init, thao tác cơ sở dữ liệu hoặc cấu hình VM.

### Các trường câu hỏi

| Trường               | Mục đích                                                                                                                                                                                                                                 |
| -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Phần**             | Nhóm các câu hỏi liên quan trên biểu mẫu nhập (ví dụ: "Cài đặt phiên bản", "Mạng")                                                                                                                                                       |
| **Tên**              | Tên biến được tham chiếu trong script (chỉ chữ và số, không có khoảng trắng)                                                                                                                                                             |
| **Loại**             | Cách dữ liệu được thu thập; các kiểu phổ biến gồm String, Number, Password, Boolean, List, Hidden, RAM, Disk Size, Network, Cluster, Database Create/Edit/Find, Hostname, Script, Textarea, Virtual IP, Timestamp, Row, Field và Seconds |
| **ID thứ tự**        | Thứ tự hiển thị trong phần                                                                                                                                                                                                               |
| **Hiển thị**         | Nhãn hiển thị cho người dùng trên biểu mẫu nhập                                                                                                                                                                                          |
| **Giá trị mặc định** | Câu trả lời được điền sẵn                                                                                                                                                                                                                |
| **Xác thực regex**   | Biểu thức chính quy để xác thực đầu vào                                                                                                                                                                                                  |
| **Văn bản giữ chỗ**  | Văn bản gợi ý màu xám cho biết định dạng mong đợi                                                                                                                                                                                        |
| **Văn bản tooltip**  | Trợ giúp bật lên khi di chuột                                                                                                                                                                                                            |
| **Văn bản ghi chú**  | Văn bản trợ giúp hiển thị bên dưới trường nhập                                                                                                                                                                                           |
| **Khi thay đổi**     | JavaScript để động hiển thị/ẩn các câu hỏi khác                                                                                                                                                                                          |

### Các câu hỏi được tạo tự động

Khi bạn tạo một công thức từ VM cơ sở, VergeOS sẽ tự động tạo các câu hỏi cho từng ổ đĩa của VM (ví dụ: `YB_DRIVE_1_SIZE`, `YB_DRIVE_2_SERIAL`, `YB_DRIVE_3_NONPERSISTENT`). Một số câu hỏi được tạo tự động bị vô hiệu hóa theo mặc định -- hãy bật chúng từ danh sách Câu hỏi nếu cần.

## Tự động hóa cơ sở dữ liệu

Đằng sau mỗi công thức Marketplace, một tập hợp **các câu hỏi kiểu cơ sở dữ liệu** (Database Create, Database Edit, và Database Find) thực hiện các thao tác tự động trong quá trình cấp phát VM. Những câu hỏi này tương tác trực tiếp với API cơ sở dữ liệu của VergeOS để tạo tài nguyên, tải xuống image và cấu hình phần cứng -- mà không cần bất kỳ can thiệp thủ công nào từ người dùng.

### Các thao tác cơ sở dữ liệu phổ biến

| Thay đổi theo tình huống  | Thao tác                                            |
| ------------------------- | --------------------------------------------------- |
| `CREATE_OS_DRIVE`         | Tạo ổ đĩa ảo HĐH với kích thước và tầng đã chỉ định |
| `YB_DOWNLOAD_WINDOWS_ISO` | Tải xuống Windows ISO từ một URL đã chỉ định        |
| `YB_DOWNLOAD_VIRTIO`      | Tải xuống ISO driver VirtIO cho máy khách Windows   |
| `YB_CREATE_VIRTIO_CD_DL`  | Tạo một CD-ROM ảo và gắn ISO VirtIO                 |
| `GET_CLUSTER_CPU`         | Truy vấn cụm để lấy thông tin model CPU khả dụng    |
| `CHANGE_CLUSTER_CPU`      | Đặt kiểu CPU của VM khớp với cụm                    |
| `EDIT_MACHINE_TYPE`       | Điều chỉnh loại máy của VM (ví dụ: Q35) sau khi tạo |

Các thao tác này sử dụng cùng một REST API mà quản trị viên và các công cụ tự động hóa có thể truy cập. Tác giả công thức có thể thêm các câu hỏi Database tùy chỉnh để tự động hóa bất kỳ thao tác nào được API của VergeOS hỗ trợ -- tạo mạng, đăng ký bản ghi DNS, đặt quy tắc tường lửa, và nhiều hơn nữa.

{% hint style="info" %}
**Bạn đang chuyển từ VMware hay Nutanix?**

Một công thức VergeOS gói gọn mẫu, biểu mẫu tùy chỉnh theo từng phiên bản và tự động hóa cấp phát -- cloud-init/Cloudbase-init, tạo ổ đĩa, thao tác API -- trong một gói tự chứa, nên bạn không cần ghép nối riêng lẻ các công cụ tạo mẫu, tùy chỉnh, quản lý image và điều phối để cấp phát một VM.
{% endhint %}

## Tích hợp Cloud-Init (Linux)

VergeOS tích hợp với **cloud-init**công cụ tiêu chuẩn ngành dùng để tùy chỉnh VM Linux trong lần khởi động đầu tiên. Các công thức tận dụng cloud-init để áp dụng hostname, tài khoản người dùng, cấu hình mạng, cài đặt gói và script tùy chỉnh -- tất cả đều được điều khiển bởi các biến câu hỏi của công thức.

### Cách hoạt động

1. Của VM **Nguồn dữ liệu Cloud-init** được đặt thành **Config Drive v2**.
2. VergeOS tạo một ổ đĩa ảo chứa hai tệp:
   * **`user_data`** -- Các script và chỉ thị cấu hình được thực thi trong lần khởi động đầu tiên
   * **`meta_data.json`** -- Siêu dữ liệu của phiên bản (hostname, UUID, vùng sẵn sàng)
3. Các biến câu hỏi của công thức được chèn vào các tệp này bằng cú pháp mẫu.
4. Trong lần khởi động đầu tiên, cloud-init đọc Config Drive và áp dụng cấu hình.

{% hint style="info" %}
Tính năng **Nguồn dữ liệu Cloud-init** trường cung cấp nhiều hơn một tùy chọn. Các công thức Marketplace sử dụng **Config Drive v2** (nguồn dữ liệu cloud-init tiêu chuẩn), nhưng VergeOS cũng hỗ trợ:

* **Không** — Cloud-init bị vô hiệu hóa cho VM.
* **NoCloud** — một nguồn dữ liệu cloud-init tiêu chuẩn dùng để cấu hình một VM **không có kết nối mạng**.

Cả hai **Config Drive v2** và **NoCloud** đều cung cấp cùng `user_data` / `meta_data` các tệp cho máy khách; hãy chọn **NoCloud** khi máy khách không có mạng trong lần khởi động đầu tiên.
{% endhint %}

### Biến mẫu

Các biến của công thức được chèn vào tệp cloud-init bằng `${VARIABLE_NAME}` cú pháp:

```json
{
  "availability_zone": "${YB_CLUSTER_NAME}",
  "name": "${YB_NAME}",
  "uuid": "${YB_UUID}",
  "hostname": "${YB_NAME}",
  "yb": ${$ALL_VARIABLES}
}
```

Tính năng `${$ALL_VARIABLES}` sẽ mở rộng để bao gồm mọi biến câu hỏi dưới dạng một đối tượng JSON, giúp tất cả câu trả lời của công thức đều có sẵn cho các script cloud-init.  `${$...}` Biểu mẫu này không phải là lỗi đánh máy: bộ máy thay thế quét theo `${...}` cú pháp chuẩn, và `$ALL_VARIABLES` là một tên biến đặc biệt (với một ký tự `$`dẫn đầu theo nghĩa đen) mà bộ hiển thị nhận diện và thay thế bằng toàn bộ tập biến.

### Các định dạng User Data

Tính năng `user_data` tệp hỗ trợ nhiều định dạng script, được xác định bởi dòng đầu tiên:

| Định dạng               | Dòng đầu tiên   | Trường hợp sử dụng                                          |
| ----------------------- | --------------- | ----------------------------------------------------------- |
| **Cloud-config (YAML)** | `#cloud-config` | Cấu hình khai báo (người dùng, gói, tệp, runcmd)            |
| **Script shell**        | `#!/bin/bash`   | Các lệnh shell tùy ý                                        |
| **PowerShell**          | `#ps1`          | Script PowerShell (chủ yếu cho Cloudbase-init trên Windows) |
| **Batch**               | `rem cmd`       | Script batch Windows (Cloudbase-init)                       |

Bộ điều phối dòng đầu tiên ở trên là hành vi tiêu chuẩn của cloud-init/Cloudbase-init, không phải là quy ước riêng của VergeOS -- VergeOS chỉ đơn giản cung cấp `user_data` tệp qua Config Drive v2 và để tác nhân trong máy khách tự diễn giải nó.

#### Ví dụ: Cloud-Config YAML

```yaml
#cloud-config
hostname: ${YB_HOSTNAME}
users:
  - name: ${YB_USER}
    sudo: ALL=(ALL) NOPASSWD:ALL
    shell: /bin/bash
    lock_passwd: false
    passwd: ${YB_PASSWORD_HASH}
packages:
  - qemu-guest-agent
  - curl
runcmd:
  - systemctl enable --now qemu-guest-agent
```

### Ảnh đám mây trực tuyến

Các công thức Linux có thể tải xuống trực tiếp các cloud image dựng sẵn từ các máy nhân bản của bản phân phối. Điều này được cấu hình thông qua các câu hỏi ẩn của công thức:

* **`OS_DL_URL`** (loại: Hidden) -- Tải xuống và lưu đệm image cục bộ (ví dụ, `https://cloud-images.ubuntu.com/releases/noble/release/ubuntu-24.04-server-cloudimg-amd64-disk-kvm.img`)
* **`OS_URL`** (loại: Hidden) -- Truyền image qua web mà không lưu đệm cục bộ

Các cloud image này đã được cài sẵn cloud-init, vì vậy công thức chỉ cần cung cấp `user_data` và `meta_data.json` các tệp để tùy chỉnh.

## Cloudbase-Init (Windows)

Đối với VM Windows, VergeOS sử dụng **Cloudbase-init** -- phiên bản tương đương của cloud-init dành cho Windows. Cloudbase-init đọc cùng một nguồn dữ liệu Config Drive v2 và thực thi các script PowerShell hoặc batch trong lần khởi động đầu tiên.

### Quy trình thiết lập

1. Cài đặt [ứng dụng khách Cloudbase-init](https://cloudbase.it/cloudbase-init/#download) trong VM mẫu Windows.
2. Sysprep VM bằng các tùy chọn unattend của Cloudbase-init.
3. Thiết lập VM **Nguồn dữ liệu Cloud-init** thành **Config Drive v2**.
4. Tạo các câu hỏi của công thức cho các tùy chọn đặc thù Windows (khóa bản quyền, RDP, driver VirtIO).

### Tự động hóa công thức Windows

Các công thức Windows Marketplace tự động hóa toàn bộ chuỗi cấp phát:

1. Tải xuống ISO đánh giá Windows thông qua một câu hỏi Database
2. Tải xuống ISO driver VirtIO
3. Tạo các ổ CD-ROM ảo và gắn cả hai ISO
4. Cấu hình loại máy và cài đặt UEFI
5. Trong lần khởi động đầu tiên, Cloudbase-init áp dụng hostname, thông tin xác thực quản trị, cài đặt RDP và cấu hình mạng

{% hint style="warning" %}
Sau khi cloud-init hoặc Cloudbase-init đã hoàn tất công việc của nó, **xóa các tệp cloud-init** khỏi VM -- đặc biệt nếu bất kỳ script nào có chứa mật khẩu hoặc thông tin nhạy cảm khác.
{% endhint %}

## Tạo công thức tùy chỉnh

Khi các công thức Marketplace không đáp ứng nhu cầu của bạn, bạn có thể tạo công thức tùy chỉnh từ bất kỳ VM hiện có nào.

### Quy trình

1. **Xây dựng VM cơ sở** -- Cài đặt hệ điều hành, ứng dụng và cấu hình mà bạn muốn làm golden image. Tổng quát hóa VM (xóa dữ liệu đặc thù của máy, cài cloud-init hoặc Cloudbase-init).
2. **Tạo công thức** -- Điều hướng đến **Máy ảo** > **Công thức VM mới**.
   * Nếu chưa có danh mục cục bộ nào, bạn sẽ được nhắc tạo một danh mục trước.
3. **Cấu hình các trường của công thức:**

| Trường                           | Mô tả                                                                   |
| -------------------------------- | ----------------------------------------------------------------------- |
| **Tên**                          | Tên mô tả cho công thức                                                 |
| **Mô tả**                        | Tài liệu và hướng dẫn                                                   |
| **Biểu tượng**                   | Biểu tượng Font Awesome để nhận dạng trực quan                          |
| **Danh mục**                     | Vùng chứa tổ chức cho công thức                                         |
| **Máy ảo**                       | VM mẫu cơ sở                                                            |
| **Phiên bản**                    | Bắt đầu từ 1.0.0, tự động tăng khi có thay đổi (1.0.0-1, 1.0.0-2, v.v.) |
| **Dùng tài sản làm tên câu hỏi** | Đặt tên câu hỏi drive/NIC theo số tài sản thay vì thứ tự                |
| **Phụ thuộc phiên bản**          | Các tính năng VergeOS cần có để công thức hoạt động                     |

4. **Xác định các câu hỏi** -- Thêm các phần và câu hỏi để thu thập đầu vào cho từng phiên bản. Cấu hình xác thực, giá trị mặc định, tooltip và logic hiển thị/ẩn có điều kiện.
5. **Cấu hình các tệp cloud-init** -- Viết `user_data` và `meta_data.json` các mẫu tham chiếu đến các biến câu hỏi của bạn.
6. **Mô phỏng công thức** -- Nhấp vào **Mô phỏng công thức** từ bảng điều khiển công thức để kiểm tra biểu mẫu nhập, xác thực các trường và xem trước các tệp đáp án được tạo.
7. **Xuất bản** -- Công thức sẽ khả dụng trong danh mục của nó để tạo các VM mới.

### Chỉnh sửa và xuất bản lại

Khi bạn thay đổi một công thức, nó phải được **xuất bản lại** để các thay đổi có hiệu lực. Bảng điều khiển công thức hiển thị một thông báo với một **Xuất bản lại** liên kết. Sau khi xuất bản lại, các hệ thống từ xa và tenant sẽ được thông báo rằng có bản cập nhật.

### Các phiên bản công thức

Một VM được tạo từ một công thức là một **phiên bản** của công thức đó cho đến khi nó bị xóa hoặc gỡ liên kết. Bạn có thể xem tất cả các phiên bản từ bảng điều khiển công thức. Không thể xóa một công thức khi nó còn các phiên bản liên kết.

{% hint style="info" %}
**Giới hạn được ghi nhận**

Một hệ thống VergeOS hỗ trợ tối đa **1.000 công thức** và **50.000 phiên bản công thức** tổng cộng, với tối đa **10.000 nhật ký công thức cho mỗi công thức** (tự động dọn khi đạt 100 và hết hạn sau 7 ngày). Những giới hạn này cao hơn nhiều so với mức sử dụng thông thường, nhưng đáng biết nếu bạn đang lên kế hoạch cấp phát quy mô lớn theo công thức.
{% endhint %}

## Trao đổi công thức

VergeOS hỗ trợ chia sẻ công thức giữa các hệ thống và tenant thông qua kiến trúc kho lưu trữ và danh mục.

```mermaid
flowchart TD
    REPO["Kho lưu trữ"] --> CAT1["Danh mục 1<br/>(VM Linux)"]
    REPO --> CAT2["Danh mục 2<br/>(VM Windows)"]
    REPO --> CAT3["Danh mục 3<br/>(Ứng dụng)"]
    CAT1 --> R1["Công thức Ubuntu"]
    CAT1 --> R2["Công thức Rocky"]
    CAT2 --> R3["Công thức Win 2022"]
    CAT3 --> R4["Công thức cơ sở dữ liệu"]
    CAT3 --> R5["Công thức máy chủ web"]
```

### Chia sẻ với tenant

1. Đặt **Phạm vi xuất bản** thành **Tenant** (hoặc **Toàn cục** để truy cập bên ngoài).
2. Trong giao diện tenant, điều hướng đến **Nhà cung cấp dịch vụ** kho lưu trữ và nhấp **Làm mới**.
3. Nhấp đúp vào danh mục để duyệt các công thức.
4. Chọn các công thức và nhấp **Tải xuống/Cập nhật** để làm cho chúng khả dụng cục bộ.

### Chia sẻ với hệ thống từ xa

1. Tạo một **người dùng API** trên hệ thống chia sẻ với quyền Liệt kê và Đọc đối với danh mục.
2. Trên hệ thống nhận, tạo một **Kho lưu trữ từ xa** trỏ đến URL của hệ thống chia sẻ với thông tin xác thực của người dùng API.
3. Nhấp **Làm mới** để lấy danh sách danh mục. Tải công thức xuống để sử dụng cục bộ.

### Phạm vi xuất bản

| Phạm vi      | Hiển thị                                                         |
| ------------ | ---------------------------------------------------------------- |
| **Riêng tư** | Chỉ đám mây VergeOS cục bộ                                       |
| **Không**    | Đã tắt -- không khả dụng ở bất kỳ đâu                            |
| **Tenant**   | Đám mây cục bộ và các tenant trực tiếp của nó                    |
| **Toàn cục** | Đám mây cục bộ, tenant và hệ thống từ xa (có thông tin xác thực) |

## Thực hành tốt nhất

### Bắt đầu với Marketplace

Dùng các công thức Marketplace làm điểm khởi đầu. Sao chép chúng vào một danh mục cục bộ và tùy chỉnh thay vì xây dựng từ đầu -- cách này tiết kiệm thời gian và đảm bảo bạn kế thừa các cấu hình đã được kiểm thử.

### Mô phỏng trước khi xuất bản

Luôn mô phỏng một công thức trước khi cho phép người dùng sử dụng. Xác minh rằng việc xác thực trường hoạt động, logic có điều kiện hoạt động đúng, và các tệp cloud-init được tạo chứa các giá trị mong đợi.

### Đánh số phiên bản cho công thức của bạn

Hãy dùng số phiên bản có ý nghĩa và cập nhật chúng khi thực hiện các thay đổi quan trọng. Các hệ thống từ xa và tenant sẽ được thông báo về các bản cập nhật, vì vậy việc đánh số phiên bản rõ ràng giúp theo dõi những gì đã thay đổi.

### Dọn dẹp dữ liệu nhạy cảm

Xóa các tệp cloud-init sau lần khởi động đầu tiên, đặc biệt nếu chúng chứa mật khẩu hoặc thông tin xác thực. Hãy cân nhắc sử dụng `YB_DISABLE_CLOUDINIT` tùy chọn để xóa dữ liệu cloud-init sau khi cấu hình ban đầu.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.verge.io/learn-the-platform/vi/mo-dun-6-may-ao/02-recipes-marketplace.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
