diff --git a/dbHelper/dbController.go b/dbHelper/dbController.go
index 21b47fd1a22bbede0fb37f5aef7d80822e771d0b..913ef9e95057ceccfadd25fdc661958680ad30dc 100644
--- a/dbHelper/dbController.go
+++ b/dbHelper/dbController.go
@@ -1,17 +1,37 @@
 package dbHelper
 
 import (
+	"errors"
 	"fmt"
+	"github.com/caarlos0/env/v6"
 	"gorm.io/driver/postgres"
 	"gorm.io/gorm"
 	"mobwebhf/models"
+	"net/url"
+	"strings"
 )
 
+type PostgresConfig struct {
+	URL      string `env:"DATABASE_URL"`
+	Host     string `env:"POSTGRES_HOST" envDefault:"localhost"`
+	Port     string `env:"POSTGRES_PORT" envDefault:"5432"`
+	User     string `env:"POSTGRES_USER" envDefault:"postgres"`
+	Password string `env:"POSTGRES_PASSWORD" envDefault:"postgres"`
+	Database string `env:"POSTGRES_DB" envDefault:"postgres"`
+}
+
 var Db *gorm.DB
 
 func Dbinit()  {
-	dsn := "host=localhost user=postgres password=almafa port=5432 sslmode=disable TimeZone=Europe/Budapest"
-	var err error
+	c := GetPostgresConfig()
+	// if DATABASE_URL is valid, we will use its constituent values in preference
+	validConfig, err := validPostgresURL(c.URL)
+	if err == nil {
+		c = validConfig
+	}
+
+	dsn := string("host="+ c.Host + " user=" + c.User + " password=" + c.Password + " port=" + c.Port + " sslmode=disabled TimeZone=Europe/Budapest")
+
 	Db, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})
 	if err != nil {
 		panic("failed to connect database")
@@ -26,3 +46,31 @@ func Dbinit()  {
 		fmt.Println("Failed to create table")
 	}
 }
+
+func GetPostgresConfig() *PostgresConfig {
+	c := PostgresConfig{}
+	if err := env.Parse(&c); err != nil {
+		fmt.Printf("%+v\n", err)
+	}
+	return &c
+}
+
+func validPostgresURL(URL string) (*PostgresConfig, error) {
+	if URL == "" || strings.TrimSpace(URL) == "" {
+		return nil, errors.New("database url is blank")
+	}
+
+	validURL, err := url.Parse(URL)
+	if err != nil {
+		return nil, err
+	}
+	c := &PostgresConfig{}
+	c.URL = URL
+	c.Host = validURL.Host
+	c.Database = validURL.Path
+	c.Port = validURL.Port()
+	c.User = validURL.User.Username()
+	c.Password, _ = validURL.User.Password()
+	return c, nil
+}
+
diff --git a/go.mod b/go.mod
index be9c2ee6b7222ff08b0fb208bdb72d892e5e4a7c..c7e3f37725e7f3210d43e0c479463cda7dfae1df 100644
--- a/go.mod
+++ b/go.mod
@@ -9,6 +9,7 @@ require (
 )
 
 require (
+	github.com/caarlos0/env/v6 v6.8.0 // indirect
 	github.com/gin-contrib/sse v0.1.0 // indirect
 	github.com/go-playground/locales v0.13.0 // indirect
 	github.com/go-playground/universal-translator v0.17.0 // indirect
diff --git a/go.sum b/go.sum
index 5ec1d2a170e1e3fa36147bb86e5b8f8170b81ded..a71c0313b3f649e058173bfdeb1a11f034907fb7 100644
--- a/go.sum
+++ b/go.sum
@@ -1,6 +1,8 @@
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc=
 github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
+github.com/caarlos0/env/v6 v6.8.0 h1:abF9JinEXaibthiOowf4uSnRBWN66aJOxSpHLH67jeI=
+github.com/caarlos0/env/v6 v6.8.0/go.mod h1:FE0jGiAnQqtv2TenJ4KTa8+/T2Ss8kdS5s1VEjasoN0=
 github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I=
 github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=