108 lines
2.7 KiB
Nix
108 lines
2.7 KiB
Nix
{ pkgs, ... }:
|
|
let
|
|
vars = import ../vars.nix;
|
|
stateDir = "${vars.services}/nornsight";
|
|
appDir = "${stateDir}/app";
|
|
binPath = pkgs.lib.makeBinPath [
|
|
pkgs.binutils
|
|
pkgs.libpq
|
|
pkgs.postgresql
|
|
pkgs.stdenv.cc
|
|
];
|
|
libraryPath = pkgs.lib.makeLibraryPath [
|
|
pkgs.libpq
|
|
pkgs.postgresql.lib
|
|
];
|
|
in
|
|
{
|
|
systemd.tmpfiles.rules = [
|
|
"d ${stateDir} 0750 nornsight nornsight - -"
|
|
];
|
|
|
|
users.users.nornsight = {
|
|
isSystemUser = true;
|
|
group = "nornsight";
|
|
home = stateDir;
|
|
};
|
|
|
|
systemd.services.nornsight = {
|
|
description = "Norn Sight";
|
|
after = [ "network-online.target" ];
|
|
wants = [ "network-online.target" ];
|
|
wantedBy = [ "multi-user.target" ];
|
|
|
|
environment = {
|
|
HOME = stateDir;
|
|
UV_CACHE_DIR = "${stateDir}/.cache/uv";
|
|
UV_PROJECT_ENVIRONMENT = "${appDir}/.venv";
|
|
UV_PYTHON = "${pkgs.python313}/bin/python3.13";
|
|
UV_PYTHON_DOWNLOADS = "never";
|
|
LD_LIBRARY_PATH = libraryPath;
|
|
LIBRARY_PATH = libraryPath;
|
|
PSYCOPG_IMPL = "python";
|
|
};
|
|
|
|
path = with pkgs; [
|
|
bash
|
|
coreutils
|
|
git
|
|
uv
|
|
];
|
|
|
|
serviceConfig = {
|
|
Type = "simple";
|
|
User = "nornsight";
|
|
Group = "nornsight";
|
|
EnvironmentFile = "-${vars.secrets}/services/nornsight";
|
|
WorkingDirectory = stateDir;
|
|
Restart = "on-failure";
|
|
RestartSec = "5s";
|
|
StandardOutput = "journal";
|
|
StandardError = "journal";
|
|
NoNewPrivileges = true;
|
|
PrivateTmp = true;
|
|
ProtectHome = true;
|
|
ProtectSystem = "strict";
|
|
ReadWritePaths = [ stateDir ];
|
|
};
|
|
|
|
script = ''
|
|
set -eu
|
|
export PATH="${binPath}:$PATH"
|
|
export LD_LIBRARY_PATH="${libraryPath}:''${LD_LIBRARY_PATH:-}"
|
|
export LIBRARY_PATH="${libraryPath}:''${LIBRARY_PATH:-}"
|
|
|
|
: "''${NORN_SIGHT_REPO_URL:?NORN_SIGHT_REPO_URL is required}"
|
|
branch="''${NORN_SIGHT_BRANCH:-main}"
|
|
|
|
if [ -d "${appDir}/.git" ]; then
|
|
current_origin="$(git -C "${appDir}" remote get-url origin)"
|
|
if [ "$current_origin" != "$NORN_SIGHT_REPO_URL" ]; then
|
|
rm -rf "${appDir}"
|
|
fi
|
|
fi
|
|
|
|
if [ ! -d "${appDir}/.git" ]; then
|
|
git clone --branch "$branch" "$NORN_SIGHT_REPO_URL" "${appDir}"
|
|
else
|
|
cd "${appDir}"
|
|
git fetch origin "$branch"
|
|
git checkout "$branch"
|
|
git pull --ff-only origin "$branch"
|
|
fi
|
|
|
|
cd "${appDir}"
|
|
uv sync --upgrade
|
|
uv run python - <<'PY'
|
|
import ctypes.util
|
|
import os
|
|
|
|
print(f"LD_LIBRARY_PATH={os.environ.get('LD_LIBRARY_PATH')}")
|
|
print(f"LIBRARY_PATH={os.environ.get('LIBRARY_PATH')}")
|
|
print(f"libpq={ctypes.util.find_library('pq')}")
|
|
PY
|
|
exec uv run uvicorn pipelines.web.main:app --reload --host 0.0.0.0 --port 8001
|
|
'';
|
|
};
|
|
}
|