From c10ab989978c9c4d5fd878955c84f6c870efdd1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=20Tr=C3=B6ger?= Date: Sun, 18 Jan 2026 22:31:29 +0100 Subject: [PATCH] fixed problem, where migrate could not connect to db --- Backend/Dockerfile | 3 ++ Backend/database.go | 24 ++++++++++--- Backend/static/css/styles.css | 63 ----------------------------------- DB/initdb/01_create_user.sh | 1 + Docker/docker-compose.yml | 6 ---- Docker/env.example | 1 - Makefile | 2 +- install.sh | 4 +-- 8 files changed, 27 insertions(+), 77 deletions(-) diff --git a/Backend/Dockerfile b/Backend/Dockerfile index 9b77f06..6f8b46d 100644 --- a/Backend/Dockerfile +++ b/Backend/Dockerfile @@ -17,6 +17,9 @@ FROM alpine:3.22 RUN apk add --no-cache tzdata typst WORKDIR /app COPY --from=build /app/server /app/server + +COPY ../migrations /app/migrations + COPY ./doc/static /doc/static COPY ./doc/templates /doc/templates diff --git a/Backend/database.go b/Backend/database.go index 19ee5be..5ee9ac1 100644 --- a/Backend/database.go +++ b/Backend/database.go @@ -8,6 +8,7 @@ import ( "log/slog" "github.com/golang-migrate/migrate/v4" + "github.com/golang-migrate/migrate/v4/database/postgres" _ "github.com/golang-migrate/migrate/v4/database/postgres" _ "github.com/golang-migrate/migrate/v4/source/file" _ "github.com/lib/pq" @@ -20,19 +21,34 @@ func OpenDatabase() (models.IDatabase, error) { dbPassword := helper.GetEnv("POSTGRES_API_PASS", "password") dbTz := helper.GetEnv("TZ", "Europe/Berlin") - connStr := fmt.Sprintf("postgres://%s:%s@%s:5432/%s?sslmode=disable&TimeZone=%s", dbUser, dbPassword, dbHost, dbName, dbTz) + connStr := fmt.Sprintf( + "host=%s user=%s dbname=%s password=%s sslmode=disable TimeZone=%s", + dbHost, dbUser, dbName, dbPassword, dbTz) + return sql.Open("postgres", connStr) } func Migrate() error { dbHost := helper.GetEnv("POSTGRES_HOST", "localhost") dbName := helper.GetEnv("POSTGRES_DB", "arbeitszeitmessung") - // dbUser := helper.GetEnv("POSTGRES_USER", "api_nutzer") dbPassword := helper.GetEnv("POSTGRES_PASSWORD", "password") dbTz := helper.GetEnv("TZ", "Europe/Berlin") - connStr := fmt.Sprintf("postgres://migrate:%s@%s:5432/%s?sslmode=disable&TimeZone=%s", dbPassword, dbHost, dbName, dbTz) - m, err := migrate.New("file:///migrations", connStr) + connStr := fmt.Sprintf( + "host=%s user=%s dbname=%s password=%s sslmode=disable TimeZone=%s", + dbHost, "migrate", dbName, dbPassword, dbTz) + + db, err := sql.Open("postgres", connStr) + if err != nil { + return err + } + + driver, err := postgres.WithInstance(db, &postgres.Config{}) + if err != nil { + return err + } + + m, err := migrate.NewWithDatabaseInstance("file:///app/migrations", "postgres", driver) if err != nil { return err } diff --git a/Backend/static/css/styles.css b/Backend/static/css/styles.css index 6d0ccdd..4b2dd1d 100644 --- a/Backend/static/css/styles.css +++ b/Backend/static/css/styles.css @@ -205,45 +205,24 @@ .top-0 { top: calc(var(--spacing) * 0); } - .top-1 { - top: calc(var(--spacing) * 1); - } .top-1\/2 { top: calc(1/2 * 100%); } - .top-2 { - top: calc(var(--spacing) * 2); - } .top-2\.5 { top: calc(var(--spacing) * 2.5); } - .top-25 { - top: calc(var(--spacing) * 25); - } - .top-26 { - top: calc(var(--spacing) * 26); - } .top-\[0\.125rem\] { top: 0.125rem; } .right-1 { right: calc(var(--spacing) * 1); } - .right-2 { - right: calc(var(--spacing) * 2); - } .right-2\.5 { right: calc(var(--spacing) * 2.5); } - .left-1 { - left: calc(var(--spacing) * 1); - } .left-1\/2 { left: calc(1/2 * 100%); } - .z-10 { - z-index: 10; - } .z-100 { z-index: 100; } @@ -404,9 +383,6 @@ .h-2 { height: calc(var(--spacing) * 2); } - .h-3 { - height: calc(var(--spacing) * 3); - } .h-3\.5 { height: calc(var(--spacing) * 3.5); } @@ -431,9 +407,6 @@ .w-2 { width: calc(var(--spacing) * 2); } - .w-3 { - width: calc(var(--spacing) * 3); - } .w-3\.5 { width: calc(var(--spacing) * 3.5); } @@ -443,9 +416,6 @@ .w-5 { width: calc(var(--spacing) * 5); } - .w-9 { - width: calc(var(--spacing) * 9); - } .w-9\/10 { width: calc(9/10 * 100%); } @@ -458,9 +428,6 @@ .w-full { width: 100%; } - .flex-shrink { - flex-shrink: 1; - } .flex-shrink-0 { flex-shrink: 0; } @@ -476,21 +443,10 @@ .basis-\[content\] { flex-basis: content; } - .border-collapse { - border-collapse: collapse; - } - .-translate-x-1 { - --tw-translate-x: calc(var(--spacing) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } .-translate-x-1\/2 { --tw-translate-x: calc(calc(1/2 * 100%) * -1); translate: var(--tw-translate-x) var(--tw-translate-y); } - .-translate-y-1 { - --tw-translate-y: calc(var(--spacing) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } .-translate-y-1\/2 { --tw-translate-y: calc(calc(1/2 * 100%) * -1); translate: var(--tw-translate-x) var(--tw-translate-y); @@ -501,9 +457,6 @@ .cursor-pointer { cursor: pointer; } - .resize { - resize: both; - } .scroll-m-2 { scroll-margin: calc(var(--spacing) * 2); } @@ -661,9 +614,6 @@ .bg-red-600 { background-color: var(--color-red-600); } - .mask-repeat { - mask-repeat: repeat; - } .p-1 { padding: calc(var(--spacing) * 1); } @@ -740,16 +690,9 @@ .uppercase { text-transform: uppercase; } - .underline { - text-decoration-line: underline; - } .opacity-0 { opacity: 0%; } - .outline { - outline-style: var(--tw-outline-style); - outline-width: 1px; - } .filter { filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); } @@ -1195,11 +1138,6 @@ syntax: "*"; inherits: false; } -@property --tw-outline-style { - syntax: "*"; - inherits: false; - initial-value: solid; -} @property --tw-blur { syntax: "*"; inherits: false; @@ -1272,7 +1210,6 @@ --tw-border-style: solid; --tw-divide-y-reverse: 0; --tw-font-weight: initial; - --tw-outline-style: solid; --tw-blur: initial; --tw-brightness: initial; --tw-contrast: initial; diff --git a/DB/initdb/01_create_user.sh b/DB/initdb/01_create_user.sh index 9536063..91c3259 100755 --- a/DB/initdb/01_create_user.sh +++ b/DB/initdb/01_create_user.sh @@ -8,6 +8,7 @@ echo "Creating PostgreSQL user and setting permissions... $POSTGRES_USER for API psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL CREATE ROLE migrate LOGIN ENCRYPTED PASSWORD '$POSTGRES_PASSWORD'; GRANT USAGE, CREATE ON SCHEMA public TO migrate; + GRANT CONNECT ON DATABASE arbeitszeitmessung TO migrate; EOSQL # psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL diff --git a/Docker/docker-compose.yml b/Docker/docker-compose.yml index 81cafb5..cec5dd3 100644 --- a/Docker/docker-compose.yml +++ b/Docker/docker-compose.yml @@ -27,10 +27,4 @@ services: - db volumes: - ${LOG_PATH}:/app/logs - - ${MIGRATIONS_PATH}:/migrations:ro restart: unless-stopped - - # document-creator: - # image: git.letsstein.de/tom/arbeitszeitmessung-doc-creator - # container_name: ${TYPST_CONTAINER} - # restart: unless-stopped diff --git a/Docker/env.example b/Docker/env.example index 64f40a6..1a150dd 100644 --- a/Docker/env.example +++ b/Docker/env.example @@ -5,7 +5,6 @@ POSTGRES_API_PASS=password # Postgres API Passwort (fü POSTGRES_PATH=__ROOT__/DB # Datebank Pfad (relativ zu Docker Ordner oder absoluter pfad mit /...) POSTGRES_DB=arbeitszeitmessung # Postgres Datenbank Name POSTGRES_PORT=127.0.0.1:5432 # Postgres Port normalerweise nicht freigegeben. regex:^[0-9]{1,5}$ -MIGRATIONS_PATH=__ROOT__/migrations # Pfad zu DB migrations (wenn nicht verändert wurde, bei default bleiben) TZ=Europe/Berlin # Zeitzone API_TOKEN=dont_access # API Token für ESP Endpoints WEB_PORT=8000 # Port unter welchem Webserver erreichbar ist. regex:^[0-9]{1,5}$ diff --git a/Makefile b/Makefile index 8de2724..dfa2db0 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,7 @@ generateFrontend: backend: generateFrontend login_registry - docker buildx build --platform linux/amd64,linux/arm64 -t ${IMAGE_REGISTRY}/${PACKAGE_OWNER}/arbeitszeitmessung:latest Backend --push + docker buildx build --platform linux/amd64,linux/arm64 -t ${IMAGE_REGISTRY}/${PACKAGE_OWNER}/arbeitszeitmessung-webserver:dev Backend --push # docker buildx build --platform linux/amd64,linux/arm64 -t ${IMAGE_REGISTRY}/${PACKAGE_OWNER}/arbeitszeitmessung:${GIT_COMMIT} Backend //--push test: diff --git a/install.sh b/install.sh index c3c12e6..51c1ed7 100755 --- a/install.sh +++ b/install.sh @@ -123,9 +123,8 @@ echo "Created logs folder at $LOG_PATH" echo -e "\n\n" echo "Start containers with docker compose up -d? [y/N]" -read -r start_containersmkdi +read -r start_containers if [[ "$start_containers" =~ ^[Yy]$ ]]; then - cd Docker docker compose up -d echo "Containers started." @@ -172,6 +171,7 @@ if [[ "$setup_cron" =~ ^[Yy]$ ]]; then ( crontab -l ; echo "$cron_timing $(pwd)/$file" )| awk '!x[$0]++' | crontab - echo "Added entry to crontab: $cron_timing $(pwd)/$file." + sleep 2 done if systemctl is-active --quiet cron.service ; then