deployer/docs/hosts.md
Anton Medvedev 54ad810832 Update docs
2022-03-22 15:07:23 +01:00

3.8 KiB

Hosts

To define a new host use the host() function. Deployer keeps a list of all defined hosts in the Deployer::get()->hosts collection.

host('example.org');

Each host contains it's own configuration key-value pairs. The host() call defines two important configs: alias and hostname.

  • hostname - used when connecting to remote host.
  • alias - used as a key in Deployer::get()->hosts collection.
task('test', function () {
    writeln('The {{alias}} is {{hostname}}');
});
$ dep test
[example.org] The example.org is example.org

We can override hostname via set() method:

host('example.org')
    ->set('hostname', 'example.cloud.google.com');

The hostname will be used for the ssh connection, but the host will be referred by its alias when running Deployer.

$ dep test
[example.org] The example.org is example.cloud.google.com

Another important ssh connection parameter is remote_user.

host('example.org')
    ->set('hostname', 'example.cloud.google.com')
    ->set('remote_user', 'deployer');

Now Deployer will connect using something like ssh deployer@example.cloud.google.com to establishing connection.

Also, Deployer's Host class has special setter methods (for better IDE autocompletion).

host('example.org')
    ->setHostname('example.cloud.google.com')
    ->setRemoteUser('deployer');

Host config

alias

The identifier used to identify a host. You can use actual hostname or something like prod or staging.

hostname

Deployer uses this config for actual ssh connection.

remote_user

Deployer uses this config for actual ssh connection. If not specified, Deployer will be using RemoteUser from ~/.ssh/config file, or current OS username.

port

Port of remote ssh server to connect to. Default is 22.

config_file

Default is ~/.ssh/config.

:::info Config file It is a good practice to keep connection parameters out of deploy.php file, as they can change depending on where the deploy is executed from. Only specify hostname and remote_user and other keep in ~/.ssh/config:

Host *
  IdentityFile ~/.ssh/id_rsa

:::

identity_file

For example, ~/.ssh/id_rsa.

forward_agent

Default is true.

ssh_multiplexing

Default is true.

shell

Default is bash -ls.

deploy_path

For example, ~/myapp.

labels

Key-value pairs for host selector.

ssh_arguments

For example, ['-o UserKnownHostsFile=/dev/null']

ssh_control_path

Default is ~/.ssh/%C.

If CI env is present, default value is /dev/shm/%C.

Multiple hosts

You can pass multiple hosts to the host function:

host('example.org', 'deployer.org', ...)
    ->setRemoteUser('anton');

Host ranges

If you have a lot of hosts following similar patterns, you can describe them like this rather than listing each hostname:

host('www[01:50].example.org');

For numeric patterns, leading zeros can be included or removed, as desired. Ranges are inclusive.

You can also define alphabetic ranges:

host('db[a:f].example.org');

Localhost

The localhost() function defines a special local host. Deployer will not connect to this host, but will execute commands locally instead.

localhost(); // Alias and hostname will be "localhost".
localhost('ci'); // Alias is "ci", hostname is "localhost".

YAML Inventory

You can use the import() function to keep host definitions in a separate file. For example, inventory.yaml.

import('inventory.yaml');
hosts:
  example.org:
    remote_user: deployer
  deployer.org:
    remote_user: deployer