Global configuration

This section describes the location and contents of Zotonic’s global configuration files erlang.config and zotonic.config. There’s also site-specific configuration.

Config file locations

Zotonic depends on two global config files, called zotonic.config and erlang.config. On startup, Zotonic looks in the following places for these files:

  • The init argument zotonic_config_dir
  • The environment variable ZOTONIC_CONFIG_DIR
  • The directory $HOME/.zotonic
  • The directory /etc/zotonic (only on Unix)
  • The OS specific directory for application config files

The OS specific directories are:

  • On Unix: ~/.config/zotonic/config/
  • On macOS: ~/Library/Application Support/zotonic/config/

In those directories the system searches for a zotonic* file in the following subdirectories (assuming the version of Zotonic is 1.2.3 and the node is called zotonic001@foobar):

  • zotonic001@foobar/
  • zotonic001/
  • 1.2.3/
  • 1.2/
  • 1/
  • .

The default is the OS specific directory, with as subdirectory the major version number of Zotonic (in this case 1). For Linux this would be ~/.config/zotonic/config/1/

The nodename is the name of the Zotonic Erlang node, which defaults to zotonic001 (and can be set with $SNAME or $LNAME environment variable). Using the node name in the configuration path comes in handy when you want to run multiple Zotonic instances simultaneously.

By checking for version you can have separate configuration files for different versions of Zotonic which are running simultaneously.

If the Zotonic startup script finds a zotonic* file in one of the directories, it stops looking, so files in the other directories are ignored.

Zotonic will also load all configuration files in the config.d directory inside the Zotonic directory.

In the course of Zotonic starting up, it will print the locations of the global config files that it is using:

12:42:17.351 [info] zotonic_launcher_sup:36 ================
12:42:17.351 [info] zotonic_launcher_sup:37 Zotonic starting
12:42:17.351 [info] zotonic_launcher_sup:38 ================
12:42:17.351 [info] zotonic_launcher_sup:39 Init files used:
12:42:17.356 [info] zotonic_launcher_sup:40 - /home/user/.config/zotonic/config/1/erlang.config
12:42:17.356 [info] zotonic_launcher_sup:41 Config files used:
12:42:17.357 [info] zotonic_launcher_sup:43 - /home/user/.config/zotonic/config/1/zotonic.config
12:42:17.357 [info] zotonic_launcher_sup:44 ================

The used configuration files can be listed with bin/zotonic configfiles:

user$ bin/zotonic configfiles
Zotonic config files for zotonic001@foobar:
- /home/user/.config/zotonic/config/1.0/erlang.config
- /home/user/.config/zotonic/config/1.0/zotonic.config

The zotonic.config file

After installed for the first time, the ~/.zotonic/1/zotonic.config file is well annotated with comments about what each setting does. When in doubt, consult the stock apps/zotonic_launcher/priv/config/zotonic.config.in file for explanation about all config settings.

In the zotonic.config file you will find the password for the zotonic_status site where you can manage the server.

Zotonic configurations can also be fetched in the Erlang shell. For example, view the zotonic_status password:

z_config:get(password).

The Zotonic configuration files are read by the zotonic_launcher application before starting the core zotonic applications and all sites.

The zotonic configuration van be viewed with bin/zotonic config:

Zotonic config for zotonic001@aloha:
====================================

zotonic:
    environment: production
    zotonic_apps: /home/user/zotonic/apps_user
    security_dir: /home/user/.config/zotonic/security
    password: Bthj3ruGbmgJxfmc
    timezone: UTC
    listen_ip: any
    listen_ip6: any
    listen_port: 8000
    ssl_listen_port: 8443
    port: 80
    ssl_port: 443
    max_connections: 20000
    ...

The erlang.config file

The erlang.config file contains application environment variables for the Erlang applications that Zotonic depends on. Here you can configure for instance the paths for the log files (in the lager section), emqtt ports, et cetera.

This file is included as an init configuration option when starting erl via the command line script in bin/zotonic.

The erlang configuration van be viewed with bin/zotonic config erlang:

Erlang init for zotonic001@aloha:
=================================

exometer:
    predefined:
      - {[erlang,memory],{function,erlang,memory,[],value,[]},[]}
      - {[erlang,system_info],
         {function,erlang,system_info,['$dp'],value,[process_count]},
         []}
      - {[erlang,statistics],
         {function,erlang,statistics,['$dp'],value,[run_queue]},
         []}
      - {[erlang,io],
         {function,erlang,statistics,[io],match,{{'_',input},{'_',output}}},
         []}
filezcache:
    data_dir: priv/filezcache/data
    journal_dir: priv/filezcache/journal
lager:
...