diff options
author | Maciej Krüger <mkg20001@gmail.com> | 2021-11-03 03:59:44 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-03 03:59:44 +0100 |
commit | f7dbaa0754f7aeb12a4e853a9d913ea012172532 (patch) | |
tree | 0c4e621847788e7917742c9496e193abd3cb6077 /nixos | |
parent | fc98560b99c4249351fe41ab6035c943bc15e92d (diff) | |
parent | f21e2644d338c94dd0528c2433b7f3d9dd3ef933 (diff) | |
download | nixpkgs-f7dbaa0754f7aeb12a4e853a9d913ea012172532.tar nixpkgs-f7dbaa0754f7aeb12a4e853a9d913ea012172532.tar.gz nixpkgs-f7dbaa0754f7aeb12a4e853a9d913ea012172532.tar.bz2 nixpkgs-f7dbaa0754f7aeb12a4e853a9d913ea012172532.tar.lz nixpkgs-f7dbaa0754f7aeb12a4e853a9d913ea012172532.tar.xz nixpkgs-f7dbaa0754f7aeb12a4e853a9d913ea012172532.tar.zst nixpkgs-f7dbaa0754f7aeb12a4e853a9d913ea012172532.zip |
Merge pull request #144172 from mkg20001/odoo
Diffstat (limited to 'nixos')
-rw-r--r-- | nixos/modules/module-list.nix | 1 | ||||
-rw-r--r-- | nixos/modules/services/finance/odoo.nix | 122 | ||||
-rw-r--r-- | nixos/tests/all-tests.nix | 1 | ||||
-rw-r--r-- | nixos/tests/odoo.nix | 27 |
4 files changed, 151 insertions, 0 deletions
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index f47b56e7409..eed0b802b95 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -391,6 +391,7 @@ ./services/display-managers/greetd.nix ./services/editors/emacs.nix ./services/editors/infinoted.nix + ./services/finance/odoo.nix ./services/games/crossfire-server.nix ./services/games/deliantra-server.nix ./services/games/factorio.nix diff --git a/nixos/modules/services/finance/odoo.nix b/nixos/modules/services/finance/odoo.nix new file mode 100644 index 00000000000..3fcb2b3966a --- /dev/null +++ b/nixos/modules/services/finance/odoo.nix @@ -0,0 +1,122 @@ +{ config, pkgs, lib, ... }: + +with lib; + +let + cfg = config.services.odoo; + format = pkgs.formats.ini {}; +in +{ + options = { + services.odoo = { + enable = mkEnableOption "odoo"; + + package = mkOption { + type = types.package; + default = pkgs.odoo; + defaultText = literalExpression "pkgs.odoo"; + description = "Odoo package to use."; + }; + + addons = mkOption { + type = with types; listOf package; + default = []; + example = literalExpression "[ pkgs.odoo_enterprise ]"; + description = "Odoo addons"; + }; + + settings = mkOption { + type = format.type; + default = {}; + description = '' + Odoo configuration settings. For more details see https://www.odoo.com/documentation/15.0/administration/install/deploy.html + ''; + }; + + domain = mkOption { + type = with types; nullOr str; + description = "Domain to host Odoo with nginx"; + default = null; + }; + }; + }; + + config = mkIf (cfg.enable) (let + cfgFile = format.generate "odoo.cfg" cfg.settings; + in { + services.nginx = mkIf (cfg.domain != null) { + upstreams = { + odoo.servers = { + "127.0.0.1:8069" = {}; + }; + + odoochat.servers = { + "127.0.0.1:8072" = {}; + }; + }; + + virtualHosts."${cfg.domain}" = { + extraConfig = '' + proxy_read_timeout 720s; + proxy_connect_timeout 720s; + proxy_send_timeout 720s; + + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Real-IP $remote_addr; + ''; + + locations = { + "/longpolling" = { + proxyPass = "http://odoochat"; + }; + + "/" = { + proxyPass = "http://odoo"; + extraConfig = '' + proxy_redirect off; + ''; + }; + }; + }; + }; + + services.odoo.settings.options = { + proxy_mode = cfg.domain != null; + }; + + users.users.odoo = { + isSystemUser = true; + group = "odoo"; + }; + users.groups.odoo = {}; + + systemd.services.odoo = { + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" "postgresql.service" ]; + + # pg_dump + path = [ config.services.postgresql.package ]; + + requires = [ "postgresql.service" ]; + script = "HOME=$STATE_DIRECTORY ${cfg.package}/bin/odoo ${optionalString (cfg.addons != []) "--addons-path=${concatMapStringsSep "," escapeShellArg cfg.addons}"} -c ${cfgFile}"; + + serviceConfig = { + DynamicUser = true; + User = "odoo"; + StateDirectory = "odoo"; + }; + }; + + services.postgresql = { + enable = true; + + ensureUsers = [{ + name = "odoo"; + ensurePermissions = { "DATABASE odoo" = "ALL PRIVILEGES"; }; + }]; + ensureDatabases = [ "odoo" ]; + }; + }); +} diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 5f919dbf785..f4d6800aff6 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -172,6 +172,7 @@ in installed-tests = pkgs.recurseIntoAttrs (handleTest ./installed-tests {}); invidious = handleTest ./invidious.nix {}; oci-containers = handleTestOn ["x86_64-linux"] ./oci-containers.nix {}; + odoo = handleTest ./odoo.nix {}; # 9pnet_virtio used to mount /nix partition doesn't support # hibernation. This test happens to work on x86_64-linux but # not on other platforms. diff --git a/nixos/tests/odoo.nix b/nixos/tests/odoo.nix new file mode 100644 index 00000000000..96e3405482b --- /dev/null +++ b/nixos/tests/odoo.nix @@ -0,0 +1,27 @@ +import ./make-test-python.nix ({ pkgs, lib, ...} : with lib; { + name = "odoo"; + meta = with pkgs.lib.maintainers; { + maintainers = [ mkg20001 ]; + }; + + nodes = { + server = { ... }: { + services.nginx = { + enable = true; + recommendedProxySettings = true; + }; + + services.odoo = { + enable = true; + domain = "localhost"; + }; + }; + }; + + testScript = { nodes, ... }: + '' + server.wait_for_unit("odoo.service") + server.wait_until_succeeds("curl -s http://localhost:8069/web/database/selector | grep '<title>Odoo</title>'") + server.succeed("curl -s http://localhost/web/database/selector | grep '<title>Odoo</title>'") + ''; +}) |