Ada dua sumber konfigurasi yang harus tersedia sebelum backend-go bisa jalan. Keduanya tidak sinkron — satu via Viper (.env), satu via konstanta hardcoded di handlers/environtment.go yang di-gitignore.
Prasyarat
| Kebutuhan | Versi |
|---|---|
| Go | 1.22+ (toolchain go1.23.5) |
| Node.js | 18+ (untuk Node engine — terpisah dari Go API) |
| MongoDB | berjalan, port 27017 |
| Redis | untuk BullMQ queue Node engine |
| Air | opsional, untuk hot reload (go install github.com/air-verse/air@latest) |
Sumber 1 — .env (Viper)
Dimuat oleh config/config.go:30-54 via viper.SetConfigFile(".env") + viper.AutomaticEnv(). Jika .env tidak ada, panic (config.go:33-35).
GO_ENV=development # development | production
PORT=8081
APP_URL=
DB_USER=
DB_PASSWORD=
DB_HOST=127.0.0.1
DB_PORT=27017
DB_NAME=dazo
JWT_SECRET= # HARUS sama dengan dazoapp JWT_SECRET
ALLOW_ORIGINS=
ALLOWED_IPS= # comma-separated, mis. "127.0.0.1,10.0.0.5"
AWS_ACCESS_KEY_ID=
AWS_DEFAULT_REGION=
AWS_SECRET_ACCESS_KEY=
AWS_BUCKET=
AWS_URL=Field yang dipakai (config/config.go:9-26)
| Field env | Struct | Tipe | Catatan |
|---|---|---|---|
GO_ENV | GoEnv | string | Menentukan URI MongoDB — lihat Database |
PORT | Port | string | Default 8081 jika kosong (main.go:58) |
DB_USER … DB_NAME | Db* | string/int | Koneksi MongoDB |
JWT_SECRET | JwtSecret | string | Wajib sama dengan dazoapp — lihat Auth & JWT |
ALLOWED_IPS | AllowedIPs | []string | Comma-split (config.go:48) — IP yang skip auth |
AWS_* | Aws* | string | S3 upload (handlers/upload.go) |
Sumber 2 — handlers/environtment.go (gitignored)
File ini berisi konstanta hardcoded yang dipakai ~50+ handler langsung. Tidak dimuat via Viper — di-compile ke dalam binary.
package handlers
const (
DBname string = "dazo"
CrmDBname string = "crm_dazo"
EngineUri string = "http://localhost:5002/api/" // WA gateway
EngineUriCRM string = "http://localhost:5003/" // CRM engine
EngineBot string = "http://localhost:1313/" // chatbot engine
// Kredensial DB — redacted, minta dari tim
username string = "<REDACTED>"
password string = "<REDACTED>"
host string = "<REDACTED>"
port string = "27017"
source string = "admin"
)Split-brain DB name
Ada dua sumber truth untuk nama database:
| Sumber | Nilai | Lokasi pemakaian |
|---|---|---|
handlers/environtment.go const DBname | "dazo" | ~50+ handler |
config.Env.DbName (dari .env DB_NAME) | apa pun di .env | internal/service/chat_service.go:84 |
Jika .env DB_NAME diubah, service rotator tetap pakai "dazo" — potensi bug. Lihat Tech Debt.
Node engine — config terpisah
Node engine (cron + BullMQ worker) memakai config sendiri di engine/:
| File | Status | Isi |
|---|---|---|
engine/config.json | gitignored | Koneksi Mongoose, port, URL engine |
engine/config_md*.json | gitignored | Per-tenant config |
Minta dari tim untuk provisioning per environment. Node engine tidak memakai .env Go.
Langkah setup
# 1. Dependensi Go
go mod tidy
# 2. Environment
cp .env.example .env # jika ada; jika tidak, buat manual dari template di atas
# Isi JWT_SECRET (HARUS sama dengan dazoapp), DB_*, AWS_*
# 3. Buat handlers/environtment.go (lihat sumber 2 di atas)
# Minta dari tim — jangan tulis ulang
# 4. Node engine (terpisah)
cd engine && npm install
# 5. Jalankan
air # atau: go run main.goCatatan
handlers/environtment.gotidak punya.example— berbeda dari.env. File ini harus ada persis sebelumgo build.- Kredensial DB hardcoded di
environtment.gohanya untuk development. Produksi memakaiGO_ENV=productionyang mengubah URI MongoDB (mongo/mongo.go:21-43), tapiusername/passwordconst tetap dipakai untuk auth — konfirmasi ke tim apakah ini sudah diperbaiki. ALLOWED_IPSkosong = tidak ada IP yang skip auth. Isi hanya IP internal terpercaya.
Langkah berikutnya
Setup selesai? Lanjut ke Local Development untuk menjalankan project.