Mediante el uso de envsubst se facilita la generación de ficheros de configuración (o de cualquier otro tipo) a partir de plantillas (ficheros con variables de entorno). Estos ficheros plantilla tienen la configuración, por ejemplo de Nginx, pero implementando variables para el parámetro “server_name”, el puerto, ruta a ficheros de logs, etc.
Usando envsubst se envian esos valores de las variables a la plantilla y sustituirán a las variables de ese fichero por sus valores correspondientes. De esta manera partiendo de una plantilla se pueden crear varias configuraciones diferentes. Por supuesto la creación de ficheros con el método envsubst está limitado simplemente al uso de variables. Para plantillas más sofisticadas que requieran de lógicas de programación como bucles, implementar condiciones, etc hay otro tipo de frameworks más centrados en esa temática como Puppet, Ansible, terraform, etc.
Plantilla_nginx: SERVER_NAME, HOSTNAME, VHOST, NGINX_ROOT y PROXY_PASS.
server { listen 80; server_name ${SERVER_NAME}; charset utf-8; access_log /var/log/docker/${HOSTNAME}/nginx/access/${VHOST}.log main; error_log /var/log/docker/${HOSTNAME}/nginx/error/${VHOST}.log warn; index index.php index.html; root ${NGINX_ROOT}; location / { proxy_pass ${PROXY_PASS}; } }
Exportamos las variables con los valores que sean pertinentes.
export SERVER_NAME=www.dominio.com HOSTNAME=${SERVER_NAME} VHOST=www NGINX_ROOT=/usr/share/nginx/html>PROXY_PASS=https://www.proxypass.com
Generamos la plantilla.
envsubst '${SERVER_NAME} ${HOSTNAME} ${VHOST} ${NGINX_ROOT} ${PROXY_PASS}' < plantilla_nginx > configuración.nginx
Si se quiere visualizar primero como sería el fichero resultante,es suficiente no redirigir la salida.
envsubst '${SERVER_NAME} ${HOSTNAME} ${VHOST} ${NGINX_ROOT} ${PROXY_PASS}' < plantilla_nginx server { listen 80; server_name www.dominio.com; charset utf-8; access_log /var/log/docker/www.dominio.com/nginx/access/www.log main; error_log /var/log/docker/www.dominio.com/nginx/error/www.log warn; index index.php index.html; root /usr/share/nginx/html; location / { proxy_pass https://www.proxypass.com; } }