From 2365402afddd4a5778e595838d7f1e84372acbe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Carrasco?= Date: Mon, 18 Mar 2024 21:03:29 +0000 Subject: [PATCH] chore: create Nix flake to use in Dockerfile --- Dockerfile | 28 ++++++++++++++++++++++++++++ flake.nix | 37 +++++++++++++++++++++++++++++++++++++ tools/Dockerfile | 35 ----------------------------------- tools/docker-nginx.conf | 16 ---------------- 4 files changed, 65 insertions(+), 51 deletions(-) create mode 100644 Dockerfile create mode 100644 flake.nix delete mode 100644 tools/Dockerfile delete mode 100644 tools/docker-nginx.conf diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..2117b3b4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +# syntax=docker/dockerfile:1.7 + +# Nix builder +FROM nixos/nix:latest AS builder + +# Copy our source and setup our working dir +COPY . /tmp/build +WORKDIR /tmp/build + +# Build our Nix environment +RUN nix \ + --extra-experimental-features "nix-command flakes" \ + --option filter-syscalls false \ + build + +# Copy the Nix store closure into a directory +RUN mkdir /tmp/nix-store-closure +RUN cp -R $(nix-store -qR result/) /tmp/nix-store-closure + +# Final image +FROM scratch + +WORKDIR /app + +# Copy /nix/store +COPY --from=builder /tmp/nix-store-closure /nix/store +COPY --from=builder /tmp/build/result /app +CMD ["/app/bin/app"] diff --git a/flake.nix b/flake.nix new file mode 100644 index 00000000..7d04dd9d --- /dev/null +++ b/flake.nix @@ -0,0 +1,37 @@ +{ + description = "simde"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + pnpm2nix = { + url = "github:nzbr/pnpm2nix-nzbr"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { self, nixpkgs, flake-utils, pnpm2nix, ... } @ inputs: + flake-utils.lib.eachDefaultSystem (system: + let pkgs = import nixpkgs { inherit system; }; + in with pkgs; rec { + # Development environment + devShell = mkShell { + name = "simde"; + nativeBuildInputs = [ nodejs nodePackages.pnpm ]; + }; + + # Build package into dist/ dir with pnpm + dist = pnpm2nix.packages.${system}.mkPnpmPackage { + src = ./.; + }; + + # Create SIMDE dist/ + SWS bundle + packages.app = pkgs.writeShellScriptBin "app" '' + ${pkgs.static-web-server}/bin/static-web-server --root ${dist}.distDir + ''; + + # The default package when a specific package name isn't specified + defaultPackage = packages.app; + } + ); +} diff --git a/tools/Dockerfile b/tools/Dockerfile deleted file mode 100644 index e16088da..00000000 --- a/tools/Dockerfile +++ /dev/null @@ -1,35 +0,0 @@ -################### -# BASE STAGE -################### -FROM node:21-alpine As base - -# Add pnpm to path -ENV PNPM_HOME="/pnpm" -ENV PATH="$PNPM_HOME:$PATH" - -# Enable pnpm -RUN corepack enable - -# Copy project -COPY . /app -WORKDIR /app - -################### -# BUILD STAGE -################### -FROM base AS build - -# Install package.json dependencies -RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile -# Run build script -RUN pnpm build - -################### -# PRODUCTION STAGE -################### -FROM nginx:1.25.4-alpine - -# Copy NGINX configuration -COPY --from=build /app/tools/docker-nginx.conf /etc/nginx/conf.d/default.conf -# Copy the static files from the build stage to the production server -COPY --from=build /app/dist/. /usr/share/nginx/html diff --git a/tools/docker-nginx.conf b/tools/docker-nginx.conf deleted file mode 100644 index b6f372b6..00000000 --- a/tools/docker-nginx.conf +++ /dev/null @@ -1,16 +0,0 @@ -server { - listen 80; - root /usr/share/nginx/html; - include /etc/nginx/mime.types; - - location / { - root /usr/share/nginx/html; - try_files $uri $uri/ index.html; - } - - # Set up caching for static files - location ~* \.(?:ico|css|js|gif|jpe?g|png)$ { - expires 30d; - add_header Cache-Control "public"; - } -}