Inside the Box¶
While Chassis handles the setup of the virtual machine for you, it can be useful to know exactly what’s happening inside of it.
Chassis VMs use the networking features provided by Vagrant and the underlying VM management (VirtualBox, VMWare Fusion, etc). The VM is connected to the host using a private network, with a dynamically assigned IP address (unless a static IP is specified in your config).
DNS resolution is handled by Avahi, which is a Zeroconf/Bonjour service. This
responds to DNS-SD (DNS Service Discovery, also called mDNS) requests, which are
requested by the host for
.local domains. This requires a DNS-SD daemon on
your host; macOS automatically includes this (Bonjour), most Linux systems also
include it (Avahi), and Windows requires it to be installed (Bonjour for
Windows, installed automatically by iTunes, Skype, Adobe Creative Suite, and
For additional domain names specified in the config, and WordPress multisite
domains, other names are registered with Avahi using the
daemon (source in
puppet/chassis-hosts.py). Files inside the
/etc/chassis-hosts/conf.d directory are automatically watched by the daemon,
and updates are pushed into the configuration on change. (The daemon uses D-Bus
to communicate with Avahi.)
local-config-hosts.php attaches to the WordPress hooks for site creation,
deletion, and update, and writes all the domains it knows about into
Synced folders are handled by the VM manager. Chassis automatically uses the
default implementation provided by the VM manager, unless the
option is used.
Folders are set to be world-writable and world-readable (777) to ensure compatibility with WordPress plugins that expect files to be writable.
By default, the Chassis root directory is synced to
/vagrant. When a custom
root directory is specified in the configuration, an additional synced folder is
set to map the root directory to
/chassis on the system. If the
content directories aren’t under the root directory, additional synced
folders are added for each to
HTTP requests are served up by nginx.
For single-site WordPress, the
site.nginx.conf.erb template (in
puppet/modules/chassis/templates) is used, while
multisite.nginx.conf.erb is used for multisite configuration. These
templates are used to generate the site’s configuration, which is placed in
/etc/nginx/sites-available/<domain>, and symlinked into
The primary nginx configuration is loaded from
/etc/nginx/nginx.conf by the
system, and this file is provisioned from the
nginx.conf.erb template. This
is a standard nginx setup, based on the file bundled with the Ubuntu package.
Further configuration files are included by the main configuration, which loads
/etc/nginx/*.conf to allow for further system-level configuration. The
site config also loads
/etc/nginx/sites-available/<domain>.d/* to allow
Chassis extensions to further configure sites.
For any request not for a specific file, nginx passes the request via FastCGI to PHP.
PHP runs in FastCGI mode (
php-fpm), using a Unix socket at
/var/run/php5-fpm.sock. The PHP configuration at
/etc/php/<version>/fpm/php.ini is provisioned from the
template. This is a standard PHP configuration based on the
in the Ubuntu package. The CLI configuration is also provisioned to the same
Additionally, PHP loads all files from
corresponding CLI directory) in alphabetical order. Chassis extensions can place
additional configuration into this directory. PHP extensions installed via
php-xdebug) will automatically place configuration into this
directory to load the extension (typically with a filename like
The root MySQL credentials, if you need them, are: