1
Fork 0
mirror of https://github.com/thegeneralist01/config.git synced 2026-03-07 10:59:55 +01:00
config/hosts/thegeneralist-central/calorie-tracker/default.nix

97 lines
2.5 KiB
Nix

{ pkgs, inputs, ... }:
let
sourceDir = "${inputs.calorie-tracker}";
appDir = "/var/lib/calorie-tracker/app";
dataDir = "/var/lib/calorie-tracker";
port = 4322;
acmeDomain = "thegeneralist01.com";
domain = "calorie.${acmeDomain}";
ssl = {
forceSSL = true;
quic = true;
useACMEHost = acmeDomain;
};
in
{
systemd.services.calorie-tracker = {
description = "Calorie Tracker";
wantedBy = [ "multi-user.target" ];
wants = [ "network-online.target" ];
after = [ "network-online.target" ];
environment = {
NODE_ENV = "production";
HOST = "127.0.0.1";
PORT = toString port;
DATABASE_URL = "file:${dataDir}/dev.db";
PRISMA_ENGINES_CHECKSUM_IGNORE_MISSING = "1";
PRISMA_FMT_BINARY = "${pkgs.prisma-engines}/bin/prisma-fmt";
PRISMA_SCHEMA_ENGINE_BINARY = "${pkgs.prisma-engines}/bin/schema-engine";
PRISMA_QUERY_ENGINE_BINARY = "${pkgs.prisma-engines}/bin/query-engine";
PRISMA_QUERY_ENGINE_LIBRARY = "${pkgs.prisma-engines}/lib/libquery_engine.node";
};
path = with pkgs; [
bash
coreutils
gnused
nodejs_22
prisma
prisma-engines
rsync
sqlite
];
preStart = ''
mkdir -p ${appDir}
rsync -a --delete --exclude ".git" --exclude "node_modules" --exclude "dist" --exclude ".astro" ${sourceDir}/ ${appDir}/
cd ${appDir}
if [ ! -f .env ]; then
cp .env.example .env
fi
sed -i 's#^DATABASE_URL=.*#DATABASE_URL="file:${dataDir}/dev.db"#' .env
if [ ! -d node_modules ] || [ ! -d node_modules/@astrojs/node ] || [ ! -d node_modules/server-destroy ]; then
npm ci --no-fund --no-audit
fi
sqlite3 "${dataDir}/dev.db" < ${./schema.sql}
npm run prisma:generate
if [ ! -f dist/server/entry.mjs ]; then
npm run build
fi
'';
serviceConfig = {
Type = "simple";
User = "thegeneralist";
Group = "users";
StateDirectory = "calorie-tracker";
StateDirectoryMode = "0750";
WorkingDirectory = appDir;
ExecStart = "${pkgs.nodejs_22}/bin/node ${appDir}/dist/server/entry.mjs";
KillMode = "mixed";
Restart = "always";
RestartSec = 5;
};
};
# services.nginx.virtualHosts.${domain} = ssl // {
# locations."/" = {
# proxyPass = "http://127.0.0.1:${toString port}";
# proxyWebsockets = true;
# recommendedProxySettings = true;
# extraConfig = ''
# proxy_read_timeout 300s;
# proxy_send_timeout 300s;
# '';
# };
# };
}