Merge pull request 'Add nginx role and playbook for App1 deployment' (#4) from feature/nginx-app1-deployment into main
Reviewed-on: #4
This commit is contained in:
37
playbooks/deploy-app1-nginx.yml
Normal file
37
playbooks/deploy-app1-nginx.yml
Normal file
@ -0,0 +1,37 @@
|
||||
---
|
||||
- name: Deploy Nginx on App1
|
||||
hosts: 192.168.0.110
|
||||
become: yes
|
||||
gather_facts: yes
|
||||
|
||||
roles:
|
||||
- role: nginx
|
||||
|
||||
tasks:
|
||||
- name: Verify Nginx installation
|
||||
uri:
|
||||
url: "http://{{ ansible_default_ipv4.address }}"
|
||||
status_code: 200
|
||||
timeout: 10
|
||||
register: nginx_check
|
||||
until: nginx_check.status == 200
|
||||
retries: 5
|
||||
delay: 5
|
||||
ignore_errors: yes
|
||||
|
||||
- name: Verify Nginx status endpoint
|
||||
uri:
|
||||
url: "http://{{ ansible_default_ipv4.address }}/status"
|
||||
status_code: 200
|
||||
timeout: 5
|
||||
register: status_check
|
||||
ignore_errors: yes
|
||||
|
||||
- name: Display deployment result
|
||||
debug:
|
||||
msg: |
|
||||
✅ Nginx successfully deployed on {{ inventory_hostname }}!
|
||||
🌐 Access at: http://{{ ansible_default_ipv4.address }}
|
||||
📊 Status page: http://{{ ansible_default_ipv4.address }}/status
|
||||
📈 Nginx metrics: http://{{ ansible_default_ipv4.address }}/nginx_status
|
||||
🖥️ Node metrics: http://{{ ansible_default_ipv4.address }}:9100/metrics
|
||||
13
roles/nginx/handlers/main.yml
Normal file
13
roles/nginx/handlers/main.yml
Normal file
@ -0,0 +1,13 @@
|
||||
---
|
||||
# Handlers for Nginx role
|
||||
- name: reload nginx
|
||||
systemd:
|
||||
name: nginx
|
||||
state: reloaded
|
||||
daemon_reload: yes
|
||||
|
||||
- name: restart nginx
|
||||
systemd:
|
||||
name: nginx
|
||||
state: restarted
|
||||
daemon_reload: yes
|
||||
113
roles/nginx/tasks/main.yml
Normal file
113
roles/nginx/tasks/main.yml
Normal file
@ -0,0 +1,113 @@
|
||||
---
|
||||
# Установка и настройка Nginx - финальная версия
|
||||
- name: Install prerequisites
|
||||
apt:
|
||||
name:
|
||||
- curl
|
||||
- wget
|
||||
- software-properties-common
|
||||
- ca-certificates
|
||||
- gnupg2
|
||||
state: present
|
||||
update_cache: yes
|
||||
tags: nginx
|
||||
|
||||
- name: Create keyrings directory
|
||||
file:
|
||||
path: /etc/apt/keyrings
|
||||
state: directory
|
||||
mode: '0755'
|
||||
tags: nginx
|
||||
|
||||
- name: Download and add Nginx GPG key
|
||||
shell: |
|
||||
curl -fsSL https://nginx.org/keys/nginx_signing.key | gpg --dearmor -o /etc/apt/keyrings/nginx.gpg
|
||||
chmod 644 /etc/apt/keyrings/nginx.gpg
|
||||
args:
|
||||
creates: /etc/apt/keyrings/nginx.gpg
|
||||
tags: nginx
|
||||
|
||||
- name: Add Nginx repository
|
||||
apt_repository:
|
||||
repo: "deb [signed-by=/etc/apt/keyrings/nginx.gpg] http://nginx.org/packages/ubuntu {{ ansible_distribution_release }} nginx"
|
||||
state: present
|
||||
filename: nginx-official
|
||||
update_cache: yes
|
||||
tags: nginx
|
||||
|
||||
- name: Install Nginx
|
||||
apt:
|
||||
name: nginx
|
||||
state: latest
|
||||
update_cache: yes
|
||||
tags: nginx
|
||||
|
||||
- name: Create custom web directory
|
||||
file:
|
||||
path: /var/www/app1
|
||||
state: directory
|
||||
owner: www-data
|
||||
group: www-data
|
||||
mode: '0755'
|
||||
tags: nginx
|
||||
|
||||
- name: Deploy test index.html
|
||||
template:
|
||||
src: index.html.j2
|
||||
dest: /var/www/app1/index.html
|
||||
owner: www-data
|
||||
group: www-data
|
||||
mode: '0644'
|
||||
tags: nginx
|
||||
|
||||
- name: Remove default Nginx configurations
|
||||
file:
|
||||
path: "{{ item }}"
|
||||
state: absent
|
||||
loop:
|
||||
- /etc/nginx/conf.d/default.conf
|
||||
- /etc/nginx/conf.d/default.conf.backup
|
||||
- /etc/nginx/sites-enabled/default
|
||||
tags: nginx
|
||||
notify: reload nginx
|
||||
|
||||
- name: Deploy Nginx configuration for app1 in conf.d
|
||||
template:
|
||||
src: app1.conf.j2
|
||||
dest: /etc/nginx/conf.d/app1.conf
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
tags: nginx
|
||||
notify: reload nginx
|
||||
|
||||
- name: Remove old sites-available config if exists
|
||||
file:
|
||||
path: /etc/nginx/sites-available/app1
|
||||
state: absent
|
||||
tags: nginx
|
||||
|
||||
- name: Remove old sites-enabled symlink if exists
|
||||
file:
|
||||
path: /etc/nginx/sites-enabled/app1
|
||||
state: absent
|
||||
tags: nginx
|
||||
|
||||
- name: Test Nginx configuration
|
||||
command: nginx -t
|
||||
register: nginx_test
|
||||
changed_when: false
|
||||
tags: nginx
|
||||
|
||||
- name: Display Nginx test result
|
||||
debug:
|
||||
msg: "{{ nginx_test.stdout_lines }}"
|
||||
tags: nginx
|
||||
|
||||
- name: Enable and start Nginx service
|
||||
systemd:
|
||||
name: nginx
|
||||
state: started
|
||||
enabled: yes
|
||||
daemon_reload: yes
|
||||
tags: nginx
|
||||
28
roles/nginx/templates/app1.conf.j2
Normal file
28
roles/nginx/templates/app1.conf.j2
Normal file
@ -0,0 +1,28 @@
|
||||
# App1 Nginx configuration
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
|
||||
root /var/www/app1;
|
||||
index index.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
location /status {
|
||||
stub_status on;
|
||||
access_log off;
|
||||
allow 127.0.0.1;
|
||||
allow 192.168.0.0/24;
|
||||
deny all;
|
||||
}
|
||||
|
||||
location /nginx_status {
|
||||
stub_status on;
|
||||
access_log off;
|
||||
allow 127.0.0.1;
|
||||
allow 192.168.0.0/24;
|
||||
deny all;
|
||||
}
|
||||
}
|
||||
64
roles/nginx/templates/index.html.j2
Normal file
64
roles/nginx/templates/index.html.j2
Normal file
@ -0,0 +1,64 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Test App1 - Nginx</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
margin: 40px;
|
||||
background-color: #f4f4f9;
|
||||
color: #333;
|
||||
}
|
||||
.container {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
background-color: white;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 0 10px rgba(0,0,0,0.1);
|
||||
}
|
||||
h1 {
|
||||
color: #2c3e50;
|
||||
}
|
||||
.info {
|
||||
background-color: #e8f4fc;
|
||||
padding: 15px;
|
||||
border-left: 4px solid #3498db;
|
||||
margin: 20px 0;
|
||||
}
|
||||
.metrics {
|
||||
background-color: #e8f8ef;
|
||||
padding: 15px;
|
||||
border-left: 4px solid #2ecc71;
|
||||
margin: 20px 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>🚀 Test Application 1 - Nginx Server</h1>
|
||||
|
||||
<div class="info">
|
||||
<h3>📊 Server Information:</h3>
|
||||
<p><strong>Hostname:</strong> {{ ansible_hostname }}</p>
|
||||
<p><strong>IP Address:</strong> {{ ansible_default_ipv4.address }}</p>
|
||||
<p><strong>Role:</strong> Web Server (Nginx)</p>
|
||||
<p><strong>Deployed via:</strong> Ansible</p>
|
||||
</div>
|
||||
|
||||
<div class="metrics">
|
||||
<h3>📈 Monitoring:</h3>
|
||||
<p>Node Exporter metrics available at: <code>http://{{ ansible_default_ipv4.address }}:9100/metrics</code></p>
|
||||
<p>Nginx stub_status at: <code>http://{{ ansible_default_ipv4.address }}/status</code></p>
|
||||
<p>Collected by Prometheus: <code>192.168.0.105:9090</code></p>
|
||||
</div>
|
||||
|
||||
<h3>🔗 Infrastructure Links:</h3>
|
||||
<ul>
|
||||
<li><a href="http://192.168.0.106:3000">Grafana Dashboard</a></li>
|
||||
<li><a href="http://192.168.0.105:9090">Prometheus UI</a></li>
|
||||
<li><a href="http://192.168.0.100:3000">Git/Forgejo</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user