diff --git a/Dockerfile b/Dockerfile index cd59a8f..1ee8853 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.16 as builder +FROM golang:1.22.4-alpine as builder WORKDIR /app @@ -6,7 +6,7 @@ WORKDIR /app COPY . . # Сборка миграционного инструмента -RUN go build -o migrations ./cli/migrations.go +RUN go build -o migrations ./cli/migration.go # Сборка основного приложения @@ -21,9 +21,6 @@ WORKDIR /root/ # Копирование исполняемых файлов из предыдущего шага COPY --from=builder /app/main . COPY --from=builder /app/migrations . - -# Запуск миграций -RUN ./migrations -# Запуск сервера -CMD ["./main"] +COPY entrypoint.sh . +ENTRYPOINT ["./entrypoint.sh"] diff --git a/cli/migration.go b/cli/migration.go index 5c84d1f..4d1f9aa 100644 --- a/cli/migration.go +++ b/cli/migration.go @@ -1,19 +1,29 @@ package main import ( + "fmt" "golang-test/database" + "log" + "os" + "gorm.io/driver/postgres" "gorm.io/gorm" - "log" ) func main() { - dsn := "host=localhost user=posgres password=example dbname=database port=5432 sslmode=disable TimeZone=Asia/Yekaterinburg" + dbHost := os.Getenv("DB_HOST") + dbPort := os.Getenv("DB_PORT") + dbUser := os.Getenv("DB_USER") + dbPassword := os.Getenv("DB_PASSWORD") + dbName := os.Getenv("DB_NAME") + + dsn := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=disable", + dbHost, dbPort, dbUser, dbPassword, dbName) db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { panic("failed to connect database") } - // Migrate the schema + err = db.AutoMigrate(&database.Manufacturer{}, &database.Product{}, &database.User{}) if err != nil { return diff --git a/database/connect.go b/database/connect.go index ef51e11..2209255 100644 --- a/database/connect.go +++ b/database/connect.go @@ -1,6 +1,9 @@ package database import ( + "fmt" + "os" + "gorm.io/driver/postgres" "gorm.io/gorm" ) @@ -8,7 +11,14 @@ import ( var db *gorm.DB func init() { - dsn := "host=localhost user=posgres password=example dbname=database port=5432 sslmode=disable TimeZone=Asia/Yekaterinburg" + dbHost := os.Getenv("DB_HOST") + dbPort := os.Getenv("DB_PORT") + dbUser := os.Getenv("DB_USER") + dbPassword := os.Getenv("DB_PASSWORD") + dbName := os.Getenv("DB_NAME") + + dsn := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=disable", + dbHost, dbPort, dbUser, dbPassword, dbName) conn, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { panic("failed to connect database") diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..0b933fb --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,34 @@ +# Use postgres/example user/password credentials +version: '3.9' + +services: + + db: + image: postgres + restart: always + shm_size: 128mb + + environment: + POSTGRES_PASSWORD: example + POSTGRES_DB: database + POSTGRES_USER: postgres + + + adminer: + image: adminer + restart: always + ports: + - 8000:8080 + + api: + image: ravonzz/go-testapi + restart: always + environment: + DB_HOST: db + DB_PORT: 5432 + DB_USER: postgres + DB_PASSWORD: example + DB_NAME: database + ports: + - 8080:8080 + diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..d3a329c --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,5 @@ +#!/bin/sh +# Запуск миграций +./migrations +# Запуск основного приложения +exec ./main