There are many ways to pass environment variables into a server. You can set them in your actual OS shell before starting box, set them as CommandBox env vars, use the commandbox-dotenv
module to read them from a .env
file or many Docker-based options. Just in case you wanted one MORE way to do it, you can also set env vars directly in your server.json
file.
{
"name" : "My server",
"env":{
"brad":"wood",
"cfconfig":{
"requestTimeout":"1,2,3,4"
},
"cfconfig_secureJSON" : false,
"luis":{
"majano":"${brad}"
},
"myPort":"1234"
},
"web":{
"HTTP":{
"port":"${myPort}"
}
}
}
These env vars will not be visible in the CommandBox shell like a .env
file is, but will be used exclusively when starting the server. They will be visible inside the running server and also present in CommandBox to any interception points or CFConfig while the server is starting.
Note the two CFConfig examples above do the same thing (assuming you have commandbox-cfconfig
installed. Any nested keys will be concatenated with underscores when the actual env var is set. Therefore the cfconfig
key and nested requestTimeout
key will create an env var actually called cfconfig_requestTimeout
when the server starts. This is simply a convenience to help you group together related env vars with a matching prefix.
You can see that the web.http.port
is using an env var from the env
block above it. All env vars in the env
block will be added to CommandBox's environment BEFORE the rest of the JSON file is expanded. Env vars in the env
block can ALSO reference other pre-existing env vars. In the example above, ${brad}
is assuming there is a pre-existing env var of that name set outside this file.
In case anyone is wondering, it's actually possible to override your server.json
settings from inside the env
block like so:
{
"env":{
"box":{
"server":{
"web":{
"HTTP":{
"port":"8080"
}
}
}
},
"box_server_web_SSL_port" : "1443"
},
"web":{
"HTTP":{
"enable":true
}
}
}
but we can't imagine why you'd ever want to do that :) That would be the equivalent of setting the following env vars outside of CommandBox:
box_server_web_HTTP_port=8080
box_server_web_SSL_port=1443