Nginx configuration
Setting up a nginx configuration in your CI/CD pipeline using Hipex Deploy
Introduction
We treat our server configuration as code. You should do the same with the Nginx configuration specific for your application. This will ensure that changes are visible, trackable and portable. Always the same on every environment.
Configuration
To ensure Hipex Deploy keeps your Nginx config in sync with your codebase, all you need to do is point it to
the Nginx configuration directory. In this case app/etc/nginx
.
$nginxConfig = new NginxConfiguration('app/etc/nginx');
$configuration->addPlatformConfiguration($nginxConfig);
All files in the folder app/etc/nginx
matching pattern **/*.nginx*
will be copied to the domain config
folder ~/domains/example.com/var/etc/
and trigger nginx-reload
.
Domain specific config
When you have domain specific configurations, the content of your nginx folder needs to reflect this.
Take for example this folder structure:
- app/etc/nginx/
- example.com/magento-storecode.nginx.conf
- port-80/https.nginx.conf
When looking at your test environment it would look like this:
- app/etc/nginx/
- test.example.com/magento-storecode.nginx.conf
- port-80/https.nginx.conf
There are two ways to solve this. The first would be to create a second NginxConfiguration
object and point it to two
different directories and attach it to a deployment stage.
$nginxConfigProduction = new NginxConfiguration('app/etc/nginx-production');
$nginxConfigProduction->setStage($productionStage)
$configuration->addPlatformConfiguration($nginxConfigProduction);
$nginxConfigTest = new NginxConfiguration('app/etc/nginx-test');
$nginxConfigTest->setStage($testStage)
$configuration->addPlatformConfiguration($nginxConfigTest);
The second and more convient way would be to simply create a symlink from one folder to the other. So your total folder structure will look like this:
- app/etc/nginx/
- example.com/magento-storecode.nginx.conf
- test.example.com -> example.com
- port-80/https.nginx.conf
Server role specific
On a cluster, usually you will need different configurations on a load balancer than your app servers. This is also done using multiple Nginx config objects.
$nginxConfigApp = new NginxConfiguration('app/etc/nginx-app');
$nginxConfigApp->setServerRoles([ServerRole::APPLICATION]);
$configuration->addPlatformConfiguration($nginxConfigApp);
$nginxConfigLoadBalancer = new NginxConfiguration('app/etc/nginx-test');
$nginxConfigLoadBalancer->setServerRoles([ServerRole::LOAD_BALANCER]);
$configuration->addPlatformConfiguration($nginxConfigLoadBalancer);