---
title: "Infrastruktur"
description: "Nol rahasia dalam konfigurasi. Nol rahasia dalam log. Docker, Kubernetes, Terraform, Ansible, CI/CD, dan lainnya."
lang: id
url: https://clavitor.ai/id/developers/infrastructure
markdown: https://clavitor.ai/id/developers/infrastructure.md
translation_of: https://clavitor.ai/en/developers/infrastructure.md
authoritative: false
publisher: Clavitor LLC
---

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

# Infrastruktur: Nol rahasia dalam konfigurasi. Nol rahasia dalam log.

Setiap platform, setiap orkestrator, setiap runner CI. Proksi bekerja dengan apa pun yang melakukan panggilan HTTP. CLI bekerja dengan apa pun yang dapat memanggil shell. Jika sistem Anda lebih tua dari karier Anda, sistem tersebut tetap berfungsi.

## Proksi adalah integrasi universal.

Jika beban kerja Anda melakukan panggilan HTTPS, proksi Clavitor menginjeksikan kredensial pada lapisan jaringan. Tanpa perubahan kode. Tanpa SDK. Tanpa rahasia dalam variabel lingkungan, file konfigurasi, atau log. Atur `HTTPS_PROXY` dan kode Anda yang sudah ada berfungsi tanpa perubahan — proksi menyelesaikan referensi `clavitor://` di header permintaan sebelum permintaan meninggalkan mesin.

```
$ 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

```

## Kontainer: Docker dan Kubernetes

### Docker Compose

Jalankan proksi Clavitor pada host dan arahkan kontainer Anda ke sana. Kredensial diinjeksikan secara transparan ke dalam permintaan keluar — tanpa rahasia dalam variabel lingkungan, tanpa rahasia yang disematkan ke dalam image.

```
# 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"
```

Atau gunakan `render` untuk menyelesaikan templat konfigurasi saat startup:

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

### Kubernetes

Buat rahasia dari brankas tanpa mengodekan nilai secara permanen dalam manifes:

```
$ 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)"
```

Untuk injeksi kredensial saat runtime, terapkan proksi sebagai kontainer sidecar di pod Anda. Kontainer aplikasi menyetel `HTTPS_PROXY` ke sidecar. Kredensial diselesaikan per permintaan, tidak pernah disimpan di etcd.

## IaC: Terraform, Ansible, Pulumi

### Terraform

Meresolve kredensial ke lingkungan provider sebelum `terraform apply`. Provider AWS membaca kredensialnya dari variabel lingkungan standar — Clavitor mengisinya secara inline, file .tf tidak menyebutkan rahasia apa pun.

```
$ 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
```

Blok `provider "aws" {}` tetap kosong dalam kode Anda. Pola yang sama berfungsi untuk provider Terraform apa pun yang mendukung kredensial env-var (yang merupakan sebagian besar 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

Token dialirkan melalui stdin di setiap contoh di bawah — menjaganya agar tidak masuk ke `argv` sehingga tidak muncul di `/proc/<pid>/cmdline` atau log build.

### 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: Kunci yang disimpan di brankas

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

Kunci pribadi dialirkan langsung ke `ssh-add`. Kunci tersebut tidak pernah menyentuh disk, tidak pernah muncul dalam riwayat shell, dan dihapus dari agen saat sesi berakhir.

## Sistem lama: Jika melakukan panggilan HTTP, sistem tersebut berfungsi.

Proksi tidak mempermasalahkan bahasa apa yang membuat permintaan. COBOL, FORTRAN, Perl, Visual Basic, pekerjaan batch berusia 30 tahun — jika proses tersebut membuat permintaan HTTPS, proksi mencegatnya, menyelesaikan referensi `clavitor://`, dan menginjeksikan kredensial yang sebenarnya. Tidak diperlukan perubahan kode.

Untuk sistem yang tidak dapat melakukan panggilan HTTP, gunakan `clavitor-cli render` untuk menyelesaikan templat konfigurasi sebelum proses dimulai. Templat aman untuk disimpan di mana saja. Output yang telah diproses dikirim ke stdin atau file sementara dengan izin terbatas.

```
# 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
```

## Polanya selalu sama.

CLI untuk skrip dan pipeline. Proksi untuk beban kerja HTTP. Render untuk file konfigurasi. Setiap rahasia diselesaikan saat runtime, tidak pernah disimpan.
[Mulai gratis](https://clavitor.ai/id/checkout)
[Tinjauan pengembang →](https://clavitor.ai/id/developers)
