Config Vars Frontend - How to pass config vars to the frontend
Suppose you have a variable that you want to configure via dokku config:set ... and you want to access this value in the backend.
It’s a bit of a puzzle to figure out all of the pieces needed to make that work.
The frontend is built by the com.github.eirslett.frontend-maven-plugin which is configured in the pom.xml. On dokku, this happens during the build phase.
Normally, config vars are not available during the build phase, but you can override this by doing this:
- First, make sure the variable is prefixed with
REACT_APP_- For example, not
START_QTR, butREACT_APP_START_QTR
- For example, not
- One time setup:
dokku docker-options:add courses-qa build '--build-arg REACT_APP_START_QTR' - Add the variable to the
Dockerfileas anARGARG REACT_APP_START_QTR - Then, set up a script to get all of the variables that start with
REACT_APPand put them in a.envfile in the frontend directory during the build phase:RUN (cd /home/app/frontend; ./scripts/create_dotenv_dokku.sh; pwd; ls -al; cat ./scripts/create_dotenv_dokku.sh; cat ./.env; cd ..)
The script ./scripts/create_dotenv_dokku.sh looks like this:
#!/usr/bin/env sh
# Copy REACT_APP_ variables to a local .env
rm -rf .env
touch .env
env | grep '^REACT_APP_' | while read -r line ; do
echo "${line} " >> .env
done
Then, in package.json prefix npm run build or npm run start with env-cmd like this:
"build": "env-cmd react-scripts build",
In the React code, you can then access the variables like this:
process.env.REACT_APP_START_QTR
Relevant documentation:
- The main documentation is here: https://dokku.com/docs/configuration/environment-variables/
- This is also relevant: https://dokku.com/docs/deployment/builders/dockerfiles/#build-time-configuration-variables
- This issue also has important details: https://github.com/dokku/dokku/issues/1860