Compare commits
7 Commits
74f04d975c
...
4709d4c0e7
Author | SHA1 | Date | |
---|---|---|---|
4709d4c0e7 | |||
220b967809 | |||
d8759bfa8c | |||
65ade98e04 | |||
52192b4d24 | |||
55ffb7055c | |||
2f21245787 |
13
README.md
13
README.md
@ -16,12 +16,10 @@
|
||||
- **nginx_proxy/**: Роль для установки и настройки Nginx как прокси-сервера с балансировкой нагрузки и проверкой состояния.
|
||||
- **tasks/**: Задачи для установки Nginx и деплоя конфигурации прокси.
|
||||
- **templates/**: Шаблоны конфигурационных файлов Nginx для прокси-сервера.
|
||||
- **vars/**: Переменные, используемые в роли `nginx_proxy`.
|
||||
|
||||
- **nginx_site/**: Роль для установки и настройки Nginx на целевых сайтах (`SiteA` и `SiteB`), а также деплоя HTML контента.
|
||||
- **tasks/**: Задачи для установки Nginx, создания корневых директорий сайтов, деплоя конфигураций и HTML файлов.
|
||||
- **templates/**: Шаблоны конфигурационных файлов Nginx и HTML страниц для сайтов.
|
||||
- **vars/**: Переменные, используемые в роли `nginx_site`.
|
||||
|
||||
- **ssl_certificate/**: Роль для генерации самоподписанных SSL сертификатов для прокси-сервера.
|
||||
- **tasks/**: Задачи для установки OpenSSL, создания директории для сертификатов и генерации самоподписанных сертификатов.
|
||||
@ -59,8 +57,11 @@
|
||||
- `proxy_domain`: Доменное имя прокси-сервера.
|
||||
- `proxy_ip`: IP-адрес прокси-сервера.
|
||||
|
||||
- **ansible_python_interpreter**: Явное указание пути к Python-интерпретатору на всех хостах.
|
||||
|
||||
### В `Jenkinsfile`
|
||||
|
||||
- **DEPLOY_TARGET**: Выбор цели развертывания (`SiteA`, `SiteB`, `All`).
|
||||
- **ADDITIONAL_CONTENT_SITEA_H2**: Дополнительный контент для заголовка `<h2>` на SiteA.
|
||||
- **ADDITIONAL_CONTENT_SITEA_P**: Дополнительный параграф `<p>` для SiteA.
|
||||
- **ADDITIONAL_CONTENT_SITEB_H2**: Дополнительный контент для заголовка `<h2>` на SiteB.
|
||||
@ -72,9 +73,6 @@
|
||||
- `firewall_ports`: Список портов и протоколов, которые необходимо открыть в файрволе (например, SSH, HTTP, HTTPS).
|
||||
|
||||
- **nginx_proxy/vars/main.yml**:
|
||||
- `upstream_servers`: Список IP-адресов бэкенд-серверов (`SiteA` и `SiteB`) для балансировки нагрузки.
|
||||
|
||||
- **ssl_certificate/vars/main.yml**:
|
||||
- `ssl_cert_path`: Путь к директории, где будут храниться SSL сертификаты.
|
||||
- `ssl_cert_file`: Имя SSL сертификата.
|
||||
- `ssl_key_file`: Имя ключа SSL сертификата.
|
||||
@ -93,11 +91,14 @@ all:
|
||||
hosts:
|
||||
192.168.0.61:
|
||||
ansible_user: ansible
|
||||
ansible_python_interpreter: /usr/bin/python3.6
|
||||
SiteB:
|
||||
hosts:
|
||||
192.168.0.62:
|
||||
ansible_user: ansible
|
||||
ansible_python_interpreter: /usr/bin/python3.6
|
||||
proxy:
|
||||
hosts:
|
||||
192.168.0.63:
|
||||
ansible_user: ansible
|
||||
ansible_user: ansible
|
||||
ansible_python_interpreter: /usr/bin/python3.6
|
50
ansible/Jenkinsfile
vendored
50
ansible/Jenkinsfile
vendored
@ -1,16 +1,27 @@
|
||||
pipeline {
|
||||
agent any
|
||||
|
||||
options {
|
||||
ansiColor('xterm')
|
||||
}
|
||||
|
||||
environment {
|
||||
ANSIBLE_HOST_KEY_CHECKING = 'false'
|
||||
VAULT_PASSWORD = credentials('vault_password')
|
||||
}
|
||||
|
||||
parameters {
|
||||
string(name: 'ADDITIONAL_CONTENT_SITEA_H2', defaultValue: 'Новое сообщение для SiteA', description: 'Additional <h2> content for SiteA')
|
||||
string(name: 'ADDITIONAL_CONTENT_SITEA_P', defaultValue: 'Дополнительный параграф для SiteA', description: 'Additional <p> content for SiteA')
|
||||
string(name: 'ADDITIONAL_CONTENT_SITEB_H2', defaultValue: 'Новое сообщение для SiteB', description: 'Additional <h2> content for SiteB')
|
||||
string(name: 'ADDITIONAL_CONTENT_SITEB_P', defaultValue: 'Дополнительный параграф для SiteB', description: 'Additional <p> content for SiteB')
|
||||
choice(
|
||||
name: 'DEPLOY_TARGET',
|
||||
choices: ['SiteA', 'SiteB', 'All'],
|
||||
description: 'Выберите сайты для развертывания'
|
||||
)
|
||||
|
||||
string(name: 'ADDITIONAL_CONTENT_SITEA_H2', defaultValue: 'Новое сообщение для SiteA', description: 'Дополнительный <h2> контент для SiteA')
|
||||
string(name: 'ADDITIONAL_CONTENT_SITEA_P', defaultValue: 'Дополнительный параграф для SiteA', description: 'Дополнительный <p> контент для SiteA')
|
||||
|
||||
string(name: 'ADDITIONAL_CONTENT_SITEB_H2', defaultValue: 'Новое сообщение для SiteB', description: 'Дополнительный <h2> контент для SiteB')
|
||||
string(name: 'ADDITIONAL_CONTENT_SITEB_P', defaultValue: 'Дополнительный параграф для SiteB', description: 'Дополнительный <p> контент для SiteB')
|
||||
}
|
||||
|
||||
stages {
|
||||
@ -38,19 +49,38 @@ pipeline {
|
||||
stage('Deploy Site') {
|
||||
steps {
|
||||
script {
|
||||
def selectedHosts
|
||||
def extraVars = [
|
||||
siteA_h2: params.ADDITIONAL_CONTENT_SITEA_H2,
|
||||
siteA_p: params.ADDITIONAL_CONTENT_SITEA_P,
|
||||
siteB_h2: params.ADDITIONAL_CONTENT_SITEB_H2,
|
||||
siteB_p: params.ADDITIONAL_CONTENT_SITEB_P,
|
||||
ansible_ssh_private_key_file: env.DECYPTED_KEY_FILE
|
||||
]
|
||||
|
||||
switch(params.DEPLOY_TARGET) {
|
||||
case 'SiteA':
|
||||
selectedHosts = 'SiteA,proxy'
|
||||
extraVars.siteA_h2 = params.ADDITIONAL_CONTENT_SITEA_H2
|
||||
extraVars.siteA_p = params.ADDITIONAL_CONTENT_SITEA_P
|
||||
break
|
||||
case 'SiteB':
|
||||
selectedHosts = 'SiteB,proxy'
|
||||
extraVars.siteB_h2 = params.ADDITIONAL_CONTENT_SITEB_H2
|
||||
extraVars.siteB_p = params.ADDITIONAL_CONTENT_SITEB_P
|
||||
break
|
||||
case 'All':
|
||||
selectedHosts = 'SiteA,SiteB,proxy'
|
||||
extraVars.siteA_h2 = params.ADDITIONAL_CONTENT_SITEA_H2
|
||||
extraVars.siteA_p = params.ADDITIONAL_CONTENT_SITEA_P
|
||||
extraVars.siteB_h2 = params.ADDITIONAL_CONTENT_SITEB_H2
|
||||
extraVars.siteB_p = params.ADDITIONAL_CONTENT_SITEB_P
|
||||
break
|
||||
default:
|
||||
error "Неизвестный DEPLOY_TARGET: ${params.DEPLOY_TARGET}"
|
||||
}
|
||||
|
||||
ansiblePlaybook(
|
||||
playbook: 'ansible/playbook.yml',
|
||||
inventory: "ansible/inventory.yml",
|
||||
extraVars: extraVars,
|
||||
limit: 'SiteA,SiteB,proxy'
|
||||
limit: selectedHosts
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -72,4 +102,4 @@ pipeline {
|
||||
echo 'Deployment failed. Please check the logs for more details.'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,6 @@
|
||||
[defaults]
|
||||
inventory = inventory.yml
|
||||
roles_path = ./roles
|
||||
host_key_checking = False
|
||||
host_key_checking = False
|
||||
interpreter_python = /usr/bin/python3
|
||||
force_color = true
|
@ -1,3 +1,10 @@
|
||||
ansible_python_interpreter: /usr/bin/python3.6
|
||||
|
||||
siteA_h2: "Дефолтный заголовок H2 для SiteA"
|
||||
siteA_p: "Дефолтный параграф для SiteA"
|
||||
siteB_h2: "Дефолтный заголовок H2 для SiteB"
|
||||
siteB_p: "Дефолтный параграф для SiteB"
|
||||
|
||||
siteA:
|
||||
site_title: "SiteA - Добро пожаловать"
|
||||
site_h1: "Добро пожаловать на SiteA"
|
||||
@ -16,4 +23,4 @@ siteB:
|
||||
|
||||
proxy:
|
||||
proxy_domain: "proxy.example.com"
|
||||
proxy_ip: "192.168.0.63"
|
||||
proxy_ip: "192.168.0.63"
|
@ -4,11 +4,14 @@ all:
|
||||
hosts:
|
||||
192.168.0.61:
|
||||
ansible_user: ansible
|
||||
ansible_python_interpreter: /usr/bin/python3.6
|
||||
SiteB:
|
||||
hosts:
|
||||
192.168.0.62:
|
||||
ansible_user: ansible
|
||||
ansible_python_interpreter: /usr/bin/python3.6
|
||||
proxy:
|
||||
hosts:
|
||||
192.168.0.63:
|
||||
ansible_user: ansible
|
||||
ansible_user: ansible
|
||||
ansible_python_interpreter: /usr/bin/python3.6
|
@ -31,4 +31,4 @@
|
||||
- name: Reload Nginx
|
||||
systemd:
|
||||
name: nginx
|
||||
state: reloaded
|
||||
state: reloaded
|
@ -1,7 +1,10 @@
|
||||
upstream backend {
|
||||
{% for server in upstream_servers %}
|
||||
server {{ server }} max_fails=1 fail_timeout=10s;
|
||||
{% endfor %}
|
||||
{% if siteA.site_ip %}
|
||||
server {{ siteA.site_ip }} max_fails=1 fail_timeout=10s;
|
||||
{% endif %}
|
||||
{% if siteB.site_ip %}
|
||||
server {{ siteB.site_ip }} max_fails=1 fail_timeout=10s;
|
||||
{% endif %}
|
||||
}
|
||||
|
||||
server {
|
||||
@ -34,4 +37,4 @@ server {
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
}
|
||||
}
|
||||
}
|
@ -16,7 +16,7 @@
|
||||
owner: nginx
|
||||
group: nginx
|
||||
mode: '0755'
|
||||
when: inventory_hostname in groups['SiteA']
|
||||
when: "'SiteA' in group_names"
|
||||
|
||||
- name: Create web root for SiteB
|
||||
file:
|
||||
@ -25,19 +25,19 @@
|
||||
owner: nginx
|
||||
group: nginx
|
||||
mode: '0755'
|
||||
when: inventory_hostname in groups['SiteB']
|
||||
when: "'SiteB' in group_names"
|
||||
|
||||
- name: Deploy SiteA Configuration
|
||||
template:
|
||||
src: siteA.conf.j2
|
||||
dest: /etc/nginx/conf.d/siteA.conf
|
||||
when: inventory_hostname in groups['SiteA']
|
||||
when: "'SiteA' in group_names"
|
||||
|
||||
- name: Deploy SiteB Configuration
|
||||
template:
|
||||
src: siteB.conf.j2
|
||||
dest: /etc/nginx/conf.d/siteB.conf
|
||||
when: inventory_hostname in groups['SiteB']
|
||||
when: "'SiteB' in group_names"
|
||||
|
||||
- name: Deploy SiteA HTML
|
||||
template:
|
||||
@ -48,7 +48,7 @@
|
||||
site_h1: "{{ siteA.site_h1 }}"
|
||||
site_h2: "{{ siteA.site_h2 }}"
|
||||
site_p: "{{ siteA.site_p }}"
|
||||
when: inventory_hostname in groups['SiteA']
|
||||
when: "'SiteA' in group_names"
|
||||
|
||||
- name: Deploy SiteB HTML
|
||||
template:
|
||||
@ -59,7 +59,7 @@
|
||||
site_h1: "{{ siteB.site_h1 }}"
|
||||
site_h2: "{{ siteB.site_h2 }}"
|
||||
site_p: "{{ siteB.site_p }}"
|
||||
when: inventory_hostname in groups['SiteB']
|
||||
when: "'SiteB' in group_names"
|
||||
|
||||
- name: Reload Nginx
|
||||
systemd:
|
||||
|
Loading…
Reference in New Issue
Block a user