add Dockerfile and docker-compose.yml; update makefile for Docker integration

This commit is contained in:
KidusAlemayehu 2025-05-12 01:58:53 +03:00
parent 252bf04b1e
commit 29642bfd14
3 changed files with 60 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
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,21 @@ services:
networks:
- app
app:
build:
context: .
dockerfile: Dockerfile
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"]
networks:
app:
driver: bridge
driver: bridge

View File

@ -1,41 +1,53 @@
include .env
.PHONY: test
test:
@go test ./app
@docker compose exec app go test ./app
.PHONY: coverage
coverage:
@mkdir -p coverage
@go test -coverprofile=coverage.out ./internal/...
@go tool cover -func=coverage.out -o coverage/coverage.txt
@docker compose exec app go test -coverprofile=coverage.out ./internal/...
@docker compose exec app go tool cover -func=coverage.out -o coverage/coverage.txt
.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