- commit
- 60aa6b3
- parent
- 7c6fe3b
- author
- Eric Bower
- date
- 2024-05-20 23:16:17 -0400 EDT
chore: docker
3 files changed,
+110,
-0
+59,
-0
1@@ -0,0 +1,59 @@
2+FROM --platform=$BUILDPLATFORM golang:1.22 as builder-deps
3+LABEL maintainer="Pico Maintainers <hello@pico.sh>"
4+
5+WORKDIR /app
6+
7+RUN apt-get update
8+RUN apt-get install -y git ca-certificates
9+
10+COPY go.* ./
11+
12+RUN go mod download
13+
14+FROM builder-deps as builder-web
15+
16+COPY . .
17+
18+ARG TARGETOS
19+ARG TARGETARCH
20+
21+ENV CGO_ENABLED=0
22+ENV LDFLAGS="-s -w"
23+
24+ENV GOOS=${TARGETOS} GOARCH=${TARGETARCH}
25+
26+RUN go build -ldflags "$LDFLAGS" -o /go/bin/web ./cmd/web
27+
28+FROM builder-deps as builder-ssh
29+
30+COPY . .
31+
32+ARG TARGETOS
33+ARG TARGETARCH
34+
35+ENV CGO_ENABLED=0
36+ENV LDFLAGS="-s -w"
37+
38+ENV GOOS=${TARGETOS} GOARCH=${TARGETARCH}
39+
40+RUN go build -ldflags "$LDFLAGS" -o /go/bin/ssh ./cmd/ssh
41+
42+FROM scratch as release-web
43+
44+WORKDIR /app
45+
46+COPY --from=builder-web /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
47+COPY --from=builder-web /go/bin/web ./web
48+
49+ENTRYPOINT ["/app/web"]
50+
51+FROM scratch as release-ssh
52+
53+WORKDIR /app
54+ENV TERM="xterm-256color"
55+
56+COPY --from=builder-ssh /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
57+COPY --from=builder-ssh /go/bin/ssh ./ssh
58+
59+
60+ENTRYPOINT ["/app/ssh"]
M
Makefile
+15,
-0
1@@ -1,3 +1,8 @@
2+DOCKER_TAG?=$(shell git log --format="%H" -n 1)
3+DOCKER_PLATFORM?=linux/amd64,linux/arm64
4+DOCKER_CMD?=docker
5+DOCKER_BUILDX_BUILD?=$(DOCKER_CMD) buildx build --push --platform $(DOCKER_PLATFORM)
6+
7 fmt:
8 go fmt ./...
9 deno fmt README.md
10@@ -11,3 +16,13 @@ build:
11 go build -o ./build/ssh ./cmd/ssh
12 go build -o ./build/web ./cmd/web
13 .PHONY: build
14+
15+bp-setup:
16+ $(DOCKER_CMD) buildx ls | grep pico || $(DOCKER_CMD) buildx create --name pico
17+ $(DOCKER_CMD) buildx use pico
18+.PHONY: bp-setup
19+
20+bp: bp-setup
21+ $(DOCKER_BUILDX_BUILD) -t "ghcr.io/picosh/pico/git-ssh:$(DOCKER_TAG)" --target release-ssh .
22+ $(DOCKER_BUILDX_BUILD) -t "ghcr.io/picosh/pico/git-web:$(DOCKER_TAG)" --target release-web .
23+.PHONY: bp
+36,
-0
1@@ -0,0 +1,36 @@
2+services:
3+ web:
4+ image: ghcr.io/picosh/pico/git-web:latest
5+ restart: always
6+ networks:
7+ git:
8+ aliases:
9+ - web
10+ env_file:
11+ - .env.prod
12+ ports:
13+ - "${GIT_HTTPS_V4:-443}:443"
14+ - "${GIT_HTTP_V4:-80}:80"
15+ - "${GIT_HTTPS_V6:-[::1]:443}:443"
16+ - "${GIT_HTTP_V6:-[::1]:80}:80"
17+ ssh:
18+ image: ghcr.io/picosh/pico/git-ssh:latest
19+ restart: always
20+ networks:
21+ git:
22+ aliases:
23+ - ssh
24+ env_file:
25+ - .env.prod
26+ volumes:
27+ - ./data/git-ssh/data:/app/ssh_data
28+ ports:
29+ - "${GIT_SSH_V4:-22}:2222"
30+ - "${GIT_SSH_V6:-[::1]:22}:2222"
31+networks:
32+ git:
33+ driver_opts:
34+ com.docker.network.bridge.name: pico
35+ ipam:
36+ config:
37+ - subnet: 172.25.0.0/16