first commit
This commit is contained in:
80
hosts/AZ-PRM-1/services/bpi.nix
Normal file
80
hosts/AZ-PRM-1/services/bpi.nix
Normal file
@@ -0,0 +1,80 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
serviceName = "bpi";
|
||||
servicePort = config.m3ta.ports.get serviceName;
|
||||
appDir = "/var/lib/bpi/app";
|
||||
in {
|
||||
users.users.bpi = {
|
||||
isSystemUser = true;
|
||||
group = "bpi";
|
||||
home = "/var/lib/bpi";
|
||||
createHome = true;
|
||||
};
|
||||
users.groups.bpi = {};
|
||||
|
||||
systemd.services.bpi = {
|
||||
description = "AZ INTEC Basispreis Index";
|
||||
after = ["network-online.target"];
|
||||
wants = ["network-online.target"];
|
||||
wantedBy = ["multi-user.target"];
|
||||
|
||||
path = with pkgs; [
|
||||
git
|
||||
nodejs
|
||||
openssh
|
||||
];
|
||||
|
||||
environment = {
|
||||
PORT = toString servicePort;
|
||||
HOME = "/var/lib/bpi";
|
||||
BPI_BACKUP_DIR = "/var/lib/bpi/backups";
|
||||
BPI_MAX_BACKUPS = "10";
|
||||
};
|
||||
|
||||
preStart = ''
|
||||
set -euo pipefail
|
||||
|
||||
if [ ! -d "${appDir}/.git" ]; then
|
||||
rm -rf "${appDir}"
|
||||
git clone --depth=1 https://git.az-gruppe.com/AZ-Intec-GmbH/BPI.git "${appDir}"
|
||||
else
|
||||
git -C "${appDir}" pull --ff-only
|
||||
fi
|
||||
|
||||
if [ ! -f "${appDir}/server.js" ]; then
|
||||
echo "${appDir}/server.js fehlt. Bitte server.js in das BPI Repository committen."
|
||||
exit 1
|
||||
fi
|
||||
'';
|
||||
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = "bpi";
|
||||
Group = "bpi";
|
||||
StateDirectory = "bpi";
|
||||
WorkingDirectory = "/var/lib/bpi";
|
||||
ExecStart = "${pkgs.nodejs}/bin/node ${appDir}/server.js";
|
||||
Restart = "on-failure";
|
||||
RestartSec = "10s";
|
||||
};
|
||||
};
|
||||
|
||||
services.traefik.dynamicConfigOptions.http = {
|
||||
services.bpi.loadBalancer.servers = [
|
||||
{url = "http://localhost:${toString servicePort}/";}
|
||||
];
|
||||
|
||||
routers.bpi = {
|
||||
rule = "Host(`bpi.l.az-gruppe.com`)";
|
||||
tls = {
|
||||
certResolver = "ionos";
|
||||
};
|
||||
service = "bpi";
|
||||
entrypoints = "websecure";
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user