gotosocial/Dockerfile
tobi 1f38b7b48f
[chore] Remove duplicate swagger docs build in Dockerfile (#3842)
* [chore] Use vendored swagger in Docker container

* skip the swagger step altogether actually, it's already done by goreleaser anyway
2025-02-26 21:12:26 +01:00

39 lines
1.4 KiB
Docker

# syntax=docker/dockerfile:1.3
# Dockerfile reference: https://docs.docker.com/engine/reference/builder/
# stage 1: generate the web/assets/dist bundles
FROM --platform=${BUILDPLATFORM} node:18-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 2: build the executor container
FROM --platform=${TARGETPLATFORM} alpine:3.20 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 ./web/assets/swagger.yaml /gotosocial/web/assets/swagger.yaml
VOLUME [ "/gotosocial/storage", "/gotosocial/.cache" ]
ENTRYPOINT [ "/gotosocial/gotosocial", "server", "start" ]