Environment Variables
Environment variables are useful for feeding your application information from outside the running of that application. It is typically used to set things like database connection details and API keys.
Special Characters in Environment Variables
In the environment variable keys, you can only use a-z, 0-9, or underscore (_
). Environment variable values are applied literally, with the exception of parentheses, commas, and double quotes.
Parentheses
Parentheses can cause the build or rollout process to fail, depending on when they are available during deployment. They cannot be used in environment variables.
Commas
Unescaped commas are interpreted as delimiters and cannot be used in environment variables.
- For example:
write_stock,read_orders
will cause the rollout process to fail. - To keep a comma inside a string, escape it with a backslash (
\
) like this:write_stock\,read_orders
— which will be applied aswrite_stock,read_orders
.
Double Quotes
Unescaped double quotes are either disregarded or will cause the rollout process to fail.
- For example,
"my_example_variable"
will be applied asmy_example_variable
. - To keep double quotes around a variable, escape them with a backslash (
\
) like this:\"my_example_var\"
— which will be applied as"my_example_var"
. - If double quotes are inside of a string (e.g.
my_exampl"e_text
), the rollout process will fail. - To keep double quotes inside a string, escape them with a backslash (
\
) like this:my_examp\"le_var
— which will be applied asmy_examp"le_var
.
Base64 Encoded Variables
If your environment variable is Base64 encoded and you experience issues (e.g. 500 errors in the browser, build errors, runtime errors, etc.), try wrapping the value of the variable with single quotes.
Adding Environment Variables
Environment variables can be added in the Application details step when adding an application or on your application’s Environment variables page after deployment.
In Application Details
To add environment variables when adding your application, expand the Environment variables section, enter the key-value pairs, and select if the variables are to be available during runtime and/or the build process.
After Deployment
To add environment variables after deployment, go to your application’s Environment variables page and click Add environment variable. Add the key-value pairs in the Add environment variable modal/pop-up window, select if the variables are to be available during runtime and/or the build process, and click Save.
To add multiple environment variables, copy the keys and values using CMD + C (Mac) or CTRL + C (Windows), and in the Add environment variable window, press CMD + V (Mac) or CTRL + V (Windows).
To deploy the changes, click Deployments > Deploy now.
Editing Environment Variables
You can edit variable names (keys) or values on the Environment variables page. To edit a variable, click the Edit (pencil) icon, make your changes, and click Save to update your variable(s). To deploy the changes, click Deployments > Deploy now.
When you create an internal connection and select the Add environment variables… checkbox, the variable names (keys) are automatically created. Some applications may expect environment variables with different names. For example, if you want to use a database with Laravel, the database.php file contains variable names different from those automatically created in MyKinsta. To use the variable names defined in the application, edit each variable as needed and change the key to match what’s defined in the database.php file.
Using Environment Variables
How you use environment variables depends on your application. In Node, for example, you can access a variable named API_KEY
with process.env.API_KEY
. In PHP, you would use getenv('API_KEY')
.
Internal Connections and the Build Process
Internal connections are only available during runtime; they are not available during the build process.
If your application tries to connect to a database using an internal connection during the build process, this causes an error that says the database is not running, which makes the build fail. This is expected because the internal connection is not live during the build; it can only be used during runtime.
There are a couple of ways to work around this.
Option 1: Move the logic that connects to the database from the application’s build command to the start command. For example: if you have a command like prisma migrate
in the build process and move that command to the start command, your application will only access the database during runtime, and the build will be successful.
Option 2: Add separate environment variables as needed for the database connection, one available for the build process, and the other only for runtime. The keys can be the same (e.g. DB_CONNECTION_URL
) as long as one is only available during the build process and the other is only available during runtime. Use the database’s External connection details (Databases > dbname > Info > External connections) for the values of any variables to be used in the build process.
Environment Variables Set By Kinsta
Kinsta always sets PORT
as the port used by the web server. If you’d like your application to interact with the web server, you will need to use this environment variable. For example, in Node.js, this is how you would start a server:
app.listen(process.env.PORT, () => {
console.log("Weather server is up and running")
})
Environment Variables Not Set By Kinsta
By default, the NODE_ENV
environment variable is not set to production
for Node.js applications; you must add this environment variable manually.
Environment Variable Language Examples
How you use environment variables depends on your application. The following table shows how to call an environment variable named API_KEY in various languages:
Language | Code |
---|---|
Ruby | ENV["API_KEY"] |
Node.js | process.env.API_KEY; |
Python | os.environ.get('API_KEY') |
Java | System.getenv("API_KEY"); |
Scala | System.getenv("API_KEY"); |
PHP | getenv('API_KEY'); |
Go | os.Getenv("API_KEY") |