diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..b815415 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +.git +.env +.env.* +!.env.example +terminal-shop-source/ +*.db +data/ +docs/ diff --git a/Caddyfile b/Caddyfile new file mode 100644 index 0000000..ea14651 --- /dev/null +++ b/Caddyfile @@ -0,0 +1,3 @@ +api.yourdomain.com { + reverse_proxy api:8080 +} diff --git a/Dockerfile.api b/Dockerfile.api new file mode 100644 index 0000000..6ed44bc --- /dev/null +++ b/Dockerfile.api @@ -0,0 +1,13 @@ +FROM golang:alpine AS builder +WORKDIR /app +RUN apk add --no-cache gcc musl-dev +COPY go.mod go.sum ./ +RUN go mod download +COPY . . +RUN CGO_ENABLED=1 GOOS=linux go build -o api ./api/main.go + +FROM alpine:3.21 +RUN apk add --no-cache libc6-compat +WORKDIR /root/ +COPY --from=builder /app/api . +CMD ["./api"] diff --git a/Dockerfile.ssh b/Dockerfile.ssh new file mode 100644 index 0000000..0601a1f --- /dev/null +++ b/Dockerfile.ssh @@ -0,0 +1,11 @@ +FROM golang:alpine AS builder +WORKDIR /app +COPY go.mod go.sum ./ +RUN go mod download +COPY . . +RUN CGO_ENABLED=0 GOOS=linux go build -o ssh ./main.go + +FROM alpine:3.21 +WORKDIR /root/ +COPY --from=builder /app/ssh . +CMD TERM=xterm-256color ./ssh diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..7eb5c3e --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,41 @@ +services: + api: + build: + context: . + dockerfile: Dockerfile.api + restart: unless-stopped + env_file: .env.prod + volumes: + - ./data:/data + expose: + - "8080" + + ssh: + build: + context: . + dockerfile: Dockerfile.ssh + restart: unless-stopped + env_file: .env.prod + ports: + - "22:22" + volumes: + - ./.ssh:/root/.ssh + depends_on: + - api + + caddy: + image: caddy:2-alpine + restart: unless-stopped + ports: + - "80:80" + - "443:443" + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile + - caddy_data:/data + - caddy_config:/config + depends_on: + - api + +volumes: + caddy_data: + caddy_config: