From 3f065b7a0ce53b0c5e9391439e7fa18901b6f333 Mon Sep 17 00:00:00 2001 From: trivernis Date: Thu, 27 Jul 2023 14:16:10 +0200 Subject: [PATCH] Add firefish custom container file --- .gitmodules | 3 ++ Containerfile | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++ firefish | 1 + 3 files changed, 104 insertions(+) create mode 100644 .gitmodules create mode 100644 Containerfile create mode 160000 firefish diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..4c545c9 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "firefish"] + path = firefish + url = https://git.joinfirefish.org/firefish/firefish.git diff --git a/Containerfile b/Containerfile new file mode 100644 index 0000000..03c7ad8 --- /dev/null +++ b/Containerfile @@ -0,0 +1,100 @@ +# Base container +FROM alpine:3.18 as base +RUN apk add --no-cache --no-progress \ + tini \ + ffmpeg \ + vips-dev \ + zip \ + unzip \ + nodejs-current +RUN corepack enable +RUN corepack prepare pnpm@latest --activate + +# Build-base container +FROM base as build-base +## Install dev and compilation dependencies, build files +RUN apk add --no-cache --no-progress \ + git \ + alpine-sdk \ + python3 \ + nodejs-current \ + npm \ + rust \ + cargo \ + vips + +# Build container +FROM build-base as build +WORKDIR /firefish + +# Install compilation dependencies + +# Copy only the cargo dependency-related files first, to cache efficiently +COPY firefish/packages/backend/native-utils/Cargo.toml packages/backend/native-utils/Cargo.toml +COPY firefish/packages/backend/native-utils/Cargo.lock packages/backend/native-utils/Cargo.lock +RUN mkdir -p packages/backend/native-utils/src/ +RUN echo "" >> packages/backend/native-utils/src/lib.rs +# COPY packages/backend/native-utils/src/lib.rs packages/backend/native-utils/src/ +COPY firefish/packages/backend/native-utils/migration/Cargo.toml packages/backend/native-utils/migration/Cargo.toml +# COPY packages/backend/native-utils/migration/src/lib.rs packages/backend/native-utils/migration/src/ +RUN mkdir -p packages/backend/native-utils/migration/src/ +RUN echo "" >> packages/backend/native-utils/migration/src/lib.rs + +# Install cargo dependencies +RUN cargo fetch --locked --manifest-path /firefish/packages/backend/native-utils/Cargo.toml + +# Copy only the dependency-related files first, to cache efficiently +COPY firefish/package.json pnpm*.yaml ./ +COPY firefish/packages/backend/package.json packages/backend/package.json +COPY firefish/packages/client/package.json packages/client/package.json +COPY firefish/packages/sw/package.json packages/sw/package.json +COPY firefish/packages/firefish-js/package.json packages/firefish-js/package.json +COPY firefish/packages/megalodon/package.json packages/megalodon/package.json +COPY firefish/packages/backend/native-utils/package.json packages/backend/native-utils/package.json +COPY firefish/packages/backend/native-utils/npm/linux-x64-musl/package.json packages/backend/native-utils/npm/linux-x64-musl/package.json +COPY firefish/packages/backend/native-utils/npm/linux-arm64-musl/package.json packages/backend/native-utils/npm/linux-arm64-musl/package.json + +# Configure corepack and pnpm, and install dev mode dependencies for compilation +RUN pnpm i --frozen-lockfile + +# Copy in the rest of the native-utils rust files +COPY firefish/packages/backend/native-utils packages/backend/native-utils/ + +# Compile native-utils +RUN pnpm run --filter native-utils build + +# Copy in the rest of the files to compile +COPY ./firefish / +RUN env NODE_ENV=production sh -c "pnpm run --filter '!native-utils' build && pnpm run gulp" + +# Trim down the dependencies to only those for production +RUN pnpm i --prod --frozen-lockfile + + +## Runtime container +FROM base +WORKDIR /firefish + +# Install runtime dependencies + +COPY ./firefish / + +COPY --from=build /firefish/packages/megalodon /firefish/packages/megalodon + +# Copy node modules +COPY --from=build /firefish/node_modules /firefish/node_modules +COPY --from=build /firefish/packages/backend/node_modules /firefish/packages/backend/node_modules +COPY --from=build /firefish/packages/sw/node_modules /firefish/packages/sw/node_modules +COPY --from=build /firefish/packages/client/node_modules /firefish/packages/client/node_modules +COPY --from=build /firefish/packages/firefish-js/node_modules /firefish/packages/firefish-js/node_modules + +# Copy the finished compiled files +COPY --from=build /firefish/built /firefish/built +COPY --from=build /firefish/packages/backend/built /firefish/packages/backend/built +COPY --from=build /firefish/packages/backend/assets/instance.css /firefish/packages/backend/assets/instance.css +COPY --from=build /firefish/packages/backend/native-utils/built /firefish/packages/backend/native-utils/built + +ENV NODE_ENV=production +VOLUME "/firefish/files" +ENTRYPOINT [ "/sbin/tini", "--" ] +CMD [ "pnpm", "run", "migrateandstart" ] diff --git a/firefish b/firefish new file mode 160000 index 0000000..dacce64 --- /dev/null +++ b/firefish @@ -0,0 +1 @@ +Subproject commit dacce643fecf04b9139b0f6977c686b2f42775a4