Next: , Previous: , Up: System Configuration   [Contents][Index]

8.15 Invoking guix deploy

We’ve already seen operating-system declarations used to manage a machine’s configuration locally. Suppose you need to configure multiple machines, though—perhaps you’re managing a service on the web that’s comprised of several servers. guix deploy enables you to use those same operating-system declarations to manage multiple remote hosts at once as a logical “deployment”.

Note: The functionality described in this section is still under development and is subject to change. Get in touch with us on!

guix deploy file

Such an invocation will deploy the machines that the code within file evaluates to. As an example, file might contain a definition like this:

;; This is a Guix deployment of a "bare bones" setup, with
;; no X11 display server, to a machine with an SSH daemon
;; listening on localhost:2222. A configuration such as this
;; may be appropriate for virtual machine with ports
;; forwarded to the host's loopback interface.

(use-service-modules networking ssh)
(use-package-modules bootloaders)

(define %system
   (host-name "gnu-deployed")
   (timezone "Etc/UTC")
   (bootloader (bootloader-configuration
                (bootloader grub-bootloader)
                (target "/dev/vda")
                (terminal-outputs '(console))))
   (file-systems (cons (file-system
                        (mount-point "/")
                        (device "/dev/vda1")
                        (type "ext4"))
    (append (list (service dhcp-client-service-type)
                  (service openssh-service-type
                            (permit-root-login #t)
                            (allow-empty-passwords? #t))))

(list (machine
       (system %system)
       (environment managed-host-environment-type)
       (configuration (machine-ssh-configuration
                       (host-name "localhost")
                       (identity "./id_rsa")
                       (port 2222)))))

The file should evaluate to a list of machine objects. This example, upon being deployed, will create a new generation on the remote system realizing the operating-system declaration %system. environment and configuration specify how the machine should be provisioned—that is, how the computing resources should be created and managed. The above example does not create any resources, as a 'managed-host is a machine that is already running the Guix system and available over the network. This is a particularly simple case; a more complex deployment may involve, for example, starting virtual machines through a Virtual Private Server (VPS) provider. In such a case, a different environment type would be used.

Data Type: machine

This is the data type representing a single machine in a heterogeneous Guix deployment.


The object of the operating system configuration to deploy.


An environment-type describing how the machine should be provisioned. At the moment, the only supported value is managed-host-environment-type.

configuration (default: #f)

An object describing the configuration for the machine’s environment. If the environment has a default configuration, #f maybe used. If #f is used for an environment with no default configuration, however, an error will be thrown.

Data Type: machine-ssh-configuration

This is the data type representing the SSH client parameters for a machine with an environment of managed-host-environment-type.

port (default: 22)
user (default: "root")
identity (default: #f)

If specified, the path to the SSH private key to use to authenticate with the remote host.

Next: , Previous: , Up: System Configuration   [Contents][Index]