# Rol nginx-docker Este rol configura un container `nginx` en un host con Docker. Genera la siguiente estructura de directorio para configurar nginx: * `{{ nginx_config }}`: en este directorio se puede sobreescribir la configuración de nginx (sección `http`) mediante archivos `.conf`. * `00_ssl.conf` (no editar): configura los certificados para HTTPS. * `10_server.conf` (no editar): configura los servicios HTTP y HTTPS. * `common`: directorio con directivas comunes (locations, logs, headers, etc) a incluir en las secciones server de HTTP y HTTPS. * `locations`: directorio con locations (o cualquier directiva válida) a incluir en la sección `server` para HTTPS. * `locations-http`: directorio con locations (o cualquier directiva válida) a incluir en la sección `server` para HTTP. ## Variables * `nginx_image`: nombre de la imagen a bajar. Por defecto: `nginx`. * `nginx_ssl_certificate`: path (en el host) al certificado SSL a usar para el servicio HTTPS. Valor por defecto: `/etc/ssl/certs/host-rectorado.pem`. * `nginx_ssl_private_key`: path (en el host) a la clave privada del certificado SSL a usar para el servicio HTTPS. Valor por defecto: `/etc/ssl/private/host-rectorado.key`. * `nginx_config_volume`: nombre (path) del volumen de configuración. Valor por defecto: `nginx_conf`, lo que significa que el volumen se montará en `/var/lib/docker/volumes/nginx_conf/_data`. * `nginx_webroot_volume`: nombre (path) del volumen raíz (directiva root de nginx). Valor por defecto: `nginx_webroot`, lo que significa que el volumen se montará en `/var/lib/docker/volumes/nginx_webroot/_data`. * `nginx_publish_ports`: puertos a publicar (sintaxis Docker). Valor por defecto: `[ "80:80", "443:443" ]` * `nginx_redirect_https`: indica si forzar redireccion a https. Valor por defecto: `yes`. * `nginx_https_listen_args`: array con argumentos extra para la directiva `listen` que escucha en el puerto 443. Ver valores posibles en la [documentación oficial](listen). *No especificar la opción `ssl`, esta ya viene implícita.* Por ejemplo: para activar http2, usar el valor `['http2']`. Valor por defecto: `[]` (sin args extra). * `nginx_http_listen_args`: array con argumentos extra para la directiva `listen` que escucha en el puerto 80. Ver valores posibles en la [documentación oficial](listen). Por ejemplo: para activar http2, usar el valor `['http2']`. Valor por defecto: `[]` (sin args extra). [listen]: https://nginx.org/en/docs/http/ngx_http_core_module.html#listen ## Variables exportadas * `nginx_config_mountpoint`: punto de montaje de la configuración de nginx. Valor por defecto: `/var/lib/docker/volumes/nginx_conf/_data`. * `nginx_webroot_mountpoint`: punto de montaje del webroot de nginx. Valor por defecto: `/var/lib/docker/volumes/nginx_webroot/_data`. ## Handlers El rol define el siguiente handler, que puede ser usado por los roles subsiguientes: * `restart nginx container`: reinicia el container. Útil para recargar la configuración. ## Ejemplo de uso En el repositorio sobre el que estamos trabajando, agregar este rol como submódulo: ```bash git submodule add https://servicios.unl.edu.ar/gitlab/administradores/ansible-role-nginx-docker.git roles/nginx-docker ``` En el playbook, incluir el rol: ```yaml # ... roles: # .. roles basicos .. - nginx-docker # .. roles de la aplicacion .. ``` En los roles de la aplicacion, definir una tarea que configura una `location` para ser publicada mediante nginx: ```yaml - copy: content: | location / { proxy_pass http://NOMBRE-DE-CONTAINER:PUERTO-DE-CONTAINER; } dest: "{{ nginx_config_mountpoint }}/locations/MI-APLICACION.conf" notify: "restart nginx container" ```