Add uptime kuma as a service we can deploy to a different host for monitoring. #196

Merged
samsapti merged 5 commits from add_uptime_data_coop into main 2024-03-01 19:47:58 +00:00
11 changed files with 88 additions and 10 deletions

View file

@ -1,3 +1,5 @@
######################################
### All hosts
[production]
hevonen.servers.data.coop ansible_port=19022 ansible_python_interpreter=/usr/bin/python3
[monitoring]
uptime.data.coop ansible_python_interpreter=/usr/bin/python3

View file

@ -1,6 +1,6 @@
# vim: ft=yaml.ansible
---
- hosts: all
- hosts: production
gather_facts: true
become: true
vars:
@ -15,6 +15,9 @@
smtp_host: "postfix"
smtp_port: "587"
services_exclude:
- uptime_kuma
tasks:
- import_role:
name: ubuntu_base

View file

@ -4,7 +4,6 @@ volume_root_folder: "/docker-volumes"
volume_website_folder: "{{ volume_root_folder }}/websites"
services:
### Internal services ###
postfix:
domain: "smtp.{{ base_domain }}"
@ -62,7 +61,6 @@ services:
version: "2"
### External services ###
nextcloud:
domain: "cloud.{{ base_domain }}"
volume_folder: "{{ volume_root_folder }}/nextcloud"
@ -208,3 +206,14 @@ services:
watchtower:
volume_folder: "{{ volume_root_folder }}/watchtower"
version: "1.5.3"
### Uptime monitoring ###
uptime_kuma:
domain: "uptime.{{ base_domain }}"
status_domain: "status.{{ base_domain }}"
volume_folder: "{{ volume_root_folder }}/uptime_kuma"
pre_deploy_tasks: true
version: "latest"
services_exclude: []
services_include: "{{ services | dict2items | map(attribute='key') | list | difference(services_exclude) }}"

View file

@ -0,0 +1,4 @@
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;

View file

@ -0,0 +1,9 @@
- name: Upload vhost config for uptime domain
copy:
src: vhost/uptime_kuma
dest: "{{ services.nginx_proxy.volume_folder }}/vhost/{{ services.uptime_kuma.domain }}_location"
- name: Upload vhost config for status domain
copy:
src: vhost/uptime_kuma
dest: "{{ services.nginx_proxy.volume_folder }}/vhost/{{ services.uptime_kuma.status_domain }}_location"

View file

@ -8,8 +8,10 @@
include_tasks:
file: block.yml
vars:
service: "{{ item }}"
loop: "{{ services | dict2items(key_name='name', value_name='vars') }}"
service:
name: "{{ item }}"
vars: "{{ services[item] }}"
loop: "{{ services_include }}"
when: single_service is not defined and
(item.vars.disabled_in_vagrant is not defined or
not (item.vars.disabled_in_vagrant and vagrant))
@ -18,7 +20,9 @@
include_tasks:
file: block.yml
vars:
service: "{{ {single_service: services[single_service]} | dict2items(key_name='name', value_name='vars') | join }}"
service:
name: "{{ single_service }}"
vars: "{{ services[single_service] }}"
when: single_service is defined and single_service in services and
(services[single_service].disabled_in_vagrant is not defined or
not (services[single_service].disabled_in_vagrant and vagrant))

View file

@ -0,0 +1,21 @@
# vim: ft=yaml.docker-compose
version: '3.3'
services:
uptime-kuma:
image: "louislam/uptime-kuma:{{ services.uptime_kuma.version }}"
restart: always
container_name: uptime-kuma
networks:
- external_services
volumes:
- "./uptime-kuma-data:/app/data"
environment:
VIRTUAL_HOST: "{{ services.uptime_kuma.domain }},{{ services.uptime_kuma.status_domain }}"
LETSENCRYPT_HOST: "{{ services.uptime_kuma.domain }},{{ services.uptime_kuma.status_domain }}"
LETSENCRYPT_EMAIL: "{{ letsencrypt_email }}"
networks:
external_services:
external: true

View file

@ -14,4 +14,4 @@
- name: Install Dell OpenManage
apt:
name: srvadmin-all
when: not vagrant
when: not vagrant and not skip_dell_apt_repo

View file

@ -2,10 +2,11 @@
---
- import_tasks: ssh-port.yml
tags: [change-ssh-port]
when: not do_not_change_ssh_port
- import_tasks: dell-apt-repo.yml
tags: [setup-dell-apt-repo]
when: not vagrant
when: not skip_dell_apt_repo and not vagrant
- import_tasks: upgrade.yml
tags: [do-full-system-upgrade]

24
uptime.data.coop.yml Normal file
View file

@ -0,0 +1,24 @@
# vim: ft=yaml.ansible
---
- hosts: monitoring
gather_facts: true
become: true
vars:
vagrant: false
base_domain: "{{ 'datacoop.devel' if vagrant else 'data.coop' }}"
letsencrypt_enabled: true
letsencrypt_email: "admin@{{ base_domain }}"
services_include:
- nginx_proxy
- uptime_kuma
- watchtower
do_not_change_ssh_port: true
skip_dell_apt_repo: true
tasks:
- import_role:
name: ubuntu_base
tags:
- base_only
- import_role:
name: docker

View file

@ -1 +1,2 @@
[production]
localhost ansible_port=19022