Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

477
Views
¿Cómo usaría la 'estrofa de plantilla' de Nomad de Hashicorp para generar un archivo de configuración nginx a través del archivo de trabajo de Nomad?

Suponiendo que Consul y Nomad se han configurado para ejecutarse en un conjunto de recursos. ¿Cómo renderizaría un archivo de plantilla con el único propósito de generar, por ejemplo, un archivo 'default.conf' de Nginx?

Usando la configuración de estrofa de la plantilla a continuación, como ejemplo; Nomad no puede generar un 'archivo' default.conf; en su lugar, se crea un 'directorio' default.conf.

 template { source = "/path/to/tmp.ctmpl" destination = "folder/default.conf" change_mode = "restart" change_signal = "SIGINT" }

Me estoy perdiendo un truco o he entendido mal las funcionalidades de la 'estrofa de la plantilla'.

Uno de los problemas con la plantilla que genera un directorio en lugar de un archivo es que no puede montar un directorio en una ruta de archivo de configuración. Por lo tanto, ejecutar una tarea que utiliza el controlador de la ventana acoplable Nomad con la configuración de volumen ejemplar de la ventana acoplable da como resultado un error.

 volumes = ["/path/to/job/folder/default.conf:/etc/nginx/conf.d/default.conf" ]

¿O es imposible que la estrofa de la plantilla genere un archivo de configuración?

*Ps usando la versión 0.5.5 de Nomad**

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Acabo de armar un pequeño trabajo de Nomad que muestra este funcionamiento, por lo que es posible que tenga un pequeño error de configuración. Para permitirle ejecutar el trabajo usted mismo, lo he puesto a disposición como esencia aquí . En la misma esencia, tengo un nginx.conf que tiene nginx escucha en cualquier puerto que esté en el archivo de trabajo de Nomad.

Aquí está el trabajo de Nomad:

 job "nginx" { datacenters = ["dc1"] type = "service" group "cache" { count = 1 task "redis" { driver = "docker" config { image = "nginx:1.11.10" volumes = ["new/default.conf:/etc/nginx/conf.d/default.conf" ] network_mode = "host" } artifact { source = "https://gist.githubusercontent.com/dadgar/2dcf68ab5c49f7a36dcfe74171ca7936/raw/c287c16dbc9ddc16b18fa5c65a37ff25d2e0e667/nginx.conf" } template { source = "local/nginx.conf" destination = "new/default.conf" change_mode = "restart" } resources { network { mbits = 10 port "nginx" { static = 8080 } } } } } }

Luego puedo consultar esa dirección y ver que nginx está vinculado a ese puerto, por lo que la plantilla que se está montando funciona correctamente.

 $ curl http://127.0.0.1:8080 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>

Si observa la esencia, también muestro que el archivo se procesa y se monta correctamente.

¡Espero que esto te ayude! También asegúrese de consultar la página de la comunidad para obtener ayuda. Tenemos una sala Gitter y una lista de correo.

over 4 years ago · Santiago Trujillo Report

0

Es mucho más fácil colocar la configuración generada en carpetas local o secrets en el directorio de trabajo del trabajo (directorio alloc). Estas carpetas estarán disponibles en el contenedor como /secrets y /local. No se requieren montajes de volumen.

over 4 years ago · Santiago Trujillo Report

0

Terminé siguiendo la solución anterior basada en el siguiente error:

"¿Está intentando montar un directorio en un archivo (o viceversa)? Compruebe si existe la ruta de host especificada y si es del tipo esperado"

El siguiente fragmento es cómo hice que nginx funcionara como un proxy inverso para mi instancia de jenkins (todo basado en nómadas). Esta plantilla es parte de un trabajo multitarea, hecho de jenkins y nginx.

Espero que sea de alguna utilidad para alguien más en la misma situación que yo, durante los últimos días.

 task "nginx" { driver = "docker" resources { cpu = 75 memory = 75 } service { name = "jenkins-nginx" tags = ["urlprefix-/jenkins-nginx"] port = "http" check { name = "nginx port alive" type = "http" path = "/login" interval = "10s" timeout = "2s" } } template { change_mode = "restart" destination = "local/default.conf" data = <<EOH upstream jenkins { server {{ env "NOMAD_ADDR_jenkins" }}; } server { listen {{ env "NOMAD_PORT_http" }}; location / { proxy_redirect off; proxy_pass_header Server; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_set_header X-Accel-Buffering no; proxy_connect_timeout 5; proxy_http_version 1.1; proxy_read_timeout 240; proxy_intercept_errors on; keepalive_timeout 3600; proxy_set_header Connection ''; chunked_transfer_encoding off; proxy_buffering off; proxy_cache off; proxy_pass http://jenkins; } } EOH } config { image = "nginx" network_mode = "host" ports = ["http","https"] volumes = [ "local/default.conf:/etc/nginx/conf.d/default.conf" ] } }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!