mirror of
https://github.com/btouchard/ackify-ce.git
synced 2026-02-07 22:39:46 -06:00
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:
@@ -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
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user