Deploy PHP Projects with Git and Environment Variables

This is in addition to to Jens Seger’s post.

An .env.php file could include production database credentials:

<?php

return array(
	'DATABASE_URL' => 'postgres://username:password@host/database'
);

Then in your app’s production database connection config you would just specify the environment variable (this example in Laravel):

<?php
// use these variables within your database config
$db       = parse_url(getenv('DATABASE_URL'));
$driver   = $db['scheme'];
$host     = $db['host'];
$database = substr($db['path'], 1);
$username = $db['user'];
$password = $db['pass'];

But how do you get these environment variables into the app everytime you git push? With the git post-receive hook found in .git/hooks/ that Seger discusses in his post we can create a .env.php in the app directory everytime we deploy with the correct credentials. Just add this to your post-receive hook:

cat > .env.php << EOF
<?php

return array(
	'DATABASE_URL' => 'postgres://username:password@host/database',
);
EOF

Or maybe you want to pass some production Facebook api keys:

cat > .env.php << EOF
<?php

return array(
	'facebook.id'     => 'facebook-id-key',
	'facebook.secret' => 'facebook-secret-key',
);
EOF