fix: correct Docker migration service configuration

- Fix ackify-migrate service to run migrate binary instead of main server
- Add entrypoint override to bypass default ENTRYPOINT in Docker image
- Copy migrations directory to Docker image for migrate binary access
- Update migrate binary with better error handling and code quality
This commit is contained in:
Benjamin
2025-09-15 16:52:48 +02:00
parent 54aa967e79
commit ee64839bc8
3 changed files with 19 additions and 8 deletions

View File

@@ -58,6 +58,7 @@ COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
WORKDIR /app
COPY --from=builder /app/ackify /app/ackify
COPY --from=builder /app/migrate /app/migrate
COPY --from=builder /app/migrations /app/migrations
# Use non-root user (already set in distroless image)
# USER 65532:65532

View File

@@ -1,12 +1,14 @@
package main
import (
"errors"
"flag"
"fmt"
"log"
"os"
"database/sql"
"github.com/golang-migrate/migrate/v4"
"github.com/golang-migrate/migrate/v4/database/postgres"
_ "github.com/golang-migrate/migrate/v4/source/file"
@@ -35,7 +37,9 @@ func main() {
if err != nil {
log.Fatal("Cannot connect to database:", err)
}
defer db.Close()
defer func(db *sql.DB) {
_ = db.Close()
}(db)
// Create postgres driver
driver, err := postgres.WithInstance(db, &postgres.Config{})
@@ -52,17 +56,17 @@ func main() {
switch command {
case "up":
err = m.Up()
if err != nil && err != migrate.ErrNoChange {
if err != nil && !errors.Is(err, migrate.ErrNoChange) {
log.Fatal("Migration up failed:", err)
}
fmt.Println("CE migrations applied successfully")
case "down":
steps := 1
if len(args) > 1 {
fmt.Sscanf(args[1], "%d", &steps)
_, _ = fmt.Sscanf(args[1], "%d", &steps)
}
err = m.Steps(-steps)
if err != nil && err != migrate.ErrNoChange {
if err != nil && !errors.Is(err, migrate.ErrNoChange) {
log.Fatal("Migration down failed:", err)
}
fmt.Printf("CE migrations rolled back %d steps\n", steps)
@@ -98,7 +102,7 @@ func printUsage() {
fmt.Println(" -migrations-path string Path to migrations (default: file://migrations)")
fmt.Println()
fmt.Println("Examples:")
fmt.Println(" go run cmd/migrate/main.go up")
fmt.Println(" go run cmd/migrate/main.go down 2")
fmt.Println(" go run cmd/migrate/main.go version")
fmt.Println(" migrate up")
fmt.Println(" migrate down 2")
fmt.Println(" migrate version")
}

View File

@@ -5,13 +5,19 @@ services:
image: btouchard/ackify-ce
container_name: ackify-ce-migrate
environment:
APP_BASE_URL: "${APP_BASE_URL}"
APP_ORGANISATION: "${APP_ORGANISATION}"
OAUTH_PROVIDER: "${OAUTH_PROVIDER}"
OAUTH_CLIENT_ID: "${OAUTH_CLIENT_ID}"
OAUTH_CLIENT_SECRET: "${OAUTH_CLIENT_SECRET}"
DB_DSN: "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@ackify-db:5432/${POSTGRES_DB}?sslmode=disable"
depends_on:
ackify-db:
condition: service_healthy
networks:
- internal
command: ["./migrate"]
command: ["/app/migrate", "up"]
entrypoint: []
restart: "no"
ackify-ce: