From 80ad22c395dc55cecdf04ce981e5f8452ebe305e Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Sat, 7 Dec 2024 14:53:00 +0100 Subject: [PATCH] ci(build): :green_heart: Use static web server in Docker container --- Dockerfile | 15 +++++++++------ README.md | 19 +++++++++++++++++++ bun.lockb | Bin 451808 -> 451808 bytes sws.toml | 23 +++++++++++++++++++++++ 4 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 sws.toml diff --git a/Dockerfile b/Dockerfile index a69bf4f..0a32b35 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM imbios/bun-node:22-alpine AS base +FROM oven/bun:1.1.38-alpine AS base # Install dependencies into temp directory # This will cache them and speed up future builds @@ -6,18 +6,20 @@ FROM base AS install RUN mkdir -p /temp/dev COPY package.json bun.lockb /temp/dev/ -RUN cd /temp/dev && bun install --frozen-lockfile +RUN cd /temp/dev && bun install --production --frozen-lockfile FROM base AS builder COPY . /app COPY --from=install /temp/dev/node_modules /app/node_modules RUN cd /app && bun run emojis:generate -RUN cd /app && bun run build --preset bun +RUN cd /app && bun run build -FROM oven/bun:1.1.38-alpine AS final +# Run final web server +FROM ghcr.io/static-web-server/static-web-server:2-alpine AS final -COPY --from=builder /app/.output/ /app +COPY --from=builder /app/.output/public /app/public +COPY sws.toml /etc/config.toml LABEL org.opencontainers.image.authors="Gaspard Wierzbinski (https://cpluspatch.com)" LABEL org.opencontainers.image.source="https://github.com/versia-pub/frontend" @@ -27,4 +29,5 @@ LABEL org.opencontainers.image.title="Versia-FE" LABEL org.opencontainers.image.description="Frontend for the Versia Server Project" WORKDIR /app -CMD ["bun", "run", "server/index.mjs"] \ No newline at end of file +EXPOSE 3000 +CMD ["static-web-server", "--config-file", "/etc/config.toml"] \ No newline at end of file diff --git a/README.md b/README.md index 622445c..4bbbb30 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,25 @@ Then, the frontend will be available at `http://localhost:3000` inside the conta > > You can set the `NUXT_PUBLIC_API_HOST` environment variable to point to a different Versia Server instance. +#### Manual + +1. Clone the repository. +```bash +git clone https://github.com/versia-pub/frontend.git +``` +2. Install dependencies. +```bash +bun install +``` +3. Build the project. +```bash +bun run build +``` +4. Serve the static files in the `.output/public` directory. +> [!WARNING] +> +> `.output/public/200.html` should be configured as a fallback for all 404 errors. + ## Development Run `bun run emojis:generate` to generate the emoji list before building or running the project. diff --git a/bun.lockb b/bun.lockb index 2254eae53b0b2e377eea3c1982e8c230109b26f7..8fc2b1a9d5695abd51d001d440fb63eee674e148 100755 GIT binary patch delta 28085 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 C0E##O diff --git a/sws.toml b/sws.toml new file mode 100644 index 0000000..1b28545 --- /dev/null +++ b/sws.toml @@ -0,0 +1,23 @@ +[general] + +#### Address & Root dir +host = "::" +port = 3000 +root = "/app/public" + +#### Logging +log-level = "error" + +#### Cache Control headers +cache-control-headers = true + +#### Auto Compression +compression = true +compression-level = "default" + +#### Error pages +# Note: If a relative path is used then it will be resolved under the root directory. +page404 = "./404.html" + +#### Page fallback for 404s +page-fallback = "./200.html"