mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-06-18 18:16:26 +00:00
Convert db backend to use Gorm, with basis for support
for Mysql and Postgres in addition to existing Sqlite
This commit is contained in:
16
backend/internal/config/acmesh.go
Normal file
16
backend/internal/config/acmesh.go
Normal file
@ -0,0 +1,16 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type acmesh struct {
|
||||
Home string `json:"home" envconfig:"optional,default=/data/.acme.sh"`
|
||||
ConfigHome string `json:"config_home" envconfig:"optional,default=/data/.acme.sh/config"`
|
||||
CertHome string `json:"cert_home" envconfig:"optional,default=/data/.acme.sh/certs"`
|
||||
}
|
||||
|
||||
// GetWellknown returns the well known path
|
||||
func (a *acmesh) GetWellknown() string {
|
||||
return fmt.Sprintf("%s/.well-known", a.Home)
|
||||
}
|
79
backend/internal/config/db.go
Normal file
79
backend/internal/config/db.go
Normal file
@ -0,0 +1,79 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
DatabaseSqlite = "sqlite"
|
||||
DatabasePostgres = "postgres"
|
||||
DatabaseMysql = "mysql"
|
||||
)
|
||||
|
||||
type db struct {
|
||||
Driver string `json:"driver" envconfig:"optional,default=sqlite"`
|
||||
Host string `json:"host" envconfig:"optional,default="`
|
||||
Port int `json:"port" envconfig:"optional,default="`
|
||||
Username string `json:"username" envconfig:"optional,default="`
|
||||
Password string `json:"password" envconfig:"optional,default="`
|
||||
Name string `json:"name" envconfig:"optional,default="`
|
||||
SSLMode string `json:"sslmode" envconfig:"optional,default=deisable"`
|
||||
}
|
||||
|
||||
// GetDriver returns the lowercase driver name
|
||||
func (d *db) GetDriver() string {
|
||||
return strings.ToLower(d.Driver)
|
||||
}
|
||||
|
||||
// GetGormConnectURL is used by Gorm
|
||||
func (d *db) GetGormConnectURL() string {
|
||||
switch d.GetDriver() {
|
||||
case DatabaseSqlite:
|
||||
return fmt.Sprintf("%s/nginxproxymanager.db", Configuration.DataFolder)
|
||||
case DatabasePostgres:
|
||||
return fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%d sslmode=%s TimeZone=UTC",
|
||||
d.Host,
|
||||
d.Username,
|
||||
d.Password,
|
||||
d.Name,
|
||||
d.Port,
|
||||
d.SSLMode,
|
||||
)
|
||||
case DatabaseMysql:
|
||||
return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
|
||||
d.Username,
|
||||
d.Password,
|
||||
d.Host,
|
||||
d.Port,
|
||||
d.Name,
|
||||
)
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// GetDBMateConnectURL is used by Dbmate
|
||||
func (d *db) GetDBMateConnectURL() string {
|
||||
switch d.GetDriver() {
|
||||
case DatabaseSqlite:
|
||||
return fmt.Sprintf("sqlite:%s/nginxproxymanager.db", Configuration.DataFolder)
|
||||
case DatabasePostgres:
|
||||
return fmt.Sprintf("postgres://%s:%s@%s:%d/%s?sslmode=%s",
|
||||
d.Username,
|
||||
d.Password,
|
||||
d.Host,
|
||||
d.Port,
|
||||
d.Name,
|
||||
d.SSLMode,
|
||||
)
|
||||
case DatabaseMysql:
|
||||
return fmt.Sprintf("mysql://%s:%s@%s:%d/%s",
|
||||
d.Username,
|
||||
d.Password,
|
||||
d.Host,
|
||||
d.Port,
|
||||
d.Name,
|
||||
)
|
||||
}
|
||||
return ""
|
||||
}
|
@ -1,7 +1,6 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"npm/internal/logger"
|
||||
)
|
||||
|
||||
@ -30,22 +29,12 @@ type log struct {
|
||||
Format string `json:"format" envconfig:"optional,default=nice"`
|
||||
}
|
||||
|
||||
type acmesh struct {
|
||||
Home string `json:"home" envconfig:"optional,default=/data/.acme.sh"`
|
||||
ConfigHome string `json:"config_home" envconfig:"optional,default=/data/.acme.sh/config"`
|
||||
CertHome string `json:"cert_home" envconfig:"optional,default=/data/.acme.sh/certs"`
|
||||
}
|
||||
|
||||
// Configuration is the main configuration object
|
||||
var Configuration struct {
|
||||
DataFolder string `json:"data_folder" envconfig:"optional,default=/data"`
|
||||
DisableIPV4 bool `json:"disable_ipv4" envconfig:"optional"`
|
||||
DisableIPV6 bool `json:"disable_ipv6" envconfig:"optional"`
|
||||
Acmesh acmesh `json:"acmesh"`
|
||||
DB db `json:"db"`
|
||||
Log log `json:"log"`
|
||||
}
|
||||
|
||||
// GetWellknown returns the well known path
|
||||
func (a *acmesh) GetWellknown() string {
|
||||
return fmt.Sprintf("%s/.well-known", a.Home)
|
||||
}
|
||||
|
Reference in New Issue
Block a user