diff --git a/modules/module-list.nix b/modules/module-list.nix index 56ada293a01..3206c08fef2 100644 --- a/modules/module-list.nix +++ b/modules/module-list.nix @@ -44,6 +44,7 @@ ./security/polkit.nix ./security/setuid-wrappers.nix ./security/sudo.nix + ./services/amqp/rabbitmq.nix ./services/audio/alsa.nix ./services/audio/pulseaudio.nix ./services/backup/hydra-mirror.nix diff --git a/modules/services/amqp/rabbitmq.nix b/modules/services/amqp/rabbitmq.nix new file mode 100644 index 00000000000..3322ab329e7 --- /dev/null +++ b/modules/services/amqp/rabbitmq.nix @@ -0,0 +1,90 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + + cfg = config.services.rabbitmq; + + run = cmd: "${pkgs.sudo}/bin/sudo -E -u rabbitmq ${cmd}"; + +in + +{ + + + ###### interface + + options = { + + services.rabbitmq = { + + enable = mkOption { + default = false; + description = '' + Whether to enable the RabbitMQ server, an Advanced Message + Queuing Protocol (AMQP) broker. + ''; + }; + + listenAddress = mkOption { + default = "127.0.0.1"; + example = ""; + description = '' + IP address on which RabbitMQ will listen for AMQP + connections. Set to the empty string to listen on all + interfaces. Note that RabbitMQ creates a user named + guest with password + guest by default, so you should delete + this user if you intend to allow external access. + ''; + }; + + }; + + }; + + + ###### implementation + + config = mkIf cfg.enable { + + environment.systemPackages = [ pkgs.rabbitmq_server ]; + + users.extraUsers = singleton + { name = "rabbitmq"; + description = "RabbitMQ server user"; + home = "/var/empty"; + }; + + jobs.rabbitmq = { + description = "RabbitMQ server"; + + startOn = "started network-interfaces"; + + preStart = + '' + mkdir -m 0700 -p /var/lib/rabbitmq + chown rabbitmq /var/lib/rabbitmq + + mkdir -m 0700 -p /var/log/rabbitmq + chown rabbitmq /var/log/rabbitmq + ''; + + environment.HOME = "/var/lib/rabbitmq"; + environment.RABBITMQ_NODE_IP_ADDRESS = cfg.listenAddress; + + exec = + '' + ${run "${pkgs.rabbitmq_server}/sbin/rabbitmq-server"} + ''; + + preStop = + '' + ${run "${pkgs.rabbitmq_server}/sbin/rabbitmqctl stop"} + ''; + }; + + }; + +}