Рефакторинг: вынес запуск ролей в отдельный файл deploy.yml
- Создан файл roles/deploy.yml с блоком запуска роли nginx - Обновлен molecule/default/site.yml для импорта deploy.yml - Улучшена модульность структуры проекта - Автор: Сергей Антропов
This commit is contained in:
13
roles/deploy.yml
Normal file
13
roles/deploy.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
# Плейбук для развертывания ролей
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
- name: Test nginx role
|
||||
hosts: all
|
||||
become: true
|
||||
roles:
|
||||
- nginx
|
||||
tags:
|
||||
- nginx
|
||||
- test
|
||||
60
roles/nginx/defaults/main.yml
Normal file
60
roles/nginx/defaults/main.yml
Normal file
@@ -0,0 +1,60 @@
|
||||
---
|
||||
# Переменные по умолчанию для роли nginx
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
# Основные настройки nginx
|
||||
nginx_user: "nginx"
|
||||
nginx_worker_processes: "auto"
|
||||
nginx_worker_connections: 1024
|
||||
nginx_keepalive_timeout: 65
|
||||
|
||||
# Настройки сервера
|
||||
nginx_server_name: "{{ ansible_fqdn | default(ansible_hostname) }}"
|
||||
nginx_listen_port: 80
|
||||
nginx_root_dir: "/var/www/html"
|
||||
nginx_index_file: "index.html"
|
||||
|
||||
# Настройки логов
|
||||
nginx_access_log: "/var/log/nginx/access.log"
|
||||
nginx_error_log: "/var/log/nginx/error.log"
|
||||
|
||||
# Настройки безопасности
|
||||
nginx_server_tokens: "off"
|
||||
nginx_hide_version: true
|
||||
|
||||
# Настройки производительности
|
||||
nginx_sendfile: "on"
|
||||
nginx_tcp_nopush: "on"
|
||||
nginx_tcp_nodelay: "on"
|
||||
|
||||
# Настройки gzip
|
||||
nginx_gzip: true
|
||||
nginx_gzip_vary: "on"
|
||||
nginx_gzip_min_length: 1024
|
||||
nginx_gzip_types:
|
||||
- "text/plain"
|
||||
- "text/css"
|
||||
- "text/xml"
|
||||
- "text/javascript"
|
||||
- "application/javascript"
|
||||
- "application/xml+rss"
|
||||
- "application/json"
|
||||
|
||||
# Настройки для разных ОС
|
||||
nginx_packages:
|
||||
- nginx
|
||||
|
||||
# Дополнительные пакеты для Ubuntu/Debian
|
||||
nginx_ubuntu_packages:
|
||||
- nginx
|
||||
- nginx-common
|
||||
|
||||
# Дополнительные пакеты для RHEL/CentOS
|
||||
nginx_rhel_packages:
|
||||
- nginx
|
||||
- nginx-mod-http-geoip
|
||||
- nginx-mod-http-image-filter
|
||||
- nginx-mod-http-xslt-filter
|
||||
- nginx-mod-mail
|
||||
- nginx-mod-stream
|
||||
44
roles/nginx/handlers/main.yml
Normal file
44
roles/nginx/handlers/main.yml
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
# Обработчики для роли nginx
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
- name: Restart nginx
|
||||
systemd:
|
||||
name: nginx
|
||||
state: restarted
|
||||
listen: restart nginx
|
||||
tags:
|
||||
- nginx
|
||||
- service
|
||||
- restart
|
||||
|
||||
- name: Reload nginx
|
||||
systemd:
|
||||
name: nginx
|
||||
state: reloaded
|
||||
listen: reload nginx
|
||||
tags:
|
||||
- nginx
|
||||
- service
|
||||
- reload
|
||||
|
||||
- name: Start nginx
|
||||
systemd:
|
||||
name: nginx
|
||||
state: started
|
||||
listen: start nginx
|
||||
tags:
|
||||
- nginx
|
||||
- service
|
||||
- start
|
||||
|
||||
- name: Stop nginx
|
||||
systemd:
|
||||
name: nginx
|
||||
state: stopped
|
||||
listen: stop nginx
|
||||
tags:
|
||||
- nginx
|
||||
- service
|
||||
- stop
|
||||
26
roles/nginx/meta/main.yml
Normal file
26
roles/nginx/meta/main.yml
Normal file
@@ -0,0 +1,26 @@
|
||||
---
|
||||
# Метаданные роли nginx
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
galaxy_info:
|
||||
author: Сергей Антропов
|
||||
description: Простая роль для установки и настройки nginx
|
||||
company: DevOps.org.ru
|
||||
license: MIT
|
||||
min_ansible_version: "2.9"
|
||||
platforms:
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- jammy
|
||||
- focal
|
||||
- name: EL
|
||||
versions:
|
||||
- all
|
||||
galaxy_tags:
|
||||
- web
|
||||
- nginx
|
||||
- http
|
||||
- server
|
||||
|
||||
dependencies: []
|
||||
196
roles/nginx/tasks/main.yml
Normal file
196
roles/nginx/tasks/main.yml
Normal file
@@ -0,0 +1,196 @@
|
||||
---
|
||||
# Основные задачи для роли nginx
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
- name: Установка nginx на Ubuntu/Debian
|
||||
apt:
|
||||
name: "{{ nginx_ubuntu_packages }}"
|
||||
state: present
|
||||
update_cache: true
|
||||
when: ansible_os_family == "Debian"
|
||||
tags:
|
||||
- nginx
|
||||
- install
|
||||
- debian
|
||||
|
||||
- name: Установка nginx на RHEL/CentOS
|
||||
yum:
|
||||
name: "{{ nginx_rhel_packages }}"
|
||||
state: present
|
||||
when: ansible_os_family == "RedHat"
|
||||
tags:
|
||||
- nginx
|
||||
- install
|
||||
- rhel
|
||||
|
||||
- name: Включение и запуск nginx на Ubuntu/Debian
|
||||
systemd:
|
||||
name: nginx
|
||||
enabled: true
|
||||
state: started
|
||||
when: ansible_os_family == "Debian"
|
||||
tags:
|
||||
- nginx
|
||||
- service
|
||||
- debian
|
||||
|
||||
- name: Включение и запуск nginx на RHEL/CentOS
|
||||
systemd:
|
||||
name: nginx
|
||||
enabled: true
|
||||
state: started
|
||||
when: ansible_os_family == "RedHat"
|
||||
tags:
|
||||
- nginx
|
||||
- service
|
||||
- rhel
|
||||
|
||||
- name: Создание директории для веб-контента
|
||||
file:
|
||||
path: "{{ nginx_root_dir }}"
|
||||
state: directory
|
||||
owner: "{{ nginx_user }}"
|
||||
group: "{{ nginx_user }}"
|
||||
mode: '0755'
|
||||
tags:
|
||||
- nginx
|
||||
- config
|
||||
- directories
|
||||
|
||||
- name: Создание тестовой страницы
|
||||
copy:
|
||||
content: |
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Nginx Test Page</title>
|
||||
<style>
|
||||
body { font-family: Arial, sans-serif; margin: 40px; }
|
||||
.container { max-width: 600px; margin: 0 auto; }
|
||||
h1 { color: #333; }
|
||||
.info { background: #f4f4f4; padding: 20px; border-radius: 5px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>Nginx работает!</h1>
|
||||
<div class="info">
|
||||
<p><strong>Сервер:</strong> {{ ansible_hostname }}</p>
|
||||
<p><strong>ОС:</strong> {{ ansible_distribution }} \
|
||||
{{ ansible_distribution_version }}</p>
|
||||
<p><strong>Время:</strong> {{ ansible_date_time.iso8601 }}</p>
|
||||
<p><strong>Роль:</strong> nginx (Сергей Антропов)</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
dest: "{{ nginx_root_dir }}/{{ nginx_index_file }}"
|
||||
owner: "{{ nginx_user }}"
|
||||
group: "{{ nginx_user }}"
|
||||
mode: '0644'
|
||||
notify: restart nginx
|
||||
tags:
|
||||
- nginx
|
||||
- config
|
||||
- content
|
||||
|
||||
- name: Создание резервной копии конфигурации nginx
|
||||
copy:
|
||||
src: "{{ item }}"
|
||||
dest: "{{ item }}.backup"
|
||||
remote_src: true
|
||||
mode: '0644'
|
||||
owner: root
|
||||
group: root
|
||||
loop:
|
||||
- /etc/nginx/nginx.conf
|
||||
- /etc/nginx/sites-available/default
|
||||
ignore_errors: true
|
||||
when: ansible_os_family == "Debian"
|
||||
tags:
|
||||
- nginx
|
||||
- config
|
||||
- backup
|
||||
|
||||
- name: Создание резервной копии конфигурации nginx (RHEL)
|
||||
copy:
|
||||
src: "{{ item }}"
|
||||
dest: "{{ item }}.backup"
|
||||
remote_src: true
|
||||
mode: '0644'
|
||||
owner: root
|
||||
group: root
|
||||
loop:
|
||||
- /etc/nginx/nginx.conf
|
||||
- /etc/nginx/conf.d/default.conf
|
||||
ignore_errors: true
|
||||
when: ansible_os_family == "RedHat"
|
||||
tags:
|
||||
- nginx
|
||||
- config
|
||||
- backup
|
||||
|
||||
- name: Настройка основной конфигурации nginx
|
||||
template:
|
||||
src: nginx.conf.j2
|
||||
dest: /etc/nginx/nginx.conf
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
backup: true
|
||||
notify: restart nginx
|
||||
tags:
|
||||
- nginx
|
||||
- config
|
||||
- main
|
||||
|
||||
- name: Настройка виртуального хоста (Ubuntu/Debian)
|
||||
template:
|
||||
src: default.conf.j2
|
||||
dest: /etc/nginx/sites-available/default
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
backup: true
|
||||
when: ansible_os_family == "Debian"
|
||||
notify: restart nginx
|
||||
tags:
|
||||
- nginx
|
||||
- config
|
||||
- vhost
|
||||
- debian
|
||||
|
||||
- name: Настройка виртуального хоста (RHEL/CentOS)
|
||||
template:
|
||||
src: default.conf.j2
|
||||
dest: /etc/nginx/conf.d/default.conf
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
backup: true
|
||||
when: ansible_os_family == "RedHat"
|
||||
notify: restart nginx
|
||||
tags:
|
||||
- nginx
|
||||
- config
|
||||
- vhost
|
||||
- rhel
|
||||
|
||||
- name: Проверка конфигурации nginx
|
||||
command: nginx -t
|
||||
register: nginx_config_test
|
||||
changed_when: false
|
||||
tags:
|
||||
- nginx
|
||||
- config
|
||||
- test
|
||||
|
||||
- name: Показать результат проверки конфигурации
|
||||
debug:
|
||||
msg: "{{ nginx_config_test.stdout_lines }}"
|
||||
when: nginx_config_test.stdout_lines is defined
|
||||
tags:
|
||||
- nginx
|
||||
- config
|
||||
- test
|
||||
67
roles/nginx/templates/default.conf.j2
Normal file
67
roles/nginx/templates/default.conf.j2
Normal file
@@ -0,0 +1,67 @@
|
||||
# Конфигурация виртуального хоста nginx
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
# Сгенерировано: {{ ansible_date_time.iso8601 }}
|
||||
|
||||
server {
|
||||
listen {{ nginx_listen_port }};
|
||||
server_name {{ nginx_server_name }};
|
||||
|
||||
# Настройки безопасности
|
||||
{% if nginx_hide_version %}
|
||||
server_tokens off;
|
||||
{% endif %}
|
||||
|
||||
# Корневая директория
|
||||
root {{ nginx_root_dir }};
|
||||
index {{ nginx_index_file }};
|
||||
|
||||
# Настройки логов для этого виртуального хоста
|
||||
access_log {{ nginx_access_log }};
|
||||
error_log {{ nginx_error_log }};
|
||||
|
||||
# Основная локация
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
# Настройки для статических файлов
|
||||
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
|
||||
# Настройки безопасности
|
||||
location ~ /\. {
|
||||
deny all;
|
||||
access_log off;
|
||||
log_not_found off;
|
||||
}
|
||||
|
||||
# Настройки для favicon
|
||||
location = /favicon.ico {
|
||||
log_not_found off;
|
||||
access_log off;
|
||||
}
|
||||
|
||||
# Настройки для robots.txt
|
||||
location = /robots.txt {
|
||||
log_not_found off;
|
||||
access_log off;
|
||||
}
|
||||
|
||||
# Настройки для health check
|
||||
location /health {
|
||||
access_log off;
|
||||
return 200 "healthy\n";
|
||||
add_header Content-Type text/plain;
|
||||
}
|
||||
|
||||
# Настройки для статуса nginx
|
||||
location /nginx_status {
|
||||
stub_status on;
|
||||
access_log off;
|
||||
allow 127.0.0.1;
|
||||
deny all;
|
||||
}
|
||||
}
|
||||
58
roles/nginx/templates/nginx.conf.j2
Normal file
58
roles/nginx/templates/nginx.conf.j2
Normal file
@@ -0,0 +1,58 @@
|
||||
# Основная конфигурация nginx
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
# Сгенерировано: {{ ansible_date_time.iso8601 }}
|
||||
|
||||
user {{ nginx_user }};
|
||||
worker_processes {{ nginx_worker_processes }};
|
||||
|
||||
error_log {{ nginx_error_log }};
|
||||
pid /run/nginx.pid;
|
||||
|
||||
events {
|
||||
worker_connections {{ nginx_worker_connections }};
|
||||
}
|
||||
|
||||
http {
|
||||
# Основные настройки
|
||||
sendfile {{ nginx_sendfile }};
|
||||
tcp_nopush {{ nginx_tcp_nopush }};
|
||||
tcp_nodelay {{ nginx_tcp_nodelay }};
|
||||
keepalive_timeout {{ nginx_keepalive_timeout }};
|
||||
types_hash_max_size 2048;
|
||||
server_tokens {{ nginx_server_tokens }};
|
||||
|
||||
# Настройки MIME типов
|
||||
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 {{ nginx_access_log }} main;
|
||||
|
||||
# Настройки gzip
|
||||
{% if nginx_gzip %}
|
||||
gzip {{ nginx_gzip_vary }};
|
||||
gzip_min_length {{ nginx_gzip_min_length }};
|
||||
gzip_types
|
||||
{% for gzip_type in nginx_gzip_types %}
|
||||
{{ gzip_type }}{% if not loop.last %} {% endif %}
|
||||
{% endfor %};
|
||||
{% endif %}
|
||||
|
||||
# Настройки безопасности
|
||||
{% if nginx_hide_version %}
|
||||
server_tokens off;
|
||||
{% endif %}
|
||||
|
||||
# Включение конфигураций виртуальных хостов
|
||||
{% if ansible_os_family == "Debian" %}
|
||||
include /etc/nginx/conf.d/*.conf;
|
||||
include /etc/nginx/sites-enabled/*;
|
||||
{% elif ansible_os_family == "RedHat" %}
|
||||
include /etc/nginx/conf.d/*.conf;
|
||||
{% endif %}
|
||||
}
|
||||
Reference in New Issue
Block a user