From e23edf5f071521a90ff600877d2d7a0936860e77 Mon Sep 17 00:00:00 2001 From: Greg Hellings Date: Mon, 22 Apr 2024 01:12:55 -0500 Subject: [PATCH] Build is now nix! --- .gitignore | 1 + Containerfile | 9 ------ flake.nix | 81 +++++++++++++++++++++++++++++++++++++++++++++++++-- serve.sh | 2 -- 4 files changed, 80 insertions(+), 13 deletions(-) delete mode 100644 Containerfile delete mode 100755 serve.sh diff --git a/.gitignore b/.gitignore index dd2ab72..3b749cb 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ public/* .hugo_build.lock None .direnv +result diff --git a/Containerfile b/Containerfile deleted file mode 100644 index dc652f4..0000000 --- a/Containerfile +++ /dev/null @@ -1,9 +0,0 @@ -FROM klakegg/hugo:0.107.0 AS build - -RUN mkdir /build -WORKDIR /build -COPY . /build/ -RUN hugo -v - -FROM nginx:latest -COPY --from=build /build/public/ /usr/share/nginx/html/ diff --git a/flake.nix b/flake.nix index f962540..acc8a48 100644 --- a/flake.nix +++ b/flake.nix @@ -25,7 +25,9 @@ "x86_64-linux" "aarch64-linux" ]; - perSystem = { config, pkgs, self', ... }: { + perSystem = { config, pkgs, self', ... }: let + lib = pkgs.lib; + in { devshells.default = { commands = [ { @@ -37,13 +39,88 @@ category = "server"; help = "Start the development server"; } + { + package = self'.packages.prod-server; + category = "server"; + help = "Start the prod server"; + } ]; #devshell.startup.server.text = "${pkgs.hugo}/bin/hugo serve"; }; + packages = { + default = pkgs.dockerTools.buildLayeredImage { + name = "gregs-homepage"; + tag = "latest"; + contents = [ + self'.packages.site + (pkgs.buildEnv { + name = "image"; + paths = with pkgs; [ + dockerTools.fakeNss + nginx + ]; + pathsToLink = [ "/bin" "/etc" "/var" ]; + }) + ]; + fakeRootCommands = '' + mkdir tmp + chmod 0777 tmp + ''; + config = { + Cmd = [ (lib.getExe pkgs.nginx) "-c" self'.packages.nginx-config "-e" "stderr" ]; + Port = [ 80 ]; + }; + }; + site = pkgs.stdenv.mkDerivation { + name = "Greg's homepage"; + nativeBuildInputs = [ pkgs.hugo ]; + buildPhase = '' + hugo -v + ''; + installPhase = '' + mkdir -p $out + cp -R public/* public/.* $out + ''; + src = ./.; + }; + nginx-config = pkgs.writeText "nginx.conf" '' + user root root; + worker_processes 10; + pid /tmp/nginx.pid; + daemon off; + + error_log stderr; + + events { + } + + http { + access_log stdout; + include ${pkgs.nginx}/conf/mime.types; + server { + listen 80; + root ${self'.packages.site}; + autoindex off; + } + } + ''; + }; + process-compose = { dev-server.settings.processes = { - hugo.command = "${pkgs.hugo}/bin/hugo serve"; + hugo.command = "${lib.getExe pkgs.hugo} serve"; + }; + prod-server.settings.processes = { + import.command = "${lib.getExe pkgs.podman} load -i ${self'.packages.default}"; + run = { + command = "${lib.getExe pkgs.podman} run --rm -p 8000:80 gregs-homepage:latest"; + depends_on.import.condition = "process_completed_successfully"; + readiness_probe.http_get = { + host = "localhost"; + port = 8000; + }; + }; }; }; diff --git a/serve.sh b/serve.sh deleted file mode 100755 index 2ed09aa..0000000 --- a/serve.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -podman run --rm -it -v $(pwd):/src -p 1313:1313 klakegg/hugo:latest server