Merge pull request #2 from SamuelTariku/1-docker-container-fix

1 docker container fix
This commit is contained in:
Kidus Alemayehu 2025-05-11 19:32:57 -04:00 committed by GitHub
commit 221fed90e9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 77 additions and 13 deletions

17
Dockerfile Normal file
View File

@ -0,0 +1,17 @@
# Builder stage
FROM golang:1.24-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -ldflags="-s -w" -o ./bin/web ./cmd/main.go
# Runner stage
FROM alpine:3.21 AS runner
WORKDIR /app
COPY .env .
COPY --from=builder /app/bin/web /app/bin/web
RUN apk add --no-cache ca-certificates
EXPOSE ${PORT}
CMD ["/app/bin/web"]

View File

@ -1,3 +1,5 @@
version: '3.9'
services:
postgres:
image: postgres:16-alpine
@ -14,6 +16,7 @@ services:
interval: 5s
timeout: 3s
retries: 5
migrate:
image: migrate/migrate
volumes:
@ -32,6 +35,34 @@ services:
networks:
- app
app:
build:
context: .
dockerfile: Dockerfile
target: runner
ports:
- ${PORT}:8080
environment:
- DB_URL=postgresql://root:secret@postgres:5432/gh?sslmode=disable
depends_on:
migrate:
condition: service_completed_successfully
networks:
- app
command: ["/app/bin/web"]
test:
build:
context: .
dockerfile: Dockerfile
target: builder
volumes:
- .:/app
command: ["tail", "-f", "/dev/null"]
networks:
- app
networks:
app:
driver: bridge
driver: bridge

View File

@ -1,41 +1,57 @@
include .env
.PHONY: test
test:
@go test ./app
@docker compose up -d test
@docker compose exec test go test ./...
@docker compose stop test
.PHONY: coverage
coverage:
@mkdir -p coverage
@go test -coverprofile=coverage.out ./internal/...
@go tool cover -func=coverage.out -o coverage/coverage.txt
@docker compose up -d test
@docker compose exec test sh -c "go test -coverprofile=coverage.out ./internal/... && go tool cover -func=coverage.out -o coverage/coverage.txt"
@docker cp $(shell docker ps -q -f "name=fortunebet-test-1"):/app/coverage ./ || true
@docker compose stop test
.PHONY: build
build:
@go build -ldflags="-s" -o ./bin/web ./
@docker compose build app
.PHONY: run
run:
@echo "Running Go application"
@go run ./cmd/main.go
@docker compose up -d
.PHONY: stop
stop:
@docker compose down
.PHONY: air
air:
@echo "Running air"
@echo "Running air locally (not in Docker)"
@air -c .air.toml
.PHONY: migrations/up
.PHONY: migrations/new
migrations/new:
@echo 'Creating migration files for DB_URL'
@migrate create -seq -ext=.sql -dir=./db/migrations $(name)
.PHONY: migrations/up
migrations/up:
@echo 'Running up migrations...'
@migrate -path ./db/migrations -database $(DB_URL) up
@docker compose up migrate
.PHONY: swagger
swagger:
@swag init -g cmd/main.go
.PHONY: db-up
db-up:
docker compose -f compose.db.yaml up
@docker compose up -d postgres
.PHONY: db-down
db-down:
docker compose -f compose.db.yaml down
@docker compose down
.PHONY: sqlc-gen
sqlc-gen:
@sqlc generate
@sqlc generate