Cập nhật cấu hình môi trường production và development

- Thêm file .env.prod với cấu hình chi tiết cho môi trường production
- Cập nhật docker-compose.dev.yml và docker-compose.prod.yml
- Tạo Dockerfile.prod với cấu hình chi tiết cho production
- Bổ sung cấu hình nginx, prometheus, grafana
- Thêm cấu hình backup và monitoring
- Cập nhật README với hướng dẫn chi tiết
This commit is contained in:
koh
2025-03-03 16:31:52 +07:00
parent e2a219cacd
commit 86a60a7861
20 changed files with 572 additions and 509 deletions

View File

@@ -3,11 +3,9 @@ package initialize
import (
"fmt"
"os"
"reflect"
"strings"
"github.com/dungnt11/senflow_app/global"
"github.com/fatih/color"
"github.com/joho/godotenv"
)
@@ -63,57 +61,5 @@ func LoadConfig() error {
global.Config.Logger.Compress = strings.ToLower(compress) == "true"
}
printConfig()
return nil
}
func printConfig() {
// Tạo các đối tượng màu sắc
titleColor := color.New(color.FgHiCyan, color.Bold)
sectionColor := color.New(color.FgHiYellow, color.Bold)
keyColor := color.New(color.FgHiGreen)
valueColor := color.New(color.FgHiWhite)
fmt.Println() // Thêm dòng trống ở đầu
// In tiêu đề
titleColor.Println("✨✨✨ CẤU HÌNH ỨNG DỤNG ✨✨✨")
fmt.Println()
// Sử dụng reflection để tự động in tất cả các cấu hình
configValue := reflect.ValueOf(global.Config)
configType := configValue.Type()
// Duyệt qua tất cả các trường của cấu hình
for i := 0; i < configValue.NumField(); i++ {
sectionName := configType.Field(i).Name
sectionValue := configValue.Field(i)
sectionType := sectionValue.Type()
// In tên section
sectionColor.Printf("[%s]\n", strings.ToUpper(sectionName))
// Duyệt qua tất cả các trường của section
for j := 0; j < sectionValue.NumField(); j++ {
fieldName := sectionType.Field(j).Name
fieldValue := sectionValue.Field(j).Interface()
// Ẩn mật khẩu
displayValue := fmt.Sprintf("%v", fieldValue)
if strings.Contains(strings.ToLower(fieldName), "password") {
displayValue = "******** (ẩn)"
}
// In tên trường và giá trị
keyColor.Printf(" %-15s: ", fieldName)
valueColor.Printf("%s\n", displayValue)
}
fmt.Println() // Thêm dòng trống giữa các section
}
// In thông báo thành công
titleColor.Println("✅ Cấu hình đã được tải thành công!")
fmt.Println() // Thêm dòng trống ở cuối
}

View File

@@ -21,6 +21,7 @@ func checkErrorPanic(err error, errString string) {
// InitMysql khởi tạo kết nối đến cơ sở dữ liệu MySQL và trả về đối tượng *gorm.DB.
func InitMysql() *gorm.DB {
m := global.Config.Database
dsn := "%s:%s@tcp(%s:%v)/%s?charset=utf8mb4&parseTime=True&loc=Local"
s := fmt.Sprintf(dsn, m.Username, m.Password, m.Host, m.Port, m.Database)
db, err := gorm.Open(mysql.Open(s), &gorm.Config{

View File

@@ -39,7 +39,7 @@ func Run() {
}
// Khởi tạo router
r := gin.Default()
r := provideRouter()
// Khởi tạo controllers thông qua wire
controllers, err := wire.InitializeControllers()
@@ -80,3 +80,14 @@ func Run() {
global.Logger.Info("Server đã tắt thành công.")
}
func provideRouter() *gin.Engine {
if global.Config.Server.AppEnv == "local" {
gin.SetMode(gin.DebugMode)
gin.ForceConsoleColor()
return gin.Default()
} else {
gin.SetMode(gin.ReleaseMode)
return gin.New()
}
}