1
0

refactor: replace SQLite/GORM with JSON file storage

- Remove GORM and SQLite, use simple JSON file (data/certs.json) for persistence
- CertStore with sync.RWMutex for thread-safe in-memory cache
- All handlers updated to use config.Store instead of config.DB
- Cron job and stats updated accordingly
- go mod tidy removes unused gorm/sqlite dependencies
Dieser Commit ist enthalten in:
2026-05-12 15:27:10 +08:00
Ursprung d0e738e1ef
Commit 3fa77d9bc0
6 geänderte Dateien mit 292 neuen und 164 gelöschten Zeilen
+5 -6
Datei anzeigen
@@ -16,8 +16,8 @@ import (
func main() {
cfg := config.Load()
// Initialize database
config.InitDB(cfg)
// Initialize certificate store (JSON file persistence)
config.InitStore(cfg)
// Setup Gin
gin.SetMode(gin.ReleaseMode)
@@ -62,20 +62,19 @@ func main() {
c := cron.New()
c.AddFunc("0 3 * * *", func() {
log.Println("Running scheduled certificate renewal check...")
var certs []config.Certificate
config.DB.Where("auto_renew = ? AND status = ?", true, "active").Find(&certs)
certs := config.Store.GetActiveWithAutoRenew()
for _, cert := range certs {
if cert.ExpiresAt != nil && time.Until(*cert.ExpiresAt).Hours() < float64(cert.RenewDays*24) {
log.Printf("Auto-renewing certificate for %s (expires %s)", cert.Domain, cert.ExpiresAt.Format(time.RFC3339))
if err := services.RenewCertificate(&cert, cfg); err != nil {
if err := services.RenewCertificate(cert, cfg); err != nil {
cert.Status = "error"
cert.ErrorMessage = "auto renew: " + err.Error()
log.Printf("Auto-renew failed for %s: %v", cert.Domain, err)
} else {
log.Printf("Auto-renew succeeded for %s", cert.Domain)
}
config.DB.Save(&cert)
config.Store.Upsert(cert)
}
}
})