You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
2.3 KiB
56 lines
2.3 KiB
# syntax=docker/dockerfile:1.3 |
|
# Dockerfile reference: https://docs.docker.com/engine/reference/builder/ |
|
|
|
# stage 1: generate up-to-date swagger.yaml to put in the final container |
|
FROM --platform=${BUILDPLATFORM} golang:1.22-alpine AS swagger |
|
|
|
RUN \ |
|
### Installs goswagger for building swagger definitions inside this container |
|
go install "github.com/go-swagger/go-swagger/cmd/swagger@c46c303aaa02" && \ |
|
# Makes swagger executable |
|
chmod +x /go/bin/swagger |
|
|
|
COPY go.mod /go/src/github.com/superseriousbusiness/gotosocial/go.mod |
|
COPY go.sum /go/src/github.com/superseriousbusiness/gotosocial/go.sum |
|
COPY cmd /go/src/github.com/superseriousbusiness/gotosocial/cmd |
|
COPY internal /go/src/github.com/superseriousbusiness/gotosocial/internal |
|
|
|
WORKDIR /go/src/github.com/superseriousbusiness/gotosocial |
|
RUN /go/bin/swagger generate spec -o /go/src/github.com/superseriousbusiness/gotosocial/swagger.yaml --scan-models |
|
|
|
# stage 2: generate the web/assets/dist bundles |
|
FROM --platform=${BUILDPLATFORM} node:20-alpine AS bundler |
|
|
|
COPY web web |
|
RUN yarn --cwd ./web/source install && \ |
|
yarn --cwd ./web/source ts-patch install && \ |
|
yarn --cwd ./web/source build && \ |
|
rm -rf ./web/source |
|
|
|
# stage 3: build the executor container |
|
FROM --platform=${TARGETPLATFORM} alpine:3.19.1 as executor |
|
|
|
# switch to non-root user:group for GtS |
|
USER 1000:1000 |
|
|
|
# Because we're doing multi-arch builds we can't easily do `RUN mkdir [...]` |
|
# but we can hack around that by having docker's WORKDIR make the dirs for |
|
# us, as the user created above. |
|
# |
|
# See https://docs.docker.com/engine/reference/builder/#workdir |
|
# |
|
# First make sure storage + cache exist and are owned by 1000:1000, |
|
# then go back to just /gotosocial, where we'll actually run from. |
|
WORKDIR "/gotosocial/storage" |
|
WORKDIR "/gotosocial/.cache" |
|
WORKDIR "/gotosocial" |
|
|
|
# copy the dist binary created by goreleaser or build.sh |
|
COPY --chown=1000:1000 gotosocial /gotosocial/gotosocial |
|
|
|
# copy over the web directories with templates, assets etc |
|
COPY --chown=1000:1000 --from=bundler web /gotosocial/web |
|
COPY --chown=1000:1000 --from=swagger /go/src/github.com/superseriousbusiness/gotosocial/swagger.yaml web/assets/swagger.yaml |
|
|
|
VOLUME [ "/gotosocial/storage", "/gotosocial/.cache" ] |
|
ENTRYPOINT [ "/gotosocial/gotosocial", "server", "start" ]
|
|
|