NEWAuto-scale sesuai traffic
Bonus 25%!0h
Detail
environment variablessecretssecuritybest practiceproduction

Environment Variables & Secret Management: Best Practices untuk Production

Tim Helipod

5 menit baca

Cara mengelola environment variables dan secrets dengan aman di production — dari .env files sampai secret management tools.

Environment variables adalah cara paling umum untuk mengelola konfigurasi antara environment development dan production. Tapi banyak developer salah menanganannya — dan ini bisa berakibat fatal.

Artikel ini menjelaskan best practices untuk mengelola environment variables dan secrets di production.

Apa itu Environment Variables?

Environment variables adalah key-value pairs yang tersedia di luar codebase. Mereka digunakan untuk:

  • Database credentials — username, password, host
  • API keys — Stripe, SendGrid, Cloudflare
  • Application config — PORT, NODE_ENV, APP_URL
  • Secret keys — JWT secret, encryption keys
# Contoh environment variables
DATABASE_URL=postgresql://user:pass@localhost:5432/myapp
API_KEY=sk_live_abc123def456
JWT_SECRET=my-super-secret-key
NODE_ENV=production
PORT=3000

Kesalahan Umum

1. Menyimpan Secrets di Code

// ❌ JANGAN PERNAH lakukan ini
const apiKey = "sk_live_abc123def456";
const dbPassword = "supersecretpassword";

Bahaya:

  • Secret ter-expose di version control (GitHub)
  • Siapa saja yang clone repo bisa melihat secret
  • Secret tetap ada di git history meskipun sudah dihapus dari code

2. Commit .env File

# ❌ JANGAN commit .env file
git add .env
git commit -m "add env"

Bahaya:

  • Semua secrets ter-expose di repository
  • Git history menyimpan versi lama yang mungkin punya secrets berbeda
  • Sangat sulit menghapus secrets dari git history

3. Share Secrets via Chat/Email

# ❌ JANGAN share secrets via chat
"Hey, password database production adalah: supersecretpassword123"

Bahaya:

  • Chat bisa di-forward atau screenshot
  • Tidak ada audit trail
  • Secrets tersimpan di server chat

4. Hardcode di Docker Compose

# ❌ JANGAN hardcode di docker-compose.yml
services:
  app:
    environment:
      - DB_PASSWORD=supersecretpassword
      - API_KEY=sk_live_abc123def456

Bahaya:

  • docker-compose.yml sering di-commit ke repository
  • Secrets ter-expose di version control

Best Practices

1. Pisahkan .env dari Code

my-app/
├── .env              ← JANGAN commit
├── .env.example      ← Commit (tanpa values)
├── .gitignore        ← Tambahkan .env
├── src/
└── package.json

.env.example berisi keys tanpa values — sebagai dokumentasi bagi developer lain:

# .env.example
DATABASE_URL=
API_KEY=
JWT_SECRET=
NODE_ENV=development
PORT=3000

2. Gunakan .gitignore

# .gitignore
.env
.env.local
.env.production
.env.*.local

3. Gunakan Secret Management Tools

Untuk production, gunakan secret management tools:

Tool Description
Helipod Dashboard Kelola secrets langsung dari UI
Vault (HashiCorp) Enterprise secret management
AWS Secrets Manager Secret management di AWS
Doppler Secret management untuk development teams

Di Helipod, kamu bisa mengatur environment variables langsung dari dashboard — secrets tidak pernah muncul di code atau build logs.

4. Gunakan Naming Convention

Konsisten dalam penamaan environment variables:

# ✅ Konsisten — UPPER_SNAKE_CASE
DATABASE_URL=postgresql://...
API_KEY=sk_live_...
JWT_SECRET=abc123...

# ❌ Tidak konsisten
databaseUrl=postgresql://...
api_key=sk_live_...
JwtSecret=abc123...

5. Gunakan Prefix untuk Grouping

# Database
DATABASE_URL=postgresql://...
DATABASE_POOL_SIZE=10

# Redis
REDIS_URL=redis://...
REDIS_CACHE_TTL=3600

# API Keys
STRIPE_SECRET_KEY=sk_live_...
SENDGRID_API_KEY=SG.xxx...

# App Config
APP_URL=https://myapp.com
APP_ENV=production
APP_DEBUG=false

6. Jangan Log Secrets

// ❌ JANGAN log secrets
console.log('Database URL:', process.env.DATABASE_URL);
console.log('API Key:', process.env.API_KEY);

// ✅ Log hanya metadata
console.log('Database connected:', { host: dbHost, name: dbName });
console.log('API initialized:', { provider: 'stripe' });

7. Rotasi Secrets secara Berkala

- Database password: rotasi setiap 90 hari
- API keys: rotasi jika ada suspected breach
- JWT secret: rotasi setiap 6 bulan
- Encryption keys: rotasi setiap tahun

8. Gunakan Least Privilege Principle

# ❌ Database user dengan full akses
DATABASE_URL=postgresql://admin:pass@host/db

# ✅ Database user dengan akses terbatas
DATABASE_URL=postgresql://app_user:pass@host/db
# app_user hanya punya SELECT, INSERT, UPDATE, DELETE
# Tidak punya DROP, ALTER, CREATE

9. Backup Secrets

- Simpan backup secrets di password manager (1Password, Bitwarden)
- Jangan simpan backup di tempat yang sama dengan application
- Pastikan tim bisa mengakses backup jika ada emergency

10. Audit Trail

- Catat siapa yang mengubah environment variables
- Kapan perubahan dilakukan
- Perubahan apa yang dilakukan

Di Helipod, semua perubahan environment variables tercatat di audit log.

Environment Variables di Helipod

Helipod menyediakan cara yang aman untuk mengelola environment variables:

Cara Mengatur

  1. Buka dashboard → pilih project
  2. Tab Variables
  3. Tambahkan key-value pairs
  4. Klik Save

Keamanan

  • Secrets dienkripsi at rest
  • Secrets tidak muncul di build logs
  • Secrets di-inject langsung ke container saat runtime
  • Semua perubahan tercatat di audit log

Best Practice di Helipod

# ✅ Gunakan environment variables untuk semua konfigurasi
DATABASE_URL=postgresql://user:pass@postgres-db:5432/myapp
REDIS_URL=redis://redis-cache:6379
JWT_SECRET=your-secure-random-string
APP_URL=https://your-app.helipod.app

# ✅ Gunakan different values untuk different environments
# Development
DATABASE_URL=postgresql://dev:dev@localhost:5432/myapp_dev

# Production
DATABASE_URL=postgresql://prod:secure@postgres-db:5432/myapp

Cara Cek Secrets yang Bocor

1. Cek GitHub

# Cari secrets yang mungkin ter-expose
git log --all --full-history --source -- "*.env"
git log -p --all -S "API_KEY"

2. Gunakan GitHub Secret Scanning

GitHub secara otomatis mendeteksi secrets yang ter-expose di repository public.

3. Cek Have I Been Pwned

# Cek apakah email/password kamu ada di breach
# https://haveibeenpwned.com

4. Gunakan TruffleHog

# Scan repository untuk secrets
trufflehog filesystem ./my-repo

Checklist Security

  • .env file tidak di-commit ke repository
  • .gitignore mencantumkan .env
  • Secrets tidak di-hardcode di code
  • Secrets tidak di-log
  • Secrets dirotasi secara berkala
  • Database user punya akses minimal
  • Backup secrets tersedia di tempat aman
  • Audit trail aktif
  • GitHub Secret Scanning aktif
  • TruffleHog atau similar tool digunakan

Kesimpulan

Mengelola environment variables dan secrets dengan benar adalah bagian penting dari security production. Dengan mengikuti best practices di atas, kamu bisa mengurangi risiko secret leakage dan menjaga aplikasi tetap aman.

Di Helipod, secrets kamu aman — dienkripsi, tidak ter-expose di build logs, dan tercatat di audit log.

Mulai deploy di helipod.io — tidak perlu kartu kredit.

Punya pertanyaan? Hubungi kami di support@helipod.id atau bergabung ke komunitas di hangar.helipod.io.

Siap coba Helipod?

Deploy aplikasi kamu sekarang. Gratis, tanpa kartu kredit.

Mulai Gratis →