---
title: "โครงสร้างพื้นฐาน"
description: "ไม่มีข้อมูลลับในไฟล์คอนฟิก ไม่มีข้อมูลลับในไฟล์ล็อก รองรับ Docker, Kubernetes, Terraform, Ansible, CI/CD และระบบอื่นๆ ทั้งหมด"
lang: th
url: https://clavitor.ai/th/developers/infrastructure
markdown: https://clavitor.ai/th/developers/infrastructure.md
translation_of: https://clavitor.ai/en/developers/infrastructure.md
authoritative: false
publisher: Clavitor LLC
---

> This is the Thai translation of [Infrastructure](https://clavitor.ai/en/developers/infrastructure.md). The original English text is authoritative; where the two differ, the English version prevails.

# โครงสร้างพื้นฐาน: ไม่มีข้อมูลลับในไฟล์คอนฟิก ไม่มีข้อมูลลับในไฟล์ล็อก

รองรับทุกแพลตฟอร์ม ทุกออร์เคสเตรเตอร์ และทุก CI runner พร็อกซีทำงานได้กับทุกระบบที่เรียกใช้ HTTP ส่วน CLI ทำงานได้กับทุกระบบที่เรียกใช้คำสั่งเชลล์ได้ แม้ระบบของคุณจะเก่ากว่าอายุการทำงานของคุณก็ยังคงใช้งานได้

## พร็อกซีคือการผสานรวมที่รองรับทุกระบบ

หากเวิร์กโหลดของคุณเรียกใช้ HTTPS พร็อกซีของ Clavitor จะฉีดข้อมูลรับรองเข้าไปที่เลเยอร์เครือข่าย ไม่ต้องแก้ไขโค้ด ไม่ต้องใช้ SDK และไม่มีข้อมูลลับในตัวแปรสภาพแวดล้อม ไฟล์คอนฟิก หรือไฟล์ล็อก เพียงตั้งค่า `HTTPS_PROXY` โค้ดเดิมของคุณก็จะทำงานได้โดยไม่มีการเปลี่ยนแปลง โดยพร็อกซีจะแปลงการอ้างอิง `clavitor://` ในเฮดเดอร์ของคำขอก่อนที่คำขอจะถูกส่งออกจากเครื่อง

```
$ export HTTPS_PROXY=http://localhost:1983
$ curl -H "Authorization: Bearer clavitor://Stripe API/key" \
  https://api.stripe.com/v1/charges
# The agent never sees sk_live_... — only clavitor:// appears in logs

```

## คอนเทนเนอร์: Docker และ Kubernetes

### Docker Compose

รันพร็อกซีของ Clavitor บนโฮสต์และชี้คอนเทนเนอร์ของคุณไปที่พร็อกซี ข้อมูลรับรองจะถูกฉีดเข้าไปในคำขอขาออกอย่างโปร่งใส โดยไม่มีข้อมูลลับในตัวแปรสภาพแวดล้อมและไม่มีข้อมูลลับถูกฝังลงในอิมเมจ

```
# On the Docker host

$ clavitor-proxy serve &
```

```
# docker-compose.yml — containers route through the host-mode proxy

services:
  app:
    environment:
      - HTTPS_PROXY=http://host.docker.internal:1983
    extra_hosts:
      - "host.docker.internal:host-gateway"
```

หรือใช้ `render` เพื่อแปลงเทมเพลตคอนฟิกเมื่อเริ่มทำงาน:

```
$ clavitor-cli render app.config.template.yml | docker compose -f - up
```

### Kubernetes

สร้างข้อมูลลับจากห้องนิรภัยโดยไม่ต้องฮาร์ดโค้ดค่าต่างๆ ลงในไฟล์ manifest:

```
$ kubectl create secret generic app-secrets \
  --from-literal=db-pass="$(clavitor-cli get 'Production DB' --field password)" \
  --from-literal=api-key="$(clavitor-cli get 'Stripe API' --field key)"
```

สำหรับการฉีดข้อมูลรับรองขณะรันไทม์ ให้ดีพลอยพร็อกซีเป็น sidecar คอนเทนเนอร์ในพ็อดของคุณ คอนเทนเนอร์แอปพลิเคชันจะตั้งค่า `HTTPS_PROXY` ชี้ไปที่ sidecar ข้อมูลรับรองจะถูกแปลงตามคำขอแต่ละรายการ และไม่ถูกจัดเก็บใน etcd เด็ดขาด

## IaC: Terraform, Ansible, Pulumi

### Terraform

แปลงข้อมูลรับรองลงในสภาพแวดล้อมของ provider ก่อนรัน `terraform apply` AWS provider จะอ่านข้อมูลรับรองจากตัวแปรสภาพแวดล้อมมาตรฐาน โดย Clavitor จะป้อนค่าเหล่านี้ inline และไฟล์ .tf จะไม่มีการระบุข้อมูลลับใดๆ

```
$ export AWS_ACCESS_KEY_ID=$(clavitor-cli get "AWS Root" --field access_key_id)
$ export AWS_SECRET_ACCESS_KEY=$(clavitor-cli get "AWS Root" --field secret_key)
$ terraform apply
```

บล็อก `provider "aws" {}` จะยังคงว่างอยู่ในโค้ดของคุณ รูปแบบเดียวกันนี้ใช้ได้กับ Terraform provider ทุกรายการที่รองรับข้อมูลรับรองผ่านตัวแปรสภาพแวดล้อม (ซึ่งก็คือ provider ส่วนใหญ่)

### Ansible

```
- name: Get database password
  command: clavitor-cli get "Production DB" --field password
  register: db_pass
  no_log: true

- name: Configure app
  template:
    src: app.conf.j2
  vars:
    db_password: "{{ db_pass.stdout }}"
```

### Pulumi

```
import { execSync } from 'child_process';
const dbPass = execSync('clavitor-cli get "Production DB" --field password').toString().trim();
new aws.rds.Instance("db", { masterPassword: new pulumi.secret(dbPass) });
```

## CI/CD: GitHub Actions, GitLab CI, Jenkins

โทเค็นจะถูก pipe ผ่าน stdin ในทุกตัวอย่างด้านล่าง เพื่อไม่ให้ไปอยู่ใน `argv` ซึ่งจะช่วยไม่ให้โทเค็นปรากฏใน `/proc/<pid>/cmdline` หรือล็อกการบิลด์

### GitHub Actions

```
- name: Deploy
  env:
    CLAVITOR_TOKEN: ${{ secrets.CLAVITOR_TOKEN }}
  run: |
    echo "$CLAVITOR_TOKEN" | clavitor-cli init
    kubectl create secret generic app-secrets \
      --from-literal=api-key="$(clavitor-cli get 'Deploy Token' --field key)" \
      --dry-run=client -o yaml | kubectl apply -f -
```

### GitLab CI

```
deploy:
  script:
    - echo "$CLAVITOR_TOKEN" | clavitor-cli init
    - clavitor-cli get "Deploy Key" --field private_key | ssh-add -
    - ssh deploy@production "systemctl restart app"
```

### Jenkins

```
pipeline {
  stages {
    stage('Deploy') {
      steps {
        sh 'echo "$CLAVITOR_TOKEN" | clavitor-cli init'
        sh 'clavitor-cli get "Deploy Key" --field private_key | ssh-add -'
        sh 'ssh deploy@production "systemctl restart app"'
      }
    }
  }
}
```

## SSH: คีย์ที่จัดเก็บในห้องนิรภัย

```
$ clavitor-cli get "Deploy Key" --field private_key | ssh-add -
$ ssh deploy@production
```

คีย์ส่วนตัวจะถูก pipe เข้าไปที่ `ssh-add` โดยตรง คีย์จะไม่ถูกเขียนลงดิสก์ ไม่ปรากฏในประวัติคำสั่งเชลล์ และจะถูกล้างออกจากเอเจนต์เมื่อเซสชันสิ้นสุดลง

## ระบบ Legacy: หากรับส่ง HTTP ได้ ก็ใช้งานได้

พร็อกซีไม่ได้สนใจว่าคำขอถูกสร้างมาจากภาษาใด ไม่ว่าจะเป็น COBOL, FORTRAN, Perl, Visual Basic หรือแบทช์จ็อบอายุ 30 ปี หากโปรเซสนั้นส่งคำขอ HTTPS พร็อกซีจะดักจับ แปลงการอ้างอิง `clavitor://` และฉีดข้อมูลรับรองจริงเข้าไป โดยไม่ต้องแก้ไขโค้ดใดๆ

สำหรับระบบที่ไม่สามารถเรียกใช้ HTTP ได้ ให้ใช้ `clavitor-cli render` เพื่อแปลงเทมเพลตคอนฟิกก่อนที่โปรเซสจะเริ่มทำงาน เทมเพลตสามารถจัดเก็บได้อย่างปลอดภัยในทุกที่ ผลลัพธ์ที่แปลงแล้วจะถูกส่งไปยัง stdin หรือไฟล์ชั่วคราวที่มีการจำกัดสิทธิ์การเข้าถึง

```
# Resolve credentials before the batch job starts

$ clavitor-cli render db-connect.template.cfg > /tmp/db-connect.cfg
$ chmod 600 /tmp/db-connect.cfg
$ /opt/legacy/batch-job --config /tmp/db-connect.cfg
$ rm /tmp/db-connect.cfg
```

## รูปแบบการใช้งานจะเหมือนเดิมเสมอ

CLI สำหรับสคริปต์และไปป์ไลน์ พร็อกซีสำหรับเวิร์กโหลด HTTP และ Render สำหรับไฟล์คอนฟิก ทุกข้อมูลลับจะถูกแปลงขณะรันไทม์และไม่ถูกจัดเก็บไว้
[เริ่มต้นใช้งานฟรี](https://clavitor.ai/th/checkout)
[ภาพรวมสำหรับนักพัฒนา →](https://clavitor.ai/th/developers)
