fix service
This commit is contained in:
parent
11e416b8ef
commit
6d17840802
1 changed files with 39 additions and 23 deletions
60
service.nix
60
service.nix
|
@ -2,21 +2,23 @@
|
|||
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.ulogd;
|
||||
settingsFormat = pkgs.formats.yaml { };
|
||||
settingsFile = settingsFormat.generate "lights-web-config.yaml" cfg.settings;
|
||||
name = "lights-web";
|
||||
cfg = config.services."${name}";
|
||||
#settingsFormat = pkgs.formats.yaml { };
|
||||
#settingsFile = settingsFormat.generate "lights-web-config.yaml" cfg.settings;
|
||||
settingsFile = builtins.toFile "${name}-config.yaml" (pkgs.lib.generators.toYAML {} cfg.settings);
|
||||
in {
|
||||
options = {
|
||||
services.ulogd = {
|
||||
enable = mkEnableOption "lights-web";
|
||||
services."${name}" = {
|
||||
enable = mkEnableOption "${name}";
|
||||
|
||||
settings = mkOption {
|
||||
type = settingsFormat.type;
|
||||
#type = settingsFormat.type;
|
||||
default = {};
|
||||
};
|
||||
|
||||
domain = mkOption {
|
||||
type = str;
|
||||
type = types.str;
|
||||
default = "lights.waw.hackerspace.pl";
|
||||
};
|
||||
};
|
||||
|
@ -26,15 +28,27 @@ in {
|
|||
paho = pkgs.fetchFromGitHub {
|
||||
owner = "eclipse";
|
||||
repo = "paho.mqtt.javascript";
|
||||
rev = "v1.1.0";
|
||||
sha256 = "1yihw5pab5s6l9zds9n566iai63zy3zhdlw70735fj504zdqjxv6";
|
||||
rev = "v1.0.3";
|
||||
sha256 = "1b2dyiydlg7fh9b2lmm4vl46czspkzaflq5caawhgzqdqcz169jb";
|
||||
};
|
||||
|
||||
name = "lights-web";
|
||||
user = name;
|
||||
python = pkgs.python3.withPackages (pp:[ lights-web pp.gunicorn ]);
|
||||
socket_dir = "/run/${name}/";
|
||||
secrets_dir = "/run/secrets/${name}/";
|
||||
repo = ./.;
|
||||
|
||||
static-files = pkgs.runCommandNoCC "${name}-static-files" {} ''
|
||||
mkdir -p $out
|
||||
pushd $out
|
||||
mkdir -p static;
|
||||
ln -s ${repo}/lights_web/static/favicon.png static/
|
||||
ln -s ${repo}/lights_web/static/index.html index.html
|
||||
ln -s ${paho}/src/paho-mqtt.js static/paho-mqtt.js
|
||||
popd
|
||||
'';
|
||||
lights-web = pkgs.callPackage ./default.nix {};
|
||||
|
||||
user = name;
|
||||
python = pkgs.python3.withPackages (pp:[ lights-web pp.gunicorn ]);
|
||||
socket_dir = "/run/${name}/";
|
||||
secrets_dir = "/run/secrets/${name}/";
|
||||
|
||||
cleanup-script = pkgs.writeShellScript "${name}-cleanup" ''
|
||||
rm -rf "${secrets_dir}"
|
||||
|
@ -48,10 +62,15 @@ in {
|
|||
${pkgs.coreutils}/bin/install --owner=${user} --mode=400 -t ${secrets_dir} \
|
||||
/etc/nixos/secrets/${name}/secrets.yaml \
|
||||
|
||||
${pkgs.coreutils}/bin/install --owner=${user} --mode=500 --directory /run/${socket_dir}
|
||||
${pkgs.coreutils}/bin/install --owner=${user} --mode=700 --directory ${socket_dir}
|
||||
${pkgs.acl}/bin/setfacl -m "u:nginx:rx" ${socket_dir}
|
||||
'';
|
||||
in mkIf cfg.enable {
|
||||
users.users."${user}" = {
|
||||
group = "users";
|
||||
useDefaultShell = true;
|
||||
};
|
||||
|
||||
systemd.services."${name}" = {
|
||||
description = "Web interface for switching HS lights";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
@ -64,19 +83,16 @@ in {
|
|||
serviceConfig = {
|
||||
User = "${user}";
|
||||
Type = "simple";
|
||||
ExecStart = "${python}/bin/gunicorn -b unix:${socket_dir}/web.sock lights_web:app()";
|
||||
ExecStartPre = ''!${prepare-script}'';
|
||||
ExecStopPost = ''!${cleanup-script}'';
|
||||
ExecStart = "${python}/bin/gunicorn -b unix:${socket_dir}web.sock lights_web:app()";
|
||||
ExecStartPre = [ ''!${prepare-script}'' ];
|
||||
ExecStopPost = [ ''!${cleanup-script}'' ];
|
||||
};
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."${cfg.domain}" =
|
||||
{
|
||||
locations."/static/" = {
|
||||
alias = "${repo}/lights_web/static/";
|
||||
};
|
||||
locations."/index.html" = {
|
||||
alias = "${repo}/lights_web/static/index.html";
|
||||
root = "${static-files}/";
|
||||
};
|
||||
locations."/" = {
|
||||
proxyPass = "http://unix://${socket_dir}/web.sock";
|
||||
|
|
Loading…
Reference in a new issue