docker-image-nginx/README.md

112 lines
3.7 KiB
Markdown

# 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://git.mau.ro/mauro/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"
```