diff --git a/datacoop_hosts b/datacoop_hosts index 4fe371b..5b8c106 100644 --- a/datacoop_hosts +++ b/datacoop_hosts @@ -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 \ No newline at end of file diff --git a/playbook.yml b/playbook.yml index de51a46..71b78eb 100644 --- a/playbook.yml +++ b/playbook.yml @@ -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 diff --git a/roles/docker/defaults/main.yml b/roles/docker/defaults/main.yml index f1f660d..d3b7064 100644 --- a/roles/docker/defaults/main.yml +++ b/roles/docker/defaults/main.yml @@ -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) }}" diff --git a/roles/docker/files/vhost/uptime_kuma b/roles/docker/files/vhost/uptime_kuma new file mode 100644 index 0000000..2cff0be --- /dev/null +++ b/roles/docker/files/vhost/uptime_kuma @@ -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; \ No newline at end of file diff --git a/roles/docker/tasks/pre_deploy/uptime_kuma.yml b/roles/docker/tasks/pre_deploy/uptime_kuma.yml new file mode 100644 index 0000000..f153e0e --- /dev/null +++ b/roles/docker/tasks/pre_deploy/uptime_kuma.yml @@ -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" diff --git a/roles/docker/tasks/services.yml b/roles/docker/tasks/services.yml index 676335c..2c7276f 100644 --- a/roles/docker/tasks/services.yml +++ b/roles/docker/tasks/services.yml @@ -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)) diff --git a/roles/docker/templates/compose-files/uptime_kuma.yml.j2 b/roles/docker/templates/compose-files/uptime_kuma.yml.j2 new file mode 100644 index 0000000..0096d6f --- /dev/null +++ b/roles/docker/templates/compose-files/uptime_kuma.yml.j2 @@ -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 \ No newline at end of file diff --git a/roles/ubuntu_base/tasks/base.yml b/roles/ubuntu_base/tasks/base.yml index f53f924..733270d 100644 --- a/roles/ubuntu_base/tasks/base.yml +++ b/roles/ubuntu_base/tasks/base.yml @@ -14,4 +14,4 @@ - name: Install Dell OpenManage apt: name: srvadmin-all - when: not vagrant + when: not vagrant and not skip_dell_apt_repo diff --git a/roles/ubuntu_base/tasks/main.yml b/roles/ubuntu_base/tasks/main.yml index e6a1f15..cc40345 100644 --- a/roles/ubuntu_base/tasks/main.yml +++ b/roles/ubuntu_base/tasks/main.yml @@ -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] diff --git a/uptime.data.coop.yml b/uptime.data.coop.yml new file mode 100644 index 0000000..714d469 --- /dev/null +++ b/uptime.data.coop.yml @@ -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 diff --git a/vagrant_host b/vagrant_host index e247254..c49d9be 100644 --- a/vagrant_host +++ b/vagrant_host @@ -1 +1,2 @@ +[production] localhost ansible_port=19022