|
- hosts: "{{ hostname }}" |
|
become_user: root |
|
become_method: sudo |
|
vars: |
|
domain: drsweeteng.com |
|
domains: ["{{ domain }}", "dev.{{ domain }}"] |
|
packages: ["python-certbot-nginx", "nginx", "php-fpm"] |
|
tasks: |
|
|
|
- name: Installing nginx on {{ packages }} |
|
apt: |
|
name: "{{ packages }}" |
|
state: present |
|
|
|
- name: Use www-data user for nginx |
|
lineinfile: |
|
dest: /etc/nginx/nginx.conf |
|
regexp: "^user\\s+.+;$" |
|
line: "user www-data;" |
|
|
|
- name: Enable Perfect Forward Secrecy for nginx |
|
openssl_dhparam: |
|
path: /etc/ssl/certs/dhparam.pem |
|
|
|
- name: Create php-fpm groups for {{ domains }} |
|
loop: "{{ domains }}" |
|
loop_control: |
|
loop_var: "domain" |
|
group: |
|
name: "{{ domain }}" |
|
system: yes |
|
|
|
- name: Add www-data to php-fpm groups {{ domains }} |
|
user: |
|
name: www-data |
|
group: www-data |
|
append: yes |
|
groups: "{{ domains }}" |
|
|
|
- name: Create php-fpm users for {{ domains }} |
|
loop: "{{ domains }}" |
|
loop_control: |
|
loop_var: "domain" |
|
user: |
|
name: "{{ domain }}" |
|
group: "{{ domain }}" |
|
system: yes |
|
create_home: no |
|
|
|
- name: Ensure www directory exists at /var/www/{{ domain }} |
|
file: |
|
path: "{{ item.directory }}" |
|
state: directory |
|
owner: "{{ item.owner }}" |
|
group: "{{ item.owner }}" |
|
mode: u=rwx,g=rwx,o=rx |
|
loop: |
|
- directory: "/var/www/{{ domain }}" |
|
owner: "{{ domain }}" |
|
- directory: "/var/www/dev.{{ domain }}" |
|
owner: "dev.{{ domain }}" |
|
|
|
- name: Create php configuration file for {{ domains }} |
|
loop: "{{ domains }}" |
|
loop_control: |
|
loop_var: "domain" |
|
template: |
|
src: "php-fpm.conf.j2" |
|
dest: "/etc/php/7.2/fpm/pool.d/{{ domain }}.conf" |
|
|
|
handlers: |
|
- name: Reload nginx |
|
service: |
|
name: nginx |
|
state: reloaded |
|
|
|
- name: Reload php-fpm |
|
service: |
|
name: php-fpm |
|
state: reloaded |
|
#- hosts: "{{ hostname }}" |
|
# gather_facts: false |
|
# become_user: root |
|
# become_method: sudo |
|
# copy: |
|
# src: nginx.http.redirect.conf.j2 |
|
# dest: /etc/nginx/sites-enabled/nginx.http.redirect.conf |
|
|
|
|
|
- hosts: "{{ hostname }}" |
|
gather_facts: false |
|
become_user: root |
|
become_method: sudo |
|
roles: |
|
- geerlingguy.certbot |
|
- geerlingguy.nginx |
|
vars: |
|
certbot_admin_email: teyc@cognoware.com |
|
certbot_create_if_missing: true |
|
certbot_create_standalone_stop_services: |
|
- nginx |
|
certbot_certs: |
|
- domains: |
|
- "{{ domain }}" |
|
- "dev.{{ domain }}" |
|
extra_parameters: | |
|
# index.php |
|
index index.html index.php; |
|
|
|
# index.php fallback |
|
location / { |
|
try_files $uri $uri/ /index.php?$query_string; |
|
} |
|
|
|
# handle .php |
|
location ~ \.php$ { |
|
#include nginxconfig.io/php_fastcgi.conf; |
|
try_files $uri =404; |
|
fastcgi_split_path_info ^(.+\.php)(/.+)$; |
|
fastcgi_pass unix:/var/run/php-fpm-{{ domain }}.sock; |
|
fastcgi_index index.php; |
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; |
|
include fastcgi_params; |
|
} |
|
|
|
ssl_certificate /etc/letsencrypt/live/{{ domain }}/fullchain.pem; |
|
ssl_certificate_key /etc/letsencrypt/live/{{ domain }}/privkey.pem; |
|
|
|
# https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html |
|
ssl_protocols TLSv1.2 TLSv1.3; |
|
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; |
|
|
|
ssl_prefer_server_ciphers on; |
|
ssl_session_cache shared:SSL:10m; |
|
# Perfect forward secrecy - ensures attacker cannot decrypt |
|
# past communications |
|
# openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096 |
|
ssl_dhparam /etc/ssl/certs/dhparam.pem; |
|
ssl_ecdh_curve secp384r1; |
|
|
|
# HSTS |
|
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; "; |
|
nginx_vhosts: |
|
- listen: "80 default_server" |
|
server_name: "_" |
|
filename: "http.redirect.conf" |
|
extra_parameters: "return 301 https://$host$request_uri;" |
|
|
|
- listen: "443 ssl http2" |
|
server_name: "{{ domain }}" |
|
server_name_redirect: "www.{{ domain }}" |
|
root: "/var/www/{{ domain }}/public" |
|
index: "index.php" |
|
state: "present" |
|
filename: "{{ domain }}.conf" |
|
extra_parameters: "{{ extra_parameters }}" |
|
- listen: "443 ssl http2" |
|
server_name: "dev.{{ domain }}" |
|
#server_name_redirect: "www.{{ domain }}" |
|
root: "/var/www/dev.{{ domain }}/public" |
|
index: "index.php" |
|
state: "present" |
|
#template: "nginx.conf.https.j2" |
|
filename: "dev.{{ domain }}.conf" |
|
extra_parameters: "{{ extra_parameters }}" |
|
|
|
|