feat(prod): optimised backend image
This commit is contained in:
@@ -7,13 +7,21 @@ WORKDIR /app
|
||||
COPY go.mod go.sum ./
|
||||
RUN go mod download
|
||||
|
||||
# ---- Production mode ----
|
||||
FROM base AS prod
|
||||
# ---- Build mode ----
|
||||
FROM base AS build
|
||||
WORKDIR /app
|
||||
|
||||
# Copy code, and compile
|
||||
COPY . .
|
||||
RUN go build -o server main.go
|
||||
|
||||
# ---- Production mode ----
|
||||
FROM alpine@sha256:8a1f59ffb675680d47db6337b49d22281a139e9d709335b492be023728e11715 AS prod
|
||||
WORKDIR /app
|
||||
|
||||
# Copy built binary
|
||||
COPY --from=build /app/server .
|
||||
|
||||
# Expose 8080 port
|
||||
EXPOSE 8080
|
||||
|
||||
|
||||
13
caddy/prod
Normal file
13
caddy/prod
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
admin off
|
||||
auto_https off
|
||||
}
|
||||
|
||||
:8080 {
|
||||
encode
|
||||
reverse_proxy frontend:3000
|
||||
|
||||
handle_path /api* {
|
||||
reverse_proxy backend:8080
|
||||
}
|
||||
}
|
||||
@@ -44,7 +44,7 @@ services:
|
||||
networks:
|
||||
- cover-letter-network
|
||||
volumes:
|
||||
- ./caddy/Caddyfile:/etc/caddy/Caddyfile
|
||||
- ./caddy/dev:/etc/caddy/Caddyfile
|
||||
ports:
|
||||
- 8000:8080
|
||||
depends_on:
|
||||
|
||||
75
production.yml
Normal file
75
production.yml
Normal file
@@ -0,0 +1,75 @@
|
||||
services:
|
||||
backend:
|
||||
build:
|
||||
context: ./backend
|
||||
dockerfile: ../Dockerfile.backend
|
||||
target: prod # Development mode with hot reload
|
||||
restart: unless-stopped
|
||||
container_name: cover-letter-backend
|
||||
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
# - GIN_MODE=release # For production
|
||||
- GIN_MODE=release
|
||||
# - POSTGRES_DB=postgresql://username:password@host:port/database_name
|
||||
- POSTGRES_DB=postgresql://postgres:postgres@db:5432/cover-letter
|
||||
# - Environment=prod # For production
|
||||
- Environment=prod
|
||||
networks:
|
||||
- cover-letter-network
|
||||
depends_on:
|
||||
db: # Wait for database to be ready (Pass healthcheck)
|
||||
condition: service_healthy
|
||||
# frontend:
|
||||
# build:
|
||||
# context: ./frontend
|
||||
# dockerfile: ../Dockerfile.frontend
|
||||
# target: dev # Development stage
|
||||
# restart: unless-stopped
|
||||
# container_name: cover-letter-frontend
|
||||
#
|
||||
# volumes:
|
||||
# - "./frontend:/app" # Mount frontend
|
||||
# - "/app/node_modules" # Ignore node_modules
|
||||
# networks:
|
||||
# - cover-letter-network
|
||||
# proxy:
|
||||
# image: caddy:alpine
|
||||
# restart: unless-stopped
|
||||
# container_name: cover-letter-proxy
|
||||
#
|
||||
# networks:
|
||||
# - cover-letter-network
|
||||
# volumes:
|
||||
# - ./caddy/Caddyfile:/etc/caddy/Caddyfile
|
||||
# ports:
|
||||
# - 8000:8080
|
||||
# depends_on:
|
||||
# - frontend
|
||||
# - backend
|
||||
db:
|
||||
image: postgres:13.21-alpine3.22
|
||||
restart: unless-stopped
|
||||
container_name: cover-letter-db
|
||||
|
||||
networks:
|
||||
- cover-letter-network
|
||||
environment:
|
||||
- POSTGRES_USER=postgres
|
||||
- POSTGRES_PASSWORD=postgres
|
||||
# - POSTGRES_HOST_AUTH_METHOD=trust # No password needed
|
||||
- POSTGRES_DB=cover-letter
|
||||
ports:
|
||||
- 5432:5432
|
||||
volumes:
|
||||
- ./data/db:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
||||
interval: 2s
|
||||
timeout: 2s
|
||||
retries: 5
|
||||
|
||||
networks:
|
||||
cover-letter-network:
|
||||
driver: bridge
|
||||
@@ -1,2 +1,3 @@
|
||||
#!/bin/bash
|
||||
export file="development.yml"
|
||||
# export file="development.yml"
|
||||
export file="production.yml"
|
||||
|
||||
Reference in New Issue
Block a user