repleo.nginx
Rôle Ansible - Serveur Nginx
Ce rôle installe et configure le serveur web Nginx. L'utilisateur peut spécifier tous les paramètres de configuration http qu'il souhaite appliquer à son site. Un nombre quelconque de sites peut être ajouté avec les configurations de votre choix.
Ce rôle prend en charge SSL letsencrypt pour une installation facile de serveurs web https.
Exigences
Ce rôle nécessite Ansible 1.4 ou supérieur et les exigences de plateforme sont listées dans le fichier de métadonnées.
Variables de rôle
Les variables pouvant être transmises à ce rôle et une brève description d'elles sont les suivantes.
# Forcer la création de nginx.conf. Normalement, nginx.conf n'est écrit que s'il n'existe pas.
# Si ce paramètre est vrai, il écrasera le nginx.conf actuel.
create_nginx_conf: true
# Le nombre maximum de clients autorisés
nginx_max_clients: 512
# Un ensemble des paramètres http. Notez que tout
# paramètre http valide de nginx peut être ajouté ici.
# (voir la documentation nginx pour plus de détails.)
nginx_http_params:
sendfile: "on"
tcp_nopush: "on"
tcp_nodelay: "on"
keepalive_timeout: "65"
access_log: "/var/log/nginx/access.log"
error_log: "/var/log/nginx/error.log"
# Une liste d'ensembles qui définissent les serveurs pour nginx,
# tout comme les paramètres http. Tout paramètre de serveur valide
# peut être défini ici.
nginx_sites:
- file_name: foo
listen: 8080
server_name: localhost
root: "/tmp/site1"
ssl:
supplier: "local"
local_keystore_dir: "{{ playbook_dir }}/files/"
key: "ssl.key"
certificate: "ssl_chain.pem"
locations:
- name: /
lines:
- "try_files: $uri $uri/ /index.html"
- name: /images/
lines:
- "try_files: $uri $uri/ /index.html"
lines:
- "return 301 https://$http_host$request_uri;"
- file_name: bar
listen: 9090
server_name: ansible
root: "/tmp/site2"
locations:
- name: /
lines:
- "try_files: $uri $uri/ /index.html"
- name: /images/
lines:
- "try_files: $uri $uri/ /index.html"
Exemples
Installer nginx avec des directives HTTP de choix, mais sans sites configurés :
- hosts: all
roles:
- {role: nginx, create_nginx_conf: true, nginx_http_params: { sendfile: "on", access_log: "/var/log/nginx/access.log"}, nginx_sites: [] }
- hosts: all
roles:
Installer nginx avec des directives HTTP différentes de l'exemple précédent, mais sans sites configurés.
- hosts: all
roles:
- {role: nginx, create_nginx_conf: true, nginx_http_params: { tcp_nodelay: "on", error_log: "/var/log/nginx/error.log"}, nginx_sites: [] }
- hosts: all
roles:
Remarque : Veuillez vous assurer que les directives HTTP passées sont valides, car ce rôle ne vérifiera pas la validité des directives. Voir la documentation nginx pour plus de détails.
Installer nginx et ajouter un site à la configuration.
hosts: all
roles:
- { role: nginx, create_nginx_conf: true, nginx_http_params: { tcp_nodelay: "on", error_log: "/var/log/nginx/error.log"}, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }
Remarque : Chaque site ajouté est représenté par une liste d'ensembles, et les configurations
sont peuplées dans /etc/nginx/sites-available/
avec des symlinks correspondants dans /etc/nginx/sites-enabled/
.
Le nom de fichier pour la configuration d'un site spécifique est spécifié dans l'ensemble avec la clé "file_name", tout directive de serveur valide peut être ajoutée à l'ensemble.
Installer Nginx et ajouter 2 sites (méthode différente)
hosts: all
roles:
- { role: nginx, create_nginx_conf: true, nginx_http_params: { tcp_nodelay: "on", error_log: "/var/log/nginx/error.log"}, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] } - file_name: bar, server_name: ansible, listen: 9090, root: "/tmp/site2", locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] }
Ajouter des hôtes virtuels à une installation Nginx existante (et installer éventuellement Nginx si ce n'est pas déjà fait)
hosts: all
roles:
- { role: nginx, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] } - file_name: bar, server_name: ansible, listen: 9090, root: "/tmp/site2", locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }
Remarque : sans le paramètre create_nginx_conf: true, le rôle ne remplacera pas nginx.conf. Cette option permet d'installer des hôtes virtuels sur une installation nginx existante basée sur ce rôle, c'est-à-dire des scripts d'installation pour différents services utilisant ce rôle.
Exemple d'un serveur HTTPS incluant l'installation des clés
hosts: all
roles:
- { role: nginx, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, ssl: { supplier: "local" local_keystore_dir: "{{ playbook_dir }}/files/", key: localhost.key, certificate: localhost_chain.pem }, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }
Remarque : la clé et le certificat ssl doivent être disponibles dans le projet appelant dans le répertoire files.
Exemple d'un serveur HTTPS incluant l'installation des clés letsencrypt
hosts: all
roles:
- { role: nginx, nginx_separate_logs_per_site: true, nginx_sites: [ - file_name: bar.ssl, server_name: "example.com www.example.com", listen: 443, ssl: { supplier: "letsencrypt", domains: [ "example.com", "www.example.com" ], generate_redirect: true }, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }
Handlers
Le rôle NGINX propose deux gestionnaires :
- recharger nginx
- redémarrer nginx
Recharger la configuration nginx vous permet de mettre à jour votre serveur web sans temps d'arrêt. Cependant, il se peut que d'anciens processus ne soient pas mis à jour. Redémarrer garantira que le serveur web est arrêté puis redémarré à nouveau, ce qui entraînera un (court) temps d'arrêt.
Exemple :
- name: fichier de configuration de modèle
template: src=template.j2 dest=/etc/foo.conf
notify:
- redémarrer nginx
Dépendances
Aucune
Licence
BSD
Informations sur l'auteur
Repleo, Amstelveen, Hollande -- www.repleo.nl
Jeroen Arnoldus (jeroen@repleo.nl)
Version originale par :
Benno Joy
Ansible role for installing nginx, including support for SSL, letsencrypt and virtual host deployments
ansible-galaxy install repleo.nginx