Kembali ke blog

MemulaiPanduan

Simpan API key dengan aman: variabel env, .gitignore, perbaikan kebocoran

Jauhkan kunci CheapTokens Anda dari kode dan git: set variabel environment, tambahkan .env ke .gitignore, dan ketahui apa yang harus dilakukan jika kunci bocor.

Oleh CheapTokens TeamDiterbitkan 5 menit baca

Terminal dengan export variabel environment dan baris .gitignore untuk API key
Di halaman ini
  1. Kenapa kunci tidak boleh ada di kode Anda
  2. Langkah 1: taruh kunci di variabel environment
  3. Langkah 2: gunakan file .env tanpa meng-commit-nya
  4. Jika kunci bocor: apa yang harus dilakukan, berurutan
  5. Uji diri Anda

Simpan kunci di variabel environment, bukan di kode Anda, dan jaga agar file .env tidak masuk ke git dengan satu baris di .gitignore. Jika kunci sudah terlanjur berada di tempat publik, tangani kuncinya dulu baru bereskan sisanya: membersihkan riwayat git sementara kunci masih ada di kode dan tools Anda tidak memperbaiki apa pun.

Itulah inti idenya. Panduan ini adalah versi praktiknya (dasar-dasarnya ada di What is an API key): tiga perintah, satu request yang berhasil, dan rencana singkat untuk hari yang buruk.

Kenapa kunci tidak boleh ada di kode Anda#

API key adalah password yang membelanjakan uang Anda. Siapa pun yang memegangnya bisa mengirim request atas saldo Anda, dan layanan tidak bisa membedakan mereka dari Anda.

Cara paling umum kesalahan ini terjadi membosankan. Anda menempelkan kunci ke sebuah skrip agar request pertama berhasil, skripnya jalan, Anda git push, dan repositorinya publik. Atau Anda mengirim file konfigurasi ke rekan kerja. Atau Anda mengambil screenshot error dengan kunci terlihat di sudutnya. Hasilnya selalu sama.

GitHub sangat mengenal pola ini. Secret scanning-nya (GitHub docs, dicek 29 Oktober 2026) menelusuri seluruh riwayat Git di semua branch untuk mencari kredensial yang di-hardcode, juga menelusuri issues, pull request, diskusi, wiki, dan secret gist, lalu memunculkan peringatan saat menemukannya. Artinya menghapus baris itu di commit berikutnya tidak mengubah apa pun: commit lama masih menyimpannya.

Berikut skrip yang sama sebelum dan sesudah.

Bandingkan

Skrip yang sama, kunci dipindahkan keluar dari kode

Kunci di dalam kode

python
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key="<your-key>",  # pasted here: ends up in git
)

Kunci dari environment

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

Versi kedua bisa langsung masuk ke GitHub, chat, atau code review apa adanya. Kuncinya hidup di mesin Anda, di luar file.

Langkah 1: taruh kunci di variabel environment#

Variabel environment adalah nilai bernama yang diberikan terminal Anda ke setiap program yang dijalankannya. Skrip meminta CHEAPTOKENS_API_KEY berdasarkan nama dan tidak pernah tahu dari mana asalnya.

Di macOS dan Linux:

bash
export CHEAPTOKENS_API_KEY="<your-key>"

Di Windows PowerShell:

powershell
setx CHEAPTOKENS_API_KEY "<your-key>"

Dua detail sering bikin orang tersandung. export hanya berlaku untuk jendela terminal itu, jadi agar permanen, tambahkan barisnya ke shell profile Anda (~/.zshrc atau ~/.bashrc). Dan setx tidak mengubah jendela tempat Anda mengetiknya: buka terminal baru sebelum menguji.

Sekarang request lengkap. Ini memakai endpoint yang kompatibel dengan OpenAI, https://api.cheaptokens.dev/v1, dan DeepSeek-V4-Flash dengan id lengkapnya (deepseek-ai/DeepSeek-V4-Flash-0731; ambil id dari dokumentasi CheapTokens, karena nama berbeda antar provider):

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

resp = client.chat.completions.create(
    model="deepseek-ai/DeepSeek-V4-Flash-0731",
    messages=[{"role": "user", "content": "Say hi in five words."}],
)
print(resp.choices[0].message.content)
print(resp.usage)

Sapaan singkat adalah request sekitar 20 token masuk dan 20 keluar, yang dengan harga saat ini adalah $0.0000023 (daftar lengkapnya ada di halaman harga). Jika Anda belum pernah mengirim request pertama, Your first API request with CheapTokens memandu dari nol.

Jawaban model kembali di choices[0].message.content, dan usage menunjukkan token yang dihitung. Kuncinya tidak pernah muncul di file.

Terminal menampilkan perintah .env dan .gitignore
Tiga perintah yang menjaga kunci keluar dari git

Langkah 2: gunakan file .env tanpa meng-commit-nya#

Mengetik export di setiap jendela baru lama-lama melelahkan. File .env menyimpan nilainya di satu tempat, di samping proyek:

text
CHEAPTOKENS_API_KEY=<your-key>

Python membacanya dengan python-dotenv (pip install python-dotenv):

python
from dotenv import load_dotenv
load_dotenv()  # fills os.environ from .env

File itu hanya aman jika git tidak pernah melihatnya. Tambahkan ke .gitignore sebelum commit pertama:

bash
echo ".env" >> .gitignore
git check-ignore -v .env

Jika semuanya benar, perintah kedua mencetak sesuatu seperti .gitignore:1:.env .env: git memberi tahu aturan mana yang mengabaikan file itu. Jika tidak mencetak apa pun, aturannya tidak bekerja. Di Windows, buat .gitignore di editor dengan baris .env, atau gunakan Add-Content .gitignore .env: >> di PowerShell bisa menulis UTF-16, yang mungkin diabaikan git.

Satu jebakan: .gitignore hanya memengaruhi file yang belum dilacak git. Jika .env sudah pernah di-commit, jalankan git rm --cached .env agar git berhenti melacaknya, dan anggap kunci di dalamnya sudah terekspos (lebih lanjut di bawah). Kebiasaan rapi adalah meng-commit .env.example berisi nama variabel dan placeholder alih-alih nilainya, agar rekan kerja tahu apa yang harus diisi.

Jika kunci bocor: apa yang harus dilakukan, berurutan#

Mungkin kunci masuk ke repo publik, mungkin ada di screenshot, mungkin Anda menempelkan seluruh konfigurasi ke thread forum. Urutannya lebih penting daripada kecepatan langkah mana pun.

Panduan GitHub sendiri (halaman yang sama, dicek 29 Oktober 2026) adalah segera rotasi kredensial; menulis ulang riwayat Git bersifat opsional dan sering tidak perlu setelah kredensial dicabut. Orang cenderung melakukannya terbalik: menghabiskan satu jam membersihkan riwayat sementara kuncinya masih berfungsi. Jangan.

Pilih kasus Anda

Apa yang terjadi pada kunci Anda? Pilih kasus yang paling mendekati

Kunci ada di commit yang sekarang publik

Hapus kunci dari kode dulu, beralih ke variabel environment, tambahkan .env ke .gitignore, dan periksa saldo Anda untuk request yang tidak Anda kirim. Membersihkan riwayat adalah nilai tambah setelahnya, bukan bagian yang mendesak.

Kunci ada di screenshot atau file yang dibagikan

Urutan sama: berhenti memakai kunci itu di tools Anda dan pindah ke variabel environment, lalu hapus postingan atau file jika bisa. Screenshot yang dihapus mungkin sudah disalin, jadi jangan mengandalkan penghapusan saja.

Kunci yang sama dipakai di beberapa tools

Telusuri setiap tempat yang menyimpan kunci: shell profile Anda, file .env, tools editor dan terminal, dan arahkan semuanya ke variabel environment, sehingga hanya ada satu tempat untuk diubah. Jika sebuah tool gagal membaca variabelnya, panduan troubleshooting 401/404 menunjukkan seperti apa errornya.

Tiga langkah setelah kebocoran: keluarkan kunci dari kode, perbarui setiap tool, kirim request uji
Kunci keluar dari kode dulu, lalu setiap tool, lalu request uji

Setelah pembersihan, kirim satu request uji kecil, seperti di Langkah 1, dan periksa saldo Anda. Jika ada jawaban dan saldo serta request terlihat normal, pembersihan selesai; pantau saldo selama beberapa hari ke depan. Kunci yang pernah publik harus dianggap terekspos bahkan setelah Anda menghapusnya dari kode, jadi awasi saldo dan jumlah request untuk hal-hal yang tidak Anda kirim, dan jangan pakai ulang kunci itu di tempat baru. Untuk tempat-tempat kunci biasanya berada, lihat Where to plug in your own API key.

Uji diri Anda#

Coba sendiriCoba: hapus variabelnya dan jalankan skripnya. Apa yang Anda lihat?Tampilkan jawaban

Python berhenti dengan KeyError: 'CHEAPTOKENS_API_KEY' sebelum ada request yang keluar dari mesin Anda. Itu kegagalan yang baik: skrip menolak berjalan tanpa kunci alih-alih diam-diam memakai kunci yang ditempel. Jika Anda melihat 401, variabelnya sudah di-set tetapi kuncinya salah; periksa kunci dan alamatnya terhadap panduan 401/404.