Zero configuration builds#

Note

This feature is available since Volto 13.

In the past (before Volto 13), Volto was configured in build time using several environment variables, commonly supplied via the command line, such as the following:

PORT=11001 RAZZLE_API_PATH=https://plone.org/api pnpm build`

and since Razzle is an isomorphic application, some of these values passed on build time, were hardcoded in the code because the code in client and server need to know them up front to in order to work.

Volto 13 has several new features that allows zero configuration on build time, using some sensible defaults and using the current request to know in which domain Volto is being hosted and configuring itself in runtime. You can still pass the environment variables in build time, and it will work as it used to be, but we encourage you to have "builds that rules them all" and use only runtime variables to configure Volto.

Configuring RAZZLE_API_PATH from the request#

Volto is able to look into the request and infer the API path to be used. This only happens in seamless mode, since it assumes that the backend will be hosted in the same path (the root) of the request that is getting. This feature relies in the Host header. You can set this header in the webserver that you are using in front of Volto. This configuration is for nginx:

# ...more config here

server {
  listen 80;
  server_name plone.org;

  client_max_body_size 1G;

  access_log /dev/stdout;
  error_log /dev/stdout;

  location ~(.*)$ {

# ...more config here

    proxy_set_header        Host $host;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_pass              http://frontend;
  }
}

Configuring PORT on runtime#

PORT environment variable is also configurable at runtime, which is specially useful in production since you can inject it in the run command line or in your favorite process manager, per config, without having to rebuild Volto in the process. In PM2 it would be like:

module.exports = {
  apps: [
     {
        script: "/srv/mywebsite.com/build/server.js",
        name: "mywebsite.com-volto",
        cwd: "/srv/mywebsite.com",
        env: {
          NODE_ENV: "production",
          PORT: "11001"
        }
     }
    ]
};