D
Setup

Setup Environment

Dua sumber konfigurasi — .env via Viper dan konstanta hardcoded di handlers/environtment.go yang gitignored. Tanpa keduanya, service tidak jalan.

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

KebutuhanVersi
Go1.22+ (toolchain go1.23.5)
Node.js18+ (untuk Node engine — terpisah dari Go API)
MongoDBberjalan, port 27017
Redisuntuk BullMQ queue Node engine
Airopsional, 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).

plaintext
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 envStructTipeCatatan
GO_ENVGoEnvstringMenentukan URI MongoDB — lihat Database
PORTPortstringDefault 8081 jika kosong (main.go:58)
DB_USER … DB_NAMEDb*string/intKoneksi MongoDB
JWT_SECRETJwtSecretstringWajib sama dengan dazoapp — lihat Auth & JWT
ALLOWED_IPSAllowedIPs[]stringComma-split (config.go:48) — IP yang skip auth
AWS_*Aws*stringS3 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.

go
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:

SumberNilaiLokasi pemakaian
handlers/environtment.go const DBname"dazo"~50+ handler
config.Env.DbName (dari .env DB_NAME)apa pun di .envinternal/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/:

FileStatusIsi
engine/config.jsongitignoredKoneksi Mongoose, port, URL engine
engine/config_md*.jsongitignoredPer-tenant config

Minta dari tim untuk provisioning per environment. Node engine tidak memakai .env Go.

Langkah setup

bash
# 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.go

Catatan

  • handlers/environtment.go tidak punya .example — berbeda dari .env. File ini harus ada persis sebelum go build.
  • Kredensial DB hardcoded di environtment.go hanya untuk development. Produksi memakai GO_ENV=production yang mengubah URI MongoDB (mongo/mongo.go:21-43), tapi username/password const tetap dipakai untuk auth — konfirmasi ke tim apakah ini sudah diperbaiki.
  • ALLOWED_IPS kosong = tidak ada IP yang skip auth. Isi hanya IP internal terpercaya.

Langkah berikutnya

Setup selesai? Lanjut ke Local Development untuk menjalankan project.