Study
Vapor

Environment & Konfigurasi

Penjelasan

Aplikasi production butuh nilai konfigurasi yang berbeda antar environment (development, testing, production) — misalnya credential database, secret key, atau URL layanan eksternal. Vapor menyediakan Environment.get("NAMA_VAR") untuk membaca variabel environment sistem operasi, biasanya dipanggil di configure.swift saat aplikasi pertama kali disiapkan. Pola umumnya: baca nilai dengan Environment.get("DATABASE_URL"), beri nilai fallback yang masuk akal untuk development lokal lewat ?? "nilai-default", lalu gunakan hasilnya untuk mengonfigurasi koneksi database, App.environment juga dipakai untuk cabang logic berbeda per environment, misalnya app.environment == .production untuk menonaktifkan logging verbose.

Contoh Konsep

import Fluent
import FluentPostgresDriver
import Vapor

public func configure(_ app: Application) throws {
    let dbHost = Environment.get("DATABASE_HOST") ?? "localhost"
    let dbUser = Environment.get("DATABASE_USERNAME") ?? "vapor"
    let dbPassword = Environment.get("DATABASE_PASSWORD") ?? "password"
    let dbName = Environment.get("DATABASE_NAME") ?? "vapor_database"

    app.databases.use(.postgres(
        hostname: dbHost,
        username: dbUser,
        password: dbPassword,
        database: dbName
    ), as: .psql)

    if app.environment == .production {
        app.logger.logLevel = .warning
    }
}

// Di terminal (development): export DATABASE_HOST=127.0.0.1
// Nilai rahasia seperti $DATABASE_PASSWORD sebaiknya TIDAK ditulis
// langsung di kode, cukup lewat environment variable server.

Praktikum

Tulis kode yang membaca Environment.get("APP_SECRET") dengan default "secret-dev-saja", lalu simpan ke konstanta appSecret dan cetak lewat app.logger.info("Secret dimuat").

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Jangan pernah commit file .env berisi credential production ke git — gunakan .env.example sebagai template tanpa nilai asli, dan atur variabel environment sungguhan lewat panel hosting/server, bukan file yang ikut ter-versionkan.