Nix, NixOS에서 NextJS 서버 설정하기


요약

요 블로그에서 했던걸 Nix에서 다시 해봤다.

설정

Dockerfile에 있던 설정을 대충 다음과 같이 비슷하게 구현해야 한다.

  # srcs.nix
  survived-viewer-v2-build = pkgs.buildNpmPackage {
    name = "survived-viewer-v2";
    src = "${survived.outPath}/viewer-v2";
    npmBuild = "npm run build";
    npmDepsHash = "sha256-blahblah...";
    # One of these copy script is unnecessary.
    installPhase = ''
      mkdir -p $out/public/_next
      cp -r .next $out/
      cp -r .next/standalone/* $out
      cp -r public $out/public/
      cp -r .next/static $out/public/_next/static
    '';
  };
  systemd.services."survived-viewer-v2" = {
      enable = true;
      wantedBy = [ "multi-user.target" ];
      after = [ "network.target" ];
      path = [ "/run/current-system/sw" ];
      environment = {
        HOSTNAME = "127.0.0.1";
      	PORT = "8686";
      };
      serviceConfig = {
        ExecStart = "${pkgs.nodejs_22}/bin/node ${srcs.survived-viewer-v2-build}/server.js";
        Restart = "always";
      };
    };

결론

이렇게 하면 되긴 되는데, NextJS 서버 설정이 좀 이상한건지 port가 public하게 오픈되더라? 별수없이 Docker로 다시 롤백해뒀다.