2022-02-27 12:03:37 +00:00
|
|
|
# syntax=docker/dockerfile:1.3
|
2022-11-19 09:18:01 +00:00
|
|
|
# Dockerfile reference: https://docs.docker.com/engine/reference/builder/
|
|
|
|
|
2022-06-09 10:51:19 +00:00
|
|
|
# stage 1: generate up-to-date swagger.yaml to put in the final container
|
2023-10-24 11:21:05 +00:00
|
|
|
FROM --platform=${BUILDPLATFORM} golang:1.21-alpine AS swagger
|
|
|
|
|
|
|
|
RUN \
|
|
|
|
### Installs goswagger for building swagger definitions inside this container
|
|
|
|
go install "github.com/go-swagger/go-swagger/cmd/swagger@v0.30.5" && \
|
|
|
|
# Makes swagger executable
|
|
|
|
chmod +x /go/bin/swagger
|
2022-02-27 12:03:37 +00:00
|
|
|
|
2022-06-09 10:51:19 +00:00
|
|
|
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
|
2023-10-24 11:21:05 +00:00
|
|
|
|
2022-06-09 10:51:19 +00:00
|
|
|
WORKDIR /go/src/github.com/superseriousbusiness/gotosocial
|
2023-10-24 11:21:05 +00:00
|
|
|
RUN /go/bin/swagger generate spec -o /go/src/github.com/superseriousbusiness/gotosocial/swagger.yaml --scan-models
|
2021-07-27 12:45:27 +00:00
|
|
|
|
2022-06-09 10:51:19 +00:00
|
|
|
# stage 2: generate the web/assets/dist bundles
|
2023-10-05 14:06:19 +00:00
|
|
|
FROM --platform=${BUILDPLATFORM} node:18-alpine AS bundler
|
2021-07-27 12:45:27 +00:00
|
|
|
|
2022-06-09 10:51:19 +00:00
|
|
|
COPY web web
|
2023-10-05 14:06:19 +00:00
|
|
|
RUN yarn --cwd ./web/source install && \
|
2023-10-17 10:46:06 +00:00
|
|
|
yarn --cwd ./web/source ts-patch install && \
|
2023-10-05 14:06:19 +00:00
|
|
|
yarn --cwd ./web/source build && \
|
|
|
|
rm -rf ./web/source
|
2021-07-27 12:45:27 +00:00
|
|
|
|
2022-06-09 10:51:19 +00:00
|
|
|
# stage 3: build the executor container
|
2023-02-26 17:26:24 +00:00
|
|
|
FROM --platform=${TARGETPLATFORM} alpine:3.17.2 as executor
|
2021-05-23 21:43:04 +00:00
|
|
|
|
2022-11-19 09:18:01 +00:00
|
|
|
# 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 exists + is owned by 1000:1000, then go back
|
|
|
|
# to just /gotosocial, where we'll run from
|
|
|
|
WORKDIR "/gotosocial/storage"
|
|
|
|
WORKDIR "/gotosocial"
|
|
|
|
|
2022-06-09 10:51:19 +00:00
|
|
|
# copy the dist binary created by goreleaser or build.sh
|
2022-02-27 12:03:37 +00:00
|
|
|
COPY --chown=1000:1000 gotosocial /gotosocial/gotosocial
|
2021-05-23 21:43:04 +00:00
|
|
|
|
2022-06-09 10:51:19 +00:00
|
|
|
# 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
|
2021-05-23 21:43:04 +00:00
|
|
|
|
2022-11-19 09:18:01 +00:00
|
|
|
VOLUME [ "/gotosocial/storage" ]
|
2021-05-23 21:43:04 +00:00
|
|
|
ENTRYPOINT [ "/gotosocial/gotosocial", "server", "start" ]
|