In Ghost 0.x, config was provided via a single config.js file with keys for each env.
In Ghost 1.0, config is provided via multiple config..json files, with built-in support for supplying both environment variables & command line arguments instead of values in the file.
The documentation is here: https://docs.ghost.org/docs#section-running-ghost-with-config-env-variables.
We constantly ran into issues with our made-up config format in Ghost 0.x. This format caused a lot of confusion as users would often edit the wrong section. Also it resulted in inconsistent naming conventions in use across the community for environment variables, as you’d see people change the config file to include process.env.MY_NAME_HERE. Finally we ran into problems with the files being big, easy to break, and hard to tell what was configurable and what wasn’t (we override some properties behind the scenes).
In Ghost 1.0 we solved these problems by switching to using nconf, and leveraging pre-built tools for handling multiple configuration files. There are now clearly separated defaults and overrides. Each individual file is small and in an easy to validate format.
It’s also far more flexible, because you can supply absolutely any config value as either an environment variable or an argument, using nconf’s naming convention as outlined in the docs: https://docs.ghost.org/docs#section-running-ghost-with-config-env-variables.
The biggest issue I think we have here is this option is a bit buried in the docs, and the naming convention is tricky to guess. We’re waiting on nconf to ship first-class upper-case env var support so that we can add this cleanly: https://github.com/indexzero/nconf/issues/271.
Hope this helps you get your configuration setup the way you’d like.