diff --git a/hosts/web-2/configuration.nix b/hosts/web-2/configuration.nix index 023d206..d7e41c3 100644 --- a/hosts/web-2/configuration.nix +++ b/hosts/web-2/configuration.nix @@ -9,6 +9,7 @@ ./bubblesort.nix ./clerie.nix ./gitea.nix + ./iot-data.nix ./ip.nix ./meow.nix ./milchinsel.nix diff --git a/hosts/web-2/iot-data.nix b/hosts/web-2/iot-data.nix new file mode 100644 index 0000000..a5f7413 --- /dev/null +++ b/hosts/web-2/iot-data.nix @@ -0,0 +1,37 @@ +{pkgs, ...}: + +{ + users.users.iot-data = { + description = "IOT Data Service"; + group = "iot-data"; + home = "/var/lib/iot-data/"; + useDefaultShell = true; + isSystemUser = true; + }; + users.groups.iot-data = {}; + + systemd.services.iot-data = { + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + RuntimeDirectory = "iot-data"; + StateDirectory = "iot-data"; + User = "iot-data"; + Group = "iot-data"; + }; + environment = { + IOT_DATA_CONFIG = "/var/src/iot-data-config.json"; + }; + script = "gunicorn -w 1 -b [::1]:8235 iot_data:app"; + path = with pkgs; [ (python38.withPackages (ps: [ ps.gunicorn iot-data ])) ]; + }; + + services.nginx.virtualHosts = { + "iot-data.clerie.de" = { + enableACME = true; + addSSL = true; + locations."/" = { + proxyPass = "http://[::1]:8235"; + }; + }; + }; +} diff --git a/pkgs/iot-data/default.nix b/pkgs/iot-data/default.nix new file mode 100644 index 0000000..cb8ea32 --- /dev/null +++ b/pkgs/iot-data/default.nix @@ -0,0 +1,28 @@ +{ + buildPythonPackage, + flask, + python3, +}: + +let + src = fetchGit { + url = "https://git.clerie.de/clerie/iot-data.git"; + rev = "519c68c455961042b282db94a94f0fad0fa2e965"; + }; + pname = "iot-data"; + version = "0.0.1"; + + +in buildPythonPackage rec { + inherit src pname version; + + propagatedBuildInputs = [ + flask + ]; + + postInstall = '' + mkdir -p $out/${python3.sitePackages}/iot_data + ''; + + doCheck = false; +} diff --git a/pkgs/overlay.nix b/pkgs/overlay.nix index ddb38c9..ed3054a 100644 --- a/pkgs/overlay.nix +++ b/pkgs/overlay.nix @@ -1,6 +1,7 @@ self: super: { anycast_healthchecker = self.python3.pkgs.callPackage ./anycast_healthchecker {}; flask-excel = self.python3.pkgs.callPackage ./flask-excel {}; + iot-data = self.python3.pkgs.callPackage ./iot-data {}; pyexcel-xlsx = self.python3.pkgs.callPackage ./pyexcel-xlsx {}; pyexcel-webio = self.python3.pkgs.callPackage ./pyexcel-webio {}; uptimestatus = self.python3.pkgs.callPackage ./uptimestatus {};