10 Commits
1.0.4 ... 1.0.7

Author SHA1 Message Date
Emilien Mantel
d1dbdb83d4 Fix idempotence 2015-11-03 15:09:14 +01:00
Emilien Mantel
bee0cb9a66 Remove template validation 2015-11-03 14:54:35 +01:00
Emilien Mantel
6be44c7da8 Many minor changes 2015-11-03 14:45:01 +01:00
Emilien Mantel
a0a6e35a3a Only reload nginx 2015-11-03 14:38:47 +01:00
Emilien Mantel
f57ab08594 location / can be overwrited 2015-11-03 14:31:50 +01:00
Emilien Mantel
d26a6f26f5 shell module is not necessary 2015-11-02 17:44:09 +01:00
Emilien Mantel
97c3d2e169 Fix and improve tests/vhosts + php_index vhost 2015-11-02 16:30:46 +01:00
Emilien Mantel
c2644d4e5d update readme 2015-10-22 15:46:21 +02:00
Emilien Mantel
70529e223d nginx_vhosts[x].name now accepts list or string 2015-10-22 10:25:30 +02:00
Emilien Mantel
803f435b48 Bug bix with local_content 2015-10-19 11:03:05 +02:00
12 changed files with 78 additions and 39 deletions

View File

@@ -5,7 +5,7 @@ Nginx for Debian Ansible role
Install and configure Nginx on Debian. Install and configure Nginx on Debian.
This role is not production ready. SSL management wille come later. SSL management will come later.
Requirements Requirements
------------ ------------
@@ -44,6 +44,7 @@ Socket:
- `nginx_worker_processes` - `nginx_worker_processes`
- `nginx_events`: key/value in events block - `nginx_events`: key/value in events block
- `nginx_http`: key/value in http block - `nginx_http`: key/value in http block
- `nginx_pid`: daemon pid file
### Vhost management ### Vhost management
@@ -53,7 +54,7 @@ You can see many examples in: [tests/test.yml](tests/test.yml).
#### Common #### Common
- `name`: (M) List of domain used. The first occurence is the most important! - `name`: (M) Domain or list of domain used.
- `template`: (M) template used to create vhost - `template`: (M) template used to create vhost
- `enable`: (O) Enable the vhost (default is true) - `enable`: (O) Enable the vhost (default is true)
- `delete`: (O) Delete the vhost (default is false) - `delete`: (O) Delete the vhost (default is false)
@@ -70,10 +71,12 @@ You can see many examples in: [tests/test.yml](tests/test.yml).
#### Templates #### Templates
- `base`: static template - `base`: static template
- `php`: PHP base template. Can work with many frameworks/tools.
- `wordpress`
- `dokuwiki` - `dokuwiki`
- `phalcon`: Phalcon PHP Framework
- `php`: PHP base template. Can work with many frameworks/tools
- `php_index`: Same as above. But you can only run index.php
- `proxy` - `proxy`
- `wordpress`
Templates works as parent-child. Templates works as parent-child.
@@ -136,6 +139,4 @@ GPLv2
Author Information Author Information
------------------ ------------------
- You can find many other roles in my GitHub "lab": https://github.com/HanXHX/my-ansible-playbooks - Twitter: https://twitter.com/hanxhx
- All issues, pull-request are welcome :)

View File

@@ -8,8 +8,9 @@ nginx_apt_package: nginx-full
nginx_root: "/srv/www" nginx_root: "/srv/www"
nginx_log_dir: '/var/log/nginx' nginx_log_dir: '/var/log/nginx'
nginx_ssl_dir: '/etc/nginx/ssl' nginx_ssl_dir: '/etc/nginx/ssl'
nginx_pid: '/run/nginx.pid'
nginx_resolver: nginx_resolver:
hosts: ['208.67.222.222', '208.67.220.220'] # OpenDNS hosts: ['8.8.8.8', '8.8.4.4'] # OpenDNS
valid: '300' valid: '300'
timeout: '5' timeout: '5'
nginx_error_log_level: 'warn' # http://nginx.org/en/docs/ngx_core_module.html#error_log nginx_error_log_level: 'warn' # http://nginx.org/en/docs/ngx_core_module.html#error_log

View File

@@ -1,6 +1,4 @@
--- ---
- name: restart nginx
action: service name=nginx state=restarted enabled=yes
- name: reload nginx - name: reload nginx
action: service name=nginx state=reloaded enabled=yes action: service name=nginx state=reloaded enabled=yes

View File

@@ -4,7 +4,7 @@ galaxy_info:
description: Nginx for Debian description: Nginx for Debian
company: company:
license: GPLv2 license: GPLv2
min_ansible_version: 1.2 min_ansible_version: 1.6
platforms: platforms:
- name: Debian - name: Debian
versions: versions:

View File

@@ -9,8 +9,10 @@
changed_when: false changed_when: false
- name: TEMPLATE | Deploy nginx.conf - name: TEMPLATE | Deploy nginx.conf
template: src=etc/nginx/nginx.conf.j2 dest=/etc/nginx/nginx.conf validate= "nginx -t" template: >
notify: restart nginx src=etc/nginx/nginx.conf.j2
dest=/etc/nginx/nginx.conf
notify: reload nginx
- name: FILE | Create /etc/nginx/helpers - name: FILE | Create /etc/nginx/helpers
file: dest=/etc/nginx/helpers owner=root mode=0755 state=directory file: dest=/etc/nginx/helpers owner=root mode=0755 state=directory
@@ -24,7 +26,9 @@
# creates: "{{ nginx_dh_path }}" # creates: "{{ nginx_dh_path }}"
- name: TEMPLATE | Deploy all helpers - name: TEMPLATE | Deploy all helpers
template: src={{ item }} dest=/etc/nginx/helpers/{{ item | basename | regex_replace('\.j2$','') }} template: >
src={{ item }}
dest=/etc/nginx/helpers/{{ item | basename | regex_replace('\.j2$','') }}
with_fileglob: '../templates/etc/nginx/helpers/*.j2' with_fileglob: '../templates/etc/nginx/helpers/*.j2'
notify: reload nginx notify: reload nginx

View File

@@ -2,7 +2,7 @@
- name: FILE | Create root folders (foreach nginx_vhosts) - name: FILE | Create root folders (foreach nginx_vhosts)
file: > file: >
path={{ nginx_root }}/{{ item.name[0] }}/public path={{ nginx_root }}/{{ item.name if item.name is string else item.name[0] }}/public
state=directory state=directory
owner={{ item.owner | default('www-data') }} owner={{ item.owner | default('www-data') }}
group={{ item.group | default('www-data') }} group={{ item.group | default('www-data') }}
@@ -13,7 +13,7 @@
- name: TEMPLATE | Create vhosts - name: TEMPLATE | Create vhosts
template: > template: >
src=etc/nginx/sites-available/{{ item.template }}.j2 src=etc/nginx/sites-available/{{ item.template }}.j2
dest=/etc/nginx/sites-available/{{ item.name[0] }} dest=/etc/nginx/sites-available/{{ item.name if item.name is string else item.name[0] }}
with_items: nginx_vhosts with_items: nginx_vhosts
notify: reload nginx notify: reload nginx
when: item.delete is not defined or not item.delete when: item.delete is not defined or not item.delete
@@ -23,16 +23,16 @@
# with_fileglob: "web/*" # with_fileglob: "web/*"
- name: FILE | Delete vhosts - name: FILE | Delete vhosts
file: dest=/etc/nginx/sites-enabled/{{ item.name[0] }} state=absent file: dest=/etc/nginx/sites-enabled/{{ item.name if item.name is string else item.name[0] }} state=absent
file: dest=/etc/nginx/sites-available/{{ item.name[0] }} state=absent file: dest=/etc/nginx/sites-available/{{ item.name if item.name is string else item.name[0] }} state=absent
with_items: nginx_vhosts with_items: nginx_vhosts
notify: reload nginx notify: reload nginx
when: item.delete is defined and item.delete when: item.delete is defined and item.delete
- name: FILE | Enable vhosts - name: FILE | Enable vhosts
file: > file: >
src=/etc/nginx/sites-available/{{ item.name[0] }} src=/etc/nginx/sites-available/{{ item.name if item.name is string else item.name[0] }}
dest=/etc/nginx/sites-enabled/{{ item.name[0] }} dest=/etc/nginx/sites-enabled/{{ item.name if item.name is string else item.name[0] }}
state=link state=link
with_items: nginx_vhosts with_items: nginx_vhosts
notify: reload nginx notify: reload nginx
@@ -42,7 +42,7 @@
(item.delete is not defined or not item.delete) (item.delete is not defined or not item.delete)
- name: FILE | Disable vhosts - name: FILE | Disable vhosts
file: dest=/etc/nginx/sites-enabled/{{ item.name[0] }} state=absent file: dest=/etc/nginx/sites-enabled/{{ item.name if item.name is string else item.name[0] }} state=absent
with_items: nginx_vhosts with_items: nginx_vhosts
notify: reload nginx notify: reload nginx
when: item.enable is defined and not item.enable when: item.enable is defined and not item.enable

View File

@@ -4,7 +4,7 @@
user {{ nginx_user }}; user {{ nginx_user }};
worker_processes {{ nginx_worker_processes }}; worker_processes {{ nginx_worker_processes }};
pid /run/nginx.pid; pid {{ nginx_pid }};
events { events {
{% for key, value in nginx_events.iteritems() %} {% for key, value in nginx_events.iteritems() %}

View File

@@ -12,11 +12,11 @@ server {
{% for port in __listen %} {% for port in __listen %}
listen {{ port }}; listen {{ port }};
{% endfor %} {% endfor %}
server_name {{ item.name | join(' ') }}; server_name {% if item.name is string %}{{ item.name }}{% else %}{{ item.name | join(' ') }}{% endif %};
{% if item.root is defined %} {% if item.root is defined %}
root {{ item.root }}; root {{ item.root }};
{% else %} {% else %}
root {{ nginx_root }}/{{ item.name[0] }}/public; root {{ nginx_root }}/{{ item.name if item.name is string else item.name[0] }}/public;
{% endif %} {% endif %}
{% block template_index %} {% block template_index %}
index {{ item.index | default('index.html index.htm') }}; index {{ item.index | default('index.html index.htm') }};
@@ -28,11 +28,13 @@ server {
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% if not __location.has_key('/') %}
location / { location / {
{% block template_try_files %} {% block template_try_files %}
try_files {{ override_try_files | default('$uri $uri/ =404') }}; try_files {{ override_try_files | default('$uri $uri/ =404') }};
{% endblock %} {% endblock %}
} }
{% endif %}
{% block template_upstream_location %} {% block template_upstream_location %}
{% endblock %} {% endblock %}
@@ -44,7 +46,7 @@ server {
} }
{% block template_local_content %} {% block template_local_content %}
{% if manage_local_content is defined and not manage_local_content %} {% if item.manage_local_content is not defined or item.manage_local_content %}
location = /favicon.ico { location = /favicon.ico {
expires 30d; expires 30d;
access_log off; access_log off;

View File

@@ -0,0 +1,24 @@
{% extends "_php.j2" %}
{% block template_upstream_location %}
location = /index.php {
fastcgi_pass php;
fastcgi_index index.php;
{% if item.upstream_params is defined and item.upstream_params is iterable %}
{% for param in item.upstream_params %}
{{ param }}
{% endfor %}
{% endif %}
{% if nginx_version.stdout | version_compare('1.6.1', 'lt') %}
include fastcgi_params;
{% else %}
include fastcgi.conf;
{% endif %}
}
{% endblock %}
{% block template_custom_location %}
location ~ \.(php\d?|phtml)$ {
return 403;
}
{% endblock %}

View File

@@ -2,5 +2,3 @@ FROM williamyeh/ansible:debian8-onbuild
RUN apt-get update RUN apt-get update
CMD ["sh", "tests/test.sh"] CMD ["sh", "tests/test.sh"]
EXPOSE 6379

View File

@@ -2,5 +2,3 @@ FROM williamyeh/ansible:debian7-onbuild
RUN apt-get update RUN apt-get update
CMD ["sh", "tests/test.sh"] CMD ["sh", "tests/test.sh"]
EXPOSE 6379

View File

@@ -30,37 +30,50 @@
- 'return 403;' - 'return 403;'
'/gunther': '/gunther':
- 'return 404;' - 'return 404;'
- name: - name: 'test-location.local'
- 'test-php.local' template: '_base'
location:
'/':
- 'alias /var/tmp;'
- name: 'test-php.local'
upstream_params: upstream_params:
- 'fastcgi_param FOO bar;' - 'fastcgi_param FOO bar;'
redirect_from: redirect_from:
- 'www.test-php.local' - 'www.test-php.local'
template: '_php' template: '_php'
- name: - name: 'test-php-index.local'
- 'test-proxy.local' template: '_php_index'
- name: 'test-proxy.local'
listen: listen:
- 8080 - 8080
template: '_proxy' template: '_proxy'
upstream_name: 'test' upstream_name: 'test'
- name: - name: 'deleted.local'
- 'deleted.local'
template: '_base' template: '_base'
delete: true delete: true
roles: roles:
- ../../ - ../../
post_tasks: post_tasks:
- name: -- Add PHP file -- - name: -- Add PHP file --
copy: dest="{{ nginx_root }}/test-php.local/public/index.php" content="<?php phpinfo();" copy: dest="{{ nginx_root }}/{{ item }}/public/index.php" content="<?php phpinfo();"
with_items: ['test-php.local', 'test-php-index.local']
- name: -- Add HTML file -- - name: -- Add HTML file --
copy: dest="{{ nginx_root }}/test.local/public/index.html" content="Index HTML test OK\n" copy: dest="{{ item }}/index.html" content="Index HTML test OK\n"
with_items: ['{{ nginx_root }}/test.local/public', '/var/tmp']
- name: -- VERIFY VHOSTS -- - name: -- VERIFY VHOSTS --
shell: "curl -H 'Host: {{ item.name[0] }}' http://127.0.0.1{% if item.listen is defined and item.listen is iterable %}:{{ item.listen[0] }}{% endif %}/" command: "curl -H 'Host: {{ item.name if item.name is string else item.name[0] }}' http://127.0.0.1{% if item.listen is defined %}:{{ item.listen[0] }}{% endif %}/"
with_items: nginx_vhosts with_items: nginx_vhosts
when: item.delete is undefined or not item.delete when: item.delete is undefined or not item.delete
changed_when: false changed_when: false
- name: -- VERIFY FORBIDDEN --
command: "curl -H 'Host: test-php-index.local' http://127.0.0.1/phpinfo.php"
register: f
failed_when: f.stdout.find('403 Forbidden') == -1
changed_when: false
- name: -- VERIFY REDIRECT VHOSTS -- - name: -- VERIFY REDIRECT VHOSTS --
shell: "curl -H 'Host: {{ item.redirect_from[0] }}' http://127.0.0.1/" command: "curl -H 'Host: {{ item.redirect_from[0] }}' http://127.0.0.1/"
with_items: nginx_vhosts with_items: nginx_vhosts
when: item.redirect_from is defined and (item.delete is undefined or not item.delete) when: item.redirect_from is defined and (item.delete is undefined or not item.delete)
changed_when: false changed_when: false
register: r
failed_when: r.stdout.find('301 Moved Permanently') == -1