marvinpinto.docker-nginx
docker-nginx
Rol de Ansible para gestionar y ejecutar el contenedor de nginx en Docker.
Requisitos
Este rol solo ha sido probado en Ubuntu 14.04. Dado que utiliza el módulo
docker de Ansible, deberás asegurarte de que tienes instalada una versión
reciente de docker-py
y docker
.
Utilizamos tests/requirements.yml para instalar el rol de dependencia: geerlingguy.docker.
También puedes usar ansible-galaxy install -r tests/requirements.yml
o mejor, agregar el mismo contenido a tu propio archivo requirements.yml
en tu propio repositorio.
Ejemplos
Instala este módulo desde Ansible Galaxy en el directorio './roles':
ansible-galaxy install marvinpinto.docker-nginx -p ./roles
Úsalo en un playbook como sigue, suponiendo que ya tienes Docker configurado:
- hosts: 'servers'
roles:
- role: geerlingguy.docker # Puedes usar cualquier otro rol para instalar Docker, pero Docker es un requisito (ver arriba)
- role: 'marvinpinto.docker-nginx'
become: yes
nginx_conf: |
user root;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
Consulta el defaults/main.yml para las variables del rol que se pueden sobrescribir. Si necesitas un playbook para configurar Docker en sí, revisa el rol de Galaxy marvinpinto.docker.
Configuración Esperada
nginx_reverse_proxy_proxies
: lista de configuraciones de proxy inverso; cada configuración necesita las siguientes variables:nginx_reverse_proxy_backend_name:
cadena, nombre que utiliza la configuración de nginx para referirse al backend.nginx_reverse_proxy_domains
: lista de dominios visibles al público que deben ser proxied.nginx_reverse_proxy_backends
: lista de servidores backend, incluyendo puertos y otros parámetros válidos paraserver
en el contextoupstream
de un archivo de configuración de nginx.nginx_reverse_proxy_config_name
: nombre para usar en el archivo de proxy (no incluyas la extensión '.conf', el rol la agregará).
Ejemplo de Playbook
---
# archivo group_vars/nginx_docker_proxy
nginx_reverse_proxy_proxies:
- config_name: app1proxy
backend_name: my-backend-1
backends:
- localhost:1880 weight=2
- localhost:1881
domains:
- app1.192.168.88.10.xip.io
locations:
- /path/ # En caso de que tu sitio esté alojado en backend-name/path/
root_redirect_location: /path/ # En caso de que tu sitio esté alojado en backend-name/path/ y deba redirigirse a este sitio por defecto.
- config_name: app2proxy
backend_name: my-backend-2
backends:
- localhost:1882
- localhost:1883 backup # actuará como respaldo, y nginx solo pasará el tráfico cuando el primario no esté disponible.
domains:
- app2.192.168.88.10.xip.io
balancer_config: least_conn; # Importante agregar punto y coma al final ; si no, la configuración fallará.
Licencia
Información del Autor
- Marvin Pinto
Colaboradores
- Pablo Estigarribia (pablodav en gmail)
Más documentación
https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#taxing-rewrites
http://nginx.org/en/docs/http/ngx_http_upstream_module.html
Notas sobre la configuración de nginx
Al agregar backend, si prefieres agregarlos usando DNS, asegúrate de que el servidor pueda resolver el nombre DNS antes de iniciar nginx. Si nginx no resuelve el nombre DNS, no podrá iniciarse.
Desarrolladores
Ayuda en la prueba automática de este rol: https://github.com/CoffeeITWorks/ansible-generic-help/blob/master/Developers.md
Ansible role to manage and run the nginx docker container.
ansible-galaxy install marvinpinto.docker-nginx