diff --git a/playbook.yml:Zone.Identifier b/playbook.yml:Zone.Identifier new file mode 100644 index 0000000..d6c1ec6 Binary files /dev/null and b/playbook.yml:Zone.Identifier differ diff --git a/roles/deploy_prometheus_and_grafana/handlers/main.yml b/roles/deploy_prometheus_and_grafana/handlers/main.yml index e41ff96..c56aa71 100644 --- a/roles/deploy_prometheus_and_grafana/handlers/main.yml +++ b/roles/deploy_prometheus_and_grafana/handlers/main.yml @@ -1,4 +1,6 @@ - name: Restart docker-compose community.docker.docker_compose_v2: project_src: "{{ monitoring_dir }}" + files: + - "{{ 'docker-compose-https.yml' if (domain is defined and domain | length > 0) else 'docker-compose.yml' }}" state: restarted \ No newline at end of file diff --git a/roles/deploy_prometheus_and_grafana/tasks/main.yml b/roles/deploy_prometheus_and_grafana/tasks/main.yml index b491df5..23f40ae 100644 --- a/roles/deploy_prometheus_and_grafana/tasks/main.yml +++ b/roles/deploy_prometheus_and_grafana/tasks/main.yml @@ -5,9 +5,16 @@ ansible.builtin.import_role: name: install_Docker_and_utilities +- name: Установка nginx + ansible.builtin.apt: + name: nginx + state: present + update_cache: true + - name: Получаем сертификат, если его нет ansible.builtin.import_role: name: get_ssl_cert + when: domain is defined and domain | length > 0 - name: Скопировать конфигурации сервисов ansible.builtin.template: @@ -22,9 +29,38 @@ - { src: "node-exporter-web.yml.j2", dest: "node-exporter-web.yml" } - { src: "grafana-datasource.yml.j2", dest: "grafana_provisioning/datasource.yml" } - { src: "docker-compose.yml.j2", dest: "docker-compose.yml" } + - { src: "docker-compose-https.yml.j2", dest: "docker-compose-https.yml" } notify: Restart docker-compose -- name: Запустить Docker Compose +- name: Скопировать конфиг nginx + ansible.builtin.template: + src: "nginx-https.conf.j2" + dest: "/etc/nginx/sites-available/nginx-https.conf" + mode: '0644' + when: domain is defined and domain | length > 0 + +- name: Включить nginx конфиг (symlink) + ansible.builtin.file: + src: /etc/nginx/sites-available/nginx-https.conf + dest: /etc/nginx/sites-enabled/nginx-https.conf + state: link + when: domain is defined and domain | length > 0 + +- name: Удалить дефолтную конфигурацию nginx + ansible.builtin.file: + path: /etc/nginx/sites-enabled/default + state: absent + +- name: Перезагрузить nginx + ansible.builtin.systemd: + name: nginx + enabled: true + state: reloaded + when: domain is defined and domain | length > 0 + +- name: Запуск нужного compose-файла в зависимости от наличия domain community.docker.docker_compose_v2: project_src: "{{ monitoring_dir }}" - state: present + files: + - "{{ 'docker-compose-https.yml' if (domain is defined and domain | length > 0) else 'docker-compose.yml' }}" + state: present \ No newline at end of file diff --git a/roles/get_ssl_cert/tasks/handlers.yml b/roles/get_ssl_cert/handlers/main.yml similarity index 100% rename from roles/get_ssl_cert/tasks/handlers.yml rename to roles/get_ssl_cert/handlers/main.yml diff --git a/roles/get_ssl_cert/tasks/cert_bot.yml b/roles/get_ssl_cert/tasks/main.yml similarity index 100% rename from roles/get_ssl_cert/tasks/cert_bot.yml rename to roles/get_ssl_cert/tasks/main.yml diff --git a/templates/docker-compose-https.yml.j2 b/templates/docker-compose-https.yml.j2 new file mode 100644 index 0000000..63aa3ea --- /dev/null +++ b/templates/docker-compose-https.yml.j2 @@ -0,0 +1,42 @@ +services: + prometheus: + image: prom/prometheus:latest + container_name: prometheus + ports: + - "9090:9090" + volumes: + - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro + - ./prometheus-web.yml:/etc/prometheus/prometheus-web.yml:ro + - prom_data:/prometheus + + command: + - '--config.file=/etc/prometheus/prometheus.yml' + - '--web.config.file=/etc/prometheus/prometheus-web.yml' + - '--storage.tsdb.path=/prometheus' + - '--web.enable-admin-api' + + restart: unless-stopped + + + grafana: + image: grafana/grafana:latest + container_name: grafana + ports: + - "3001:3000" + volumes: + - ./grafana_provisioning/datasource.yml:/etc/grafana/provisioning/datasources/datasource.yml:ro + - grafana_data:/var/lib/grafana + + environment: + - GF_SECURITY_ADMIN_USER="{{ grafana_admin_user }}" + - GF_SECURITY_ADMIN_PASSWORD="{{ grafana_admin_password }}" + - GF_USERS_ALLOW_SIGN_UP=false + + restart: unless-stopped + + depends_on: + - prometheus + +volumes: + prom_data: + grafana_data: diff --git a/templates/docker-compose.yml.j2:Zone.Identifier b/templates/docker-compose.yml.j2:Zone.Identifier new file mode 100644 index 0000000..d6c1ec6 Binary files /dev/null and b/templates/docker-compose.yml.j2:Zone.Identifier differ diff --git a/templates/grafana-datasource.yml.j2:Zone.Identifier b/templates/grafana-datasource.yml.j2:Zone.Identifier new file mode 100644 index 0000000..d6c1ec6 Binary files /dev/null and b/templates/grafana-datasource.yml.j2:Zone.Identifier differ diff --git a/templates/nginx-https.conf.j2 b/templates/nginx-https.conf.j2 new file mode 100644 index 0000000..0a632c7 --- /dev/null +++ b/templates/nginx-https.conf.j2 @@ -0,0 +1,20 @@ +server { + listen 80; + server_name {{ domain }}; + return 301 https://$host$request_uri; +} + +server { + listen 443 ssl; + server_name {{ domain }}; + + ssl_certificate /etc/letsencrypt/live/{{ domain }}/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/{{ domain }}/privkey.pem; + + location / { + proxy_pass http://127.0.0.1:3001; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto https; + } diff --git a/templates/node-exporter-web.yml.j2:Zone.Identifier b/templates/node-exporter-web.yml.j2:Zone.Identifier new file mode 100644 index 0000000..d6c1ec6 Binary files /dev/null and b/templates/node-exporter-web.yml.j2:Zone.Identifier differ diff --git a/templates/node_exporter.service.j2:Zone.Identifier b/templates/node_exporter.service.j2:Zone.Identifier new file mode 100644 index 0000000..d6c1ec6 Binary files /dev/null and b/templates/node_exporter.service.j2:Zone.Identifier differ diff --git a/templates/prometheus-web.yml.j2:Zone.Identifier b/templates/prometheus-web.yml.j2:Zone.Identifier new file mode 100644 index 0000000..d6c1ec6 Binary files /dev/null and b/templates/prometheus-web.yml.j2:Zone.Identifier differ diff --git a/templates/prometheus.yml.j2:Zone.Identifier b/templates/prometheus.yml.j2:Zone.Identifier new file mode 100644 index 0000000..d6c1ec6 Binary files /dev/null and b/templates/prometheus.yml.j2:Zone.Identifier differ