From bcc7fb55d547640a54684153c73d26ca30392e54 Mon Sep 17 00:00:00 2001
From: = <=>
Date: Wed, 13 Aug 2025 17:43:37 +0200
Subject: [PATCH] add new container
---
.../deploy_container_healthchecks/README.md | 72 +++++
.../defaults/main.yml | 13 +
.../files/.gitkeep | 0
.../handlers/main.yml | 0
.../meta/main.yml | 0
.../tasks/main.yml | 28 ++
.../templates/.env.j2 | 14 +
.../templates/docker-compose.yml.j2 | 49 ++++
.../vars/main.yml | 1 +
.../defaults/main.yml | 5 +
.../deploy_container_ittools/files/.gitkeep | 0
.../handlers/main.yml | 0
.../deploy_container_ittools/meta/main.yml | 0
.../deploy_container_ittools/tasks/main.yml | 27 ++
.../templates/.env.j2 | 2 +
.../templates/docker-compose.yml.j2 | 29 ++
.../deploy_container_ittools/vars/main.yml | 1 +
.../defaults/main.yml | 11 +
.../files/.gitkeep | 0
.../handlers/main.yml | 0
.../deploy_container_limesurvey/meta/main.yml | 0
.../tasks/main.yml | 32 ++
.../templates/.env.j2 | 8 +
.../templates/docker-compose.yml.j2 | 64 ++++
.../deploy_container_limesurvey/vars/main.yml | 1 +
.../defaults/main.yml | 5 +
.../deploy_container_netalertx/files/.gitkeep | 0
.../handlers/main.yml | 0
.../deploy_container_netalertx/meta/main.yml | 0
.../deploy_container_netalertx/tasks/main.yml | 31 ++
.../templates/.env.j2 | 2 +
.../templates/docker-compose.yml.j2 | 37 +++
.../deploy_container_netalertx/vars/main.yml | 1 +
.../deploy_container_netbox/defaults/main.yml | 13 +
.../files/Dockerfile-Plugins | 14 +
.../files/plugin_requirements.txt | 3 +
.../deploy_container_netbox/files/plugins.py | 13 +
.../deploy_container_netbox/handlers/main.yml | 0
.../deploy_container_netbox/meta/main.yml | 0
.../deploy_container_netbox/tasks/main.yml | 51 ++++
.../deploy_container_netbox/templates/.env.j2 | 13 +
.../templates/docker-compose.yml.j2 | 96 ++++++
.../deploy_container_netbox/vars/main.yml | 1 +
.../defaults/main.yml | 8 +
.../files/disable-internal-memory-tracker.xml | 3 +
.../files/ipv4-only.xml | 3 +
.../deploy_container_plausible/files/logs.xml | 28 ++
.../files/low-resources.xml | 23 ++
.../handlers/main.yml | 0
.../deploy_container_plausible/meta/main.yml | 0
.../deploy_container_plausible/tasks/main.yml | 41 +++
.../templates/.env.j2 | 5 +
.../templates/docker-compose.yml.j2 | 127 ++++++++
.../deploy_container_plausible/vars/main.yml | 1 +
.../deploy_container_stirlingpdf/README.md | 58 ++++
.../defaults/main.yml | 4 +
.../files/footer.html | 6 +
.../files/navbar.html | 277 ++++++++++++++++++
.../handlers/main.yml | 1 +
.../meta/main.yml | 21 ++
.../tasks/main.yml | 42 +++
.../templates/.env.j2 | 11 +
.../templates/docker-compose.yml.j2 | 47 +++
.../vars/main.yml | 1 +
.../deploy_container_ticky/defaults/main.yml | 8 +
.../deploy_container_ticky/files/.gitkeep | 0
.../deploy_container_ticky/handlers/main.yml | 0
.../deploy_container_ticky/meta/main.yml | 0
.../deploy_container_ticky/tasks/main.yml | 30 ++
.../deploy_container_ticky/templates/.env.j2 | 6 +
.../templates/docker-compose.yml.j2 | 70 +++++
.../deploy_container_ticky/vars/main.yml | 1 +
.../README.md | 112 +++++++
.../defaults/main.yml | 30 ++
.../files/middlewares.yml | 19 ++
.../handlers/main.yml | 0
.../meta/main.yml | 24 ++
.../tasks/main.yml | 67 +++++
.../templates/.env.j2 | 6 +
.../templates/docker-compose.yml.j2 | 56 ++++
.../templates/routers_services.yml.j2 | 34 +++
.../templates/traefik.yml.j2 | 35 +++
.../vars/main.yml | 1 +
.../deploy_container_vaultwarden/README.md | 55 ++++
.../defaults/main.yml | 16 +
.../files/.gitkeep | 0
.../handlers/main.yml | 0
.../meta/main.yml | 0
.../tasks/main.yml | 30 ++
.../templates/.env.j2 | 9 +
.../templates/docker-compose.yml.j2 | 42 +++
.../vars/main.yml | 1 +
92 files changed, 1996 insertions(+)
create mode 100644 ansible/roles/deploy_container_healthchecks/README.md
create mode 100644 ansible/roles/deploy_container_healthchecks/defaults/main.yml
create mode 100644 ansible/roles/deploy_container_healthchecks/files/.gitkeep
create mode 100644 ansible/roles/deploy_container_healthchecks/handlers/main.yml
create mode 100644 ansible/roles/deploy_container_healthchecks/meta/main.yml
create mode 100644 ansible/roles/deploy_container_healthchecks/tasks/main.yml
create mode 100644 ansible/roles/deploy_container_healthchecks/templates/.env.j2
create mode 100644 ansible/roles/deploy_container_healthchecks/templates/docker-compose.yml.j2
create mode 100644 ansible/roles/deploy_container_healthchecks/vars/main.yml
create mode 100644 ansible/roles/deploy_container_ittools/defaults/main.yml
create mode 100644 ansible/roles/deploy_container_ittools/files/.gitkeep
create mode 100644 ansible/roles/deploy_container_ittools/handlers/main.yml
create mode 100644 ansible/roles/deploy_container_ittools/meta/main.yml
create mode 100644 ansible/roles/deploy_container_ittools/tasks/main.yml
create mode 100644 ansible/roles/deploy_container_ittools/templates/.env.j2
create mode 100644 ansible/roles/deploy_container_ittools/templates/docker-compose.yml.j2
create mode 100644 ansible/roles/deploy_container_ittools/vars/main.yml
create mode 100644 ansible/roles/deploy_container_limesurvey/defaults/main.yml
create mode 100644 ansible/roles/deploy_container_limesurvey/files/.gitkeep
create mode 100644 ansible/roles/deploy_container_limesurvey/handlers/main.yml
create mode 100644 ansible/roles/deploy_container_limesurvey/meta/main.yml
create mode 100644 ansible/roles/deploy_container_limesurvey/tasks/main.yml
create mode 100644 ansible/roles/deploy_container_limesurvey/templates/.env.j2
create mode 100644 ansible/roles/deploy_container_limesurvey/templates/docker-compose.yml.j2
create mode 100644 ansible/roles/deploy_container_limesurvey/vars/main.yml
create mode 100644 ansible/roles/deploy_container_netalertx/defaults/main.yml
create mode 100644 ansible/roles/deploy_container_netalertx/files/.gitkeep
create mode 100644 ansible/roles/deploy_container_netalertx/handlers/main.yml
create mode 100644 ansible/roles/deploy_container_netalertx/meta/main.yml
create mode 100644 ansible/roles/deploy_container_netalertx/tasks/main.yml
create mode 100644 ansible/roles/deploy_container_netalertx/templates/.env.j2
create mode 100644 ansible/roles/deploy_container_netalertx/templates/docker-compose.yml.j2
create mode 100644 ansible/roles/deploy_container_netalertx/vars/main.yml
create mode 100644 ansible/roles/deploy_container_netbox/defaults/main.yml
create mode 100644 ansible/roles/deploy_container_netbox/files/Dockerfile-Plugins
create mode 100644 ansible/roles/deploy_container_netbox/files/plugin_requirements.txt
create mode 100644 ansible/roles/deploy_container_netbox/files/plugins.py
create mode 100644 ansible/roles/deploy_container_netbox/handlers/main.yml
create mode 100644 ansible/roles/deploy_container_netbox/meta/main.yml
create mode 100644 ansible/roles/deploy_container_netbox/tasks/main.yml
create mode 100644 ansible/roles/deploy_container_netbox/templates/.env.j2
create mode 100644 ansible/roles/deploy_container_netbox/templates/docker-compose.yml.j2
create mode 100644 ansible/roles/deploy_container_netbox/vars/main.yml
create mode 100644 ansible/roles/deploy_container_plausible/defaults/main.yml
create mode 100644 ansible/roles/deploy_container_plausible/files/disable-internal-memory-tracker.xml
create mode 100644 ansible/roles/deploy_container_plausible/files/ipv4-only.xml
create mode 100644 ansible/roles/deploy_container_plausible/files/logs.xml
create mode 100644 ansible/roles/deploy_container_plausible/files/low-resources.xml
create mode 100644 ansible/roles/deploy_container_plausible/handlers/main.yml
create mode 100644 ansible/roles/deploy_container_plausible/meta/main.yml
create mode 100644 ansible/roles/deploy_container_plausible/tasks/main.yml
create mode 100644 ansible/roles/deploy_container_plausible/templates/.env.j2
create mode 100644 ansible/roles/deploy_container_plausible/templates/docker-compose.yml.j2
create mode 100644 ansible/roles/deploy_container_plausible/vars/main.yml
create mode 100644 ansible/roles/deploy_container_stirlingpdf/README.md
create mode 100644 ansible/roles/deploy_container_stirlingpdf/defaults/main.yml
create mode 100644 ansible/roles/deploy_container_stirlingpdf/files/footer.html
create mode 100644 ansible/roles/deploy_container_stirlingpdf/files/navbar.html
create mode 100644 ansible/roles/deploy_container_stirlingpdf/handlers/main.yml
create mode 100644 ansible/roles/deploy_container_stirlingpdf/meta/main.yml
create mode 100644 ansible/roles/deploy_container_stirlingpdf/tasks/main.yml
create mode 100644 ansible/roles/deploy_container_stirlingpdf/templates/.env.j2
create mode 100644 ansible/roles/deploy_container_stirlingpdf/templates/docker-compose.yml.j2
create mode 100644 ansible/roles/deploy_container_stirlingpdf/vars/main.yml
create mode 100644 ansible/roles/deploy_container_ticky/defaults/main.yml
create mode 100644 ansible/roles/deploy_container_ticky/files/.gitkeep
create mode 100644 ansible/roles/deploy_container_ticky/handlers/main.yml
create mode 100644 ansible/roles/deploy_container_ticky/meta/main.yml
create mode 100644 ansible/roles/deploy_container_ticky/tasks/main.yml
create mode 100644 ansible/roles/deploy_container_ticky/templates/.env.j2
create mode 100644 ansible/roles/deploy_container_ticky/templates/docker-compose.yml.j2
create mode 100644 ansible/roles/deploy_container_ticky/vars/main.yml
create mode 100644 ansible/roles/deploy_container_traefik_with_letsencrypt/README.md
create mode 100644 ansible/roles/deploy_container_traefik_with_letsencrypt/defaults/main.yml
create mode 100644 ansible/roles/deploy_container_traefik_with_letsencrypt/files/middlewares.yml
create mode 100644 ansible/roles/deploy_container_traefik_with_letsencrypt/handlers/main.yml
create mode 100644 ansible/roles/deploy_container_traefik_with_letsencrypt/meta/main.yml
create mode 100644 ansible/roles/deploy_container_traefik_with_letsencrypt/tasks/main.yml
create mode 100644 ansible/roles/deploy_container_traefik_with_letsencrypt/templates/.env.j2
create mode 100644 ansible/roles/deploy_container_traefik_with_letsencrypt/templates/docker-compose.yml.j2
create mode 100644 ansible/roles/deploy_container_traefik_with_letsencrypt/templates/routers_services.yml.j2
create mode 100644 ansible/roles/deploy_container_traefik_with_letsencrypt/templates/traefik.yml.j2
create mode 100644 ansible/roles/deploy_container_traefik_with_letsencrypt/vars/main.yml
create mode 100644 ansible/roles/deploy_container_vaultwarden/README.md
create mode 100644 ansible/roles/deploy_container_vaultwarden/defaults/main.yml
create mode 100644 ansible/roles/deploy_container_vaultwarden/files/.gitkeep
create mode 100644 ansible/roles/deploy_container_vaultwarden/handlers/main.yml
create mode 100644 ansible/roles/deploy_container_vaultwarden/meta/main.yml
create mode 100644 ansible/roles/deploy_container_vaultwarden/tasks/main.yml
create mode 100644 ansible/roles/deploy_container_vaultwarden/templates/.env.j2
create mode 100644 ansible/roles/deploy_container_vaultwarden/templates/docker-compose.yml.j2
create mode 100644 ansible/roles/deploy_container_vaultwarden/vars/main.yml
diff --git a/ansible/roles/deploy_container_healthchecks/README.md b/ansible/roles/deploy_container_healthchecks/README.md
new file mode 100644
index 0000000..07a7131
--- /dev/null
+++ b/ansible/roles/deploy_container_healthchecks/README.md
@@ -0,0 +1,72 @@
+# Role: deploy_container_traefik
+
+## Purpose
+This role deploys and configures a Healthchecks.io Container with Docker Compose
+
+## Variables
+
+### Default Variables (`defaults/main.yml`)
+```yaml
+container_healthchecks_domain: health.example.com
+container_healthchecks_version: v3.10
+container_healthchecks_email_from: "healthchecks@your.domain.com"
+container_healthchecks_email_host: smtp.your.domain.com
+container_healthchecks_email_password: your_email_password
+container_healthchecks_email_user: healthchecks@your.domain.com
+container_healthchecks_email_port: 587
+container_healthchecks_email_tls: true
+container_healthchecks_email_user_verification: true
+container_healthchecks_secret_key: your_secret_key
+container_healthchecks_site_name: "Healthchecks"
+```
+
+### Secret Key Generation
+Generate a secure secret key for Django
+You can use
+´´´
+python3 -c "import secrets; print(secrets.token_urlsafe(50))"
+´´´
+to generate a new key or use an online Generator like https://djecrety.ir/
+
+### Static Variables (`vars/main.yml`)
+```yaml
+container_base_dir: /opt/docker/healthchecks
+```
+
+### Role Usage
+
+```yaml
+- name: Deploy Healthchecks.io container
+ hosts: docker
+ roles:
+ - role: deploy_container_healthchecks
+```
+
+## Requirements
+
+* Linux system (tested on Debian)
+* Docker Engine
+* Docker Compose v2 plugin (`docker compose` CLI)
+* Ansible 2.11 or higher
+* `community.docker` collection
+
+Install the required collection:
+
+```bash
+ansible-galaxy collection install community.docker
+```
+
+Or via `requirements.yml`:
+
+```yaml
+collections:
+ - name: community.docker
+ version: ">=3.4.0"
+```
+
+## Authors
+
+* Kevin Heyer
+ 📧 [kevin.heyer@wira-gmbh.de](mailto:kevin.heyer@wira-gmbh.de)
+
+```
\ No newline at end of file
diff --git a/ansible/roles/deploy_container_healthchecks/defaults/main.yml b/ansible/roles/deploy_container_healthchecks/defaults/main.yml
new file mode 100644
index 0000000..6d5eff9
--- /dev/null
+++ b/ansible/roles/deploy_container_healthchecks/defaults/main.yml
@@ -0,0 +1,13 @@
+container_healthchecks_domain: health.example.com
+container_healthchecks_version: v3.10
+container_healthchecks_email_from: "healthchecks@your.domain.com"
+container_healthchecks_email_host: smtp.your.domain.com
+container_healthchecks_email_password: your_email_password
+container_healthchecks_email_user: healthchecks@your.domain.com
+container_healthchecks_email_port: 587
+container_healthchecks_email_tls: true
+container_healthchecks_email_user_verification: true
+# Generate a secure secret key for Django
+# You can use `python3 -c "import secrets; print(secrets.token_urlsafe(50))"` to generate a new key
+container_healthchecks_secret_key: your_secret_key
+container_healthchecks_site_name: "Healthchecks"
diff --git a/ansible/roles/deploy_container_healthchecks/files/.gitkeep b/ansible/roles/deploy_container_healthchecks/files/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/ansible/roles/deploy_container_healthchecks/handlers/main.yml b/ansible/roles/deploy_container_healthchecks/handlers/main.yml
new file mode 100644
index 0000000..e69de29
diff --git a/ansible/roles/deploy_container_healthchecks/meta/main.yml b/ansible/roles/deploy_container_healthchecks/meta/main.yml
new file mode 100644
index 0000000..e69de29
diff --git a/ansible/roles/deploy_container_healthchecks/tasks/main.yml b/ansible/roles/deploy_container_healthchecks/tasks/main.yml
new file mode 100644
index 0000000..bef8104
--- /dev/null
+++ b/ansible/roles/deploy_container_healthchecks/tasks/main.yml
@@ -0,0 +1,28 @@
+---
+- name: Create Container Structure
+ ansible.builtin.file:
+ path: "{{ container_base_dir }}"
+ state: directory
+ mode: '0775'
+ recurse: true
+
+- name: Deploy Docker Compose and .env files
+ ansible.builtin.template:
+ src: '{{ item.src }}'
+ dest: '{{ item.dest }}'
+ mode: '0775'
+ loop:
+ - {src: '.env.j2', dest: '{{ container_base_dir }}/.env'}
+ - {src: 'docker-compose.yml.j2', dest: '{{ container_base_dir }}/docker-compose.yml'}
+
+- name: Stop Container
+ community.docker.docker_compose_v2:
+ project_src: "{{ container_base_dir }}"
+ state: absent
+
+- name: Start Container
+ community.docker.docker_compose_v2:
+ project_src: "{{ container_base_dir }}"
+ state: present
+ pull: always
+ recreate: always
diff --git a/ansible/roles/deploy_container_healthchecks/templates/.env.j2 b/ansible/roles/deploy_container_healthchecks/templates/.env.j2
new file mode 100644
index 0000000..9721a0d
--- /dev/null
+++ b/ansible/roles/deploy_container_healthchecks/templates/.env.j2
@@ -0,0 +1,14 @@
+ALLOWED_HOSTS={{ container_healthchecks_domain }}
+HEALTHCHECKS_DOMAIN={{ container_healthchecks_domain }}
+HEALTHCHECKS_VERSION={{ container_healthchecks_version }}
+SITE_ROOT=https://{{ container_healthchecks_domain }}
+SECRET_KEY={{ container_healthchecks_secret_key }}
+EMAIL_USE_TLS={{ container_healthchecks_email_tls }}
+EMAIL_PORT={{ container_healthchecks_email_port }}
+EMAIL_HOST_USER={{ container_healthchecks_email_user }}
+EMAIL_HOST_PASSWORD={{ container_healthchecks_email_password }}
+EMAIL_HOST={{ container_healthchecks_email_host }}
+DEFAULT_FROM_EMAIL={{ container_healthchecks_email_from }}
+EMAIL_USE_VERIFICATION={{ container_healthchecks_email_user_verification }}
+PING_ENDPOINT=https://{{ container_healthchecks_domain }}/ping/
+SITE_NAME={{ container_healthchecks_site_name }}
\ No newline at end of file
diff --git a/ansible/roles/deploy_container_healthchecks/templates/docker-compose.yml.j2 b/ansible/roles/deploy_container_healthchecks/templates/docker-compose.yml.j2
new file mode 100644
index 0000000..2882bc9
--- /dev/null
+++ b/ansible/roles/deploy_container_healthchecks/templates/docker-compose.yml.j2
@@ -0,0 +1,49 @@
+services:
+ healthchecks:
+ image: healthchecks/healthchecks:${HEALTHCHECKS_VERSION}
+ container_name: healthchecks
+ restart: always
+ volumes:
+ - db:/data
+ networks:
+ traefik:
+ environment:
+ - DB=sqlite
+ - DB_NAME=/data/hc.sqlite
+ - DEBUG=False
+ - DEFAULT_FROM_EMAIL=${DEFAULT_FROM_EMAIL}
+ - EMAIL_HOST=${EMAIL_HOST}
+ - EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD}
+ - EMAIL_HOST_USER=${EMAIL_HOST_USER}
+ - EMAIL_PORT=${EMAIL_PORT}
+ - EMAIL_USE_TLS=${EMAIL_USE_TLS}
+ - EMAIL_USE_VERIFICATION=${EMAIL_USE_VERIFICATION}
+ - SECRET_KEY=${SECRET_KEY}
+ - SITE_ROOT=${SITE_ROOT}
+ - ALLOWED_HOSTS=${ALLOWED_HOSTS}
+ - PING_ENDPOINT=${PING_ENDPOINT}
+ - SITE_NAME=${SITE_NAME}
+{% if container_traefik_auth == 'sso' %}
+ - REMOTE_USER_HEADER=HTTP_REMOTE_EMAIL
+{% endif %}
+ labels:
+ - "traefik.enable=true"
+ - "traefik.docker.network=traefik"
+ - "traefik.http.routers.healthchecks.entrypoints=http"
+ - "traefik.http.routers.healthchecks.rule=Host(`${HEALTHCHECKS_DOMAIN}`)"
+ - "traefik.http.middlewares.healthchecks-https-redirect.redirectscheme.scheme=https"
+ - "traefik.http.routers.healthchecks.middlewares=traefik-https-redirect"
+ - "traefik.http.routers.healthchecks-secure.entrypoints=https"
+ - "traefik.http.routers.healthchecks-secure.rule=Host(`${HEALTHCHECKS_DOMAIN}`)"
+ - "traefik.http.routers.healthchecks-secure.tls=true"
+ - "traefik.http.services.healthchecks.loadbalancer.server.port=8000"
+{% if container_traefik_auth == 'sso' %}
+ - "traefik.http.routers.healthchecks-secure.middlewares=middlewares-authelia@file"
+{% endif %}
+
+networks:
+ traefik:
+ external: true
+
+volumes:
+ db:
\ No newline at end of file
diff --git a/ansible/roles/deploy_container_healthchecks/vars/main.yml b/ansible/roles/deploy_container_healthchecks/vars/main.yml
new file mode 100644
index 0000000..7ccedd8
--- /dev/null
+++ b/ansible/roles/deploy_container_healthchecks/vars/main.yml
@@ -0,0 +1 @@
+container_base_dir : "/opt/docker/healthchecks"
\ No newline at end of file
diff --git a/ansible/roles/deploy_container_ittools/defaults/main.yml b/ansible/roles/deploy_container_ittools/defaults/main.yml
new file mode 100644
index 0000000..973fdda
--- /dev/null
+++ b/ansible/roles/deploy_container_ittools/defaults/main.yml
@@ -0,0 +1,5 @@
+############
+# IT-Tools #
+############
+container_ittools_version: latest
+container_ittools_domain: ittools.example.com
diff --git a/ansible/roles/deploy_container_ittools/files/.gitkeep b/ansible/roles/deploy_container_ittools/files/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/ansible/roles/deploy_container_ittools/handlers/main.yml b/ansible/roles/deploy_container_ittools/handlers/main.yml
new file mode 100644
index 0000000..e69de29
diff --git a/ansible/roles/deploy_container_ittools/meta/main.yml b/ansible/roles/deploy_container_ittools/meta/main.yml
new file mode 100644
index 0000000..e69de29
diff --git a/ansible/roles/deploy_container_ittools/tasks/main.yml b/ansible/roles/deploy_container_ittools/tasks/main.yml
new file mode 100644
index 0000000..d4b4c2e
--- /dev/null
+++ b/ansible/roles/deploy_container_ittools/tasks/main.yml
@@ -0,0 +1,27 @@
+---
+- name: Ensure data directories exist
+ ansible.builtin.file:
+ path: "{{ container_base_dir }}/"
+ state: directory
+ mode: '0755'
+
+- name: Deploy Docker Compose and .env files
+ ansible.builtin.template:
+ src: '{{ item.src }}'
+ dest: '{{ item.dest }}'
+ mode: '0775'
+ loop:
+ - {src: '.env.j2', dest: '{{ container_base_dir }}/.env'}
+ - {src: 'docker-compose.yml.j2', dest: '{{ container_base_dir }}/docker-compose.yml'}
+
+- name: Stop Container
+ community.docker.docker_compose_v2:
+ project_src: "{{ container_base_dir }}"
+ state: absent
+
+- name: Start Container
+ community.docker.docker_compose_v2:
+ project_src: "{{ container_base_dir }}"
+ state: present
+ pull: always
+ recreate: always
diff --git a/ansible/roles/deploy_container_ittools/templates/.env.j2 b/ansible/roles/deploy_container_ittools/templates/.env.j2
new file mode 100644
index 0000000..df01641
--- /dev/null
+++ b/ansible/roles/deploy_container_ittools/templates/.env.j2
@@ -0,0 +1,2 @@
+ITTOOLS_VERSION: {{ container_ittools_version }}
+ITTOOLS_DOMAIN: {{ container_ittools_domain }}
\ No newline at end of file
diff --git a/ansible/roles/deploy_container_ittools/templates/docker-compose.yml.j2 b/ansible/roles/deploy_container_ittools/templates/docker-compose.yml.j2
new file mode 100644
index 0000000..4ef8616
--- /dev/null
+++ b/ansible/roles/deploy_container_ittools/templates/docker-compose.yml.j2
@@ -0,0 +1,29 @@
+---
+services:
+ it-tools:
+ image: corentinth/it-tools:${ITTOOLS_VERSION}
+ container_name: ittools
+ restart: unless-stopped
+ networks:
+ traefik:
+ labels:
+ - "traefik.enable=true"
+ - "traefik.http.routers.ittools.entrypoints=http"
+ - "traefik.http.routers.ittools.rule=Host(`${ITTOOLS_DOMAIN:?error}`)"
+ - "traefik.http.middlewares.ittools-https-redirect.redirectscheme.scheme=https"
+ - "traefik.http.routers.ittools.middlewares=traefik-https-redirect"
+ - "traefik.http.routers.ittools-secure.entrypoints=https"
+ - "traefik.http.routers.ittools-secure.rule=Host(`${ITTOOLS_DOMAIN:?error}`)"
+ - "traefik.http.routers.ittools-secure.tls=true"
+ - "traefik.http.services.ittools.loadbalancer.server.port=80"
+ - "traefik.docker.network=traefik"
+ healthcheck:
+ test: ["CMD-SHELL", "curl -fsS -m 5 http://127.0.0.1/ >/dev/null || exit 1"]
+ interval: 30s
+ timeout: 10s
+ retries: 5
+ start_period: 30s
+
+networks:
+ traefik:
+ external: true
\ No newline at end of file
diff --git a/ansible/roles/deploy_container_ittools/vars/main.yml b/ansible/roles/deploy_container_ittools/vars/main.yml
new file mode 100644
index 0000000..5dd3918
--- /dev/null
+++ b/ansible/roles/deploy_container_ittools/vars/main.yml
@@ -0,0 +1 @@
+container_base_dir: /opt/docker/ittools
\ No newline at end of file
diff --git a/ansible/roles/deploy_container_limesurvey/defaults/main.yml b/ansible/roles/deploy_container_limesurvey/defaults/main.yml
new file mode 100644
index 0000000..0dd9e4f
--- /dev/null
+++ b/ansible/roles/deploy_container_limesurvey/defaults/main.yml
@@ -0,0 +1,11 @@
+##############
+# Limesurvey #
+##############
+container_limesurvey_version: latest
+container_limesurvey_domain: limesurvey.example.com
+container_limesurvey_user: limesurvey
+container_limesurvey_password: limesurvey_password
+container_limesurvey_name: "LimeSurvey Admin"
+container_limesurvey_email: admin@example.com
+container_mariadb_version: 10.5
+container_mariadb_password: mariadb_password
diff --git a/ansible/roles/deploy_container_limesurvey/files/.gitkeep b/ansible/roles/deploy_container_limesurvey/files/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/ansible/roles/deploy_container_limesurvey/handlers/main.yml b/ansible/roles/deploy_container_limesurvey/handlers/main.yml
new file mode 100644
index 0000000..e69de29
diff --git a/ansible/roles/deploy_container_limesurvey/meta/main.yml b/ansible/roles/deploy_container_limesurvey/meta/main.yml
new file mode 100644
index 0000000..e69de29
diff --git a/ansible/roles/deploy_container_limesurvey/tasks/main.yml b/ansible/roles/deploy_container_limesurvey/tasks/main.yml
new file mode 100644
index 0000000..314363b
--- /dev/null
+++ b/ansible/roles/deploy_container_limesurvey/tasks/main.yml
@@ -0,0 +1,32 @@
+---
+- name: Ensure data directories exist
+ ansible.builtin.file:
+ path: "{{ container_base_dir }}/data/{{ item }}"
+ state: directory
+ mode: '0755'
+ loop:
+ - "plugins"
+ - "upload"
+ - "sessions"
+ - "data/images"
+
+- name: Deploy Docker Compose and .env files
+ ansible.builtin.template:
+ src: "{{ item.src }}"
+ dest: "{{ container_base_dir }}/{{ item.dest }}"
+ mode: '0644'
+ loop:
+ - { src: 'docker-compose.yml.j2', dest: 'docker-compose.yml' }
+ - { src: '.env.j2', dest: '.env' }
+
+- name: Stop Container
+ community.docker.docker_compose_v2:
+ project_src: "{{ container_base_dir }}"
+ state: absent
+
+- name: Start Container
+ community.docker.docker_compose_v2:
+ project_src: "{{ container_base_dir }}"
+ state: present
+ pull: always
+ recreate: always
diff --git a/ansible/roles/deploy_container_limesurvey/templates/.env.j2 b/ansible/roles/deploy_container_limesurvey/templates/.env.j2
new file mode 100644
index 0000000..c93184a
--- /dev/null
+++ b/ansible/roles/deploy_container_limesurvey/templates/.env.j2
@@ -0,0 +1,8 @@
+LIMESURVEY_VERSION={{ container_limesurvey_version }}
+LIMESURVEY_DOMAIN={{ container_limesurvey_domain }}
+LIMESURVEY_USER={{ container_limesurvey_user }}
+LIMESURVEY_PASSWORD={{ container_limesurvey_password }}
+LIMESURVEY_NAME={{ container_limesurvey_name }}
+LIMESURVEY_EMAIL={{ container_limesurvey_email }}
+MARIADB_VERSION={{ container_mariadb_version }}
+MARIADB_PASSWORD={{ container_mariadb_password }}
\ No newline at end of file
diff --git a/ansible/roles/deploy_container_limesurvey/templates/docker-compose.yml.j2 b/ansible/roles/deploy_container_limesurvey/templates/docker-compose.yml.j2
new file mode 100644
index 0000000..7057041
--- /dev/null
+++ b/ansible/roles/deploy_container_limesurvey/templates/docker-compose.yml.j2
@@ -0,0 +1,64 @@
+---
+services:
+ limesurvey:
+ image: adamzammit/limesurvey:${LIMESURVEY_VERSION}
+ container_name: limesurvey
+ restart: always
+ networks:
+ traefik:
+ limesurvey:
+ volumes:
+ - ./data/plugins:/var/www/html/plugins
+ - ./data/upload:/var/www/html/upload
+ - ./data/config:/var/www/html/application/config
+ - ./data/sessions:/var/lime/sessions
+ - ./data/images/logo.png:/var/www/html/assets/images/logo-icon-white.png
+ - ./data/images/logo.png:/var/www/html/assets/images/Limesurvey_logo-big.png
+ - ./data/images/logo.png:/var/www/html/assets/images/Logo_LimeSurvey.png
+ - ./data/images/logo.png:/var/www/html/assets/images/__Limesurvey_logo.png
+ - ./data/images/logo.png:/var/www/html/assets/images/logo-white.png
+ - ./data/images/logo.png:/var/www/html/tmp/assets/aa2d5407/survey_list_header.png
+ environment:
+ LIMESURVEY_DB_PASSWORD: ${MARIADB_PASSWORD}
+ LIMESURVEY_ADMIN_USER: ${LIMESURVEY_USER}
+ LIMESURVEY_ADMIN_PASSWORD: ${LIMESURVEY_PASSWORD}
+ LIMESURVEY_ADMIN_NAME: ${LIMESURVEY_NAME}
+ LIMESURVEY_ADMIN_EMAIL: ${LIMESURVEY_EMAIL}
+ TZ: Europe/Berlin
+ labels:
+ - "traefik.enable=true"
+ - "traefik.http.routers.limesurvey.entrypoints=https"
+ - "traefik.http.routers.limesurvey.rule=Host(`${LIMESURVEY_DOMAIN}`)"
+ - "traefik.http.routers.limesurvey.tls=true"
+ - "traefik.http.routers.limesurvey.tls.certresolver=letsencrypt"
+ - "traefik.http.services.limesurvey.loadbalancer.server.port=80"
+ - "traefik.docker.network=traefik"
+ healthcheck:
+ test: ["CMD-SHELL", "curl -fsS -m 5 http://127.0.0.1/ >/dev/null || exit 1"]
+ interval: 30s
+ timeout: 10s
+ retries: 5
+ start_period: 60s
+
+ mysql:
+ image: mariadb:${MARIADB_VERSION}
+ container_name: limesurvey_db
+ restart: always
+ networks:
+ limesurvey:
+ environment:
+ MYSQL_ROOT_PASSWORD: ${MARIADB_PASSWORD}
+ volumes:
+ - ./data/mysql:/var/lib/mysql
+ healthcheck:
+ test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
+ interval: 10s
+ timeout: 5s
+ retries: 10
+ start_period: 60s
+
+networks:
+ traefik:
+ external: true
+ limesurvey:
+ driver: bridge
diff --git a/ansible/roles/deploy_container_limesurvey/vars/main.yml b/ansible/roles/deploy_container_limesurvey/vars/main.yml
new file mode 100644
index 0000000..74f6233
--- /dev/null
+++ b/ansible/roles/deploy_container_limesurvey/vars/main.yml
@@ -0,0 +1 @@
+container_base_dir: /opt/docker/limesurvey
diff --git a/ansible/roles/deploy_container_netalertx/defaults/main.yml b/ansible/roles/deploy_container_netalertx/defaults/main.yml
new file mode 100644
index 0000000..04aced8
--- /dev/null
+++ b/ansible/roles/deploy_container_netalertx/defaults/main.yml
@@ -0,0 +1,5 @@
+#############
+# NetAlertX #
+#############
+container_netalertx_version: latest
+container_netalertx_domain: netalertx.example.com
diff --git a/ansible/roles/deploy_container_netalertx/files/.gitkeep b/ansible/roles/deploy_container_netalertx/files/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/ansible/roles/deploy_container_netalertx/handlers/main.yml b/ansible/roles/deploy_container_netalertx/handlers/main.yml
new file mode 100644
index 0000000..e69de29
diff --git a/ansible/roles/deploy_container_netalertx/meta/main.yml b/ansible/roles/deploy_container_netalertx/meta/main.yml
new file mode 100644
index 0000000..e69de29
diff --git a/ansible/roles/deploy_container_netalertx/tasks/main.yml b/ansible/roles/deploy_container_netalertx/tasks/main.yml
new file mode 100644
index 0000000..afbe6fc
--- /dev/null
+++ b/ansible/roles/deploy_container_netalertx/tasks/main.yml
@@ -0,0 +1,31 @@
+---
+- name: Ensure data directories exist
+ ansible.builtin.file:
+ path: "{{ container_base_dir }}/data/{{ item }}"
+ state: directory
+ mode: '0755'
+ loop:
+ - "config"
+ - "db"
+ - "logs"
+
+- name: Deploy Docker Compose and .env files
+ ansible.builtin.template:
+ src: "{{ item.src }}"
+ dest: "{{ container_base_dir }}/{{ item.dest }}"
+ mode: '0644'
+ loop:
+ - { src: 'docker-compose.yml.j2', dest: 'docker-compose.yml' }
+ - { src: '.env.j2', dest: '.env' }
+
+- name: Stop Container
+ community.docker.docker_compose_v2:
+ project_src: "{{ container_base_dir }}"
+ state: absent
+
+- name: Start Container
+ community.docker.docker_compose_v2:
+ project_src: "{{ container_base_dir }}"
+ state: present
+ pull: always
+ recreate: always
diff --git a/ansible/roles/deploy_container_netalertx/templates/.env.j2 b/ansible/roles/deploy_container_netalertx/templates/.env.j2
new file mode 100644
index 0000000..0dd4206
--- /dev/null
+++ b/ansible/roles/deploy_container_netalertx/templates/.env.j2
@@ -0,0 +1,2 @@
+NETALERTX_VERSION={{ container_netalertx_version }}
+NETALERTX_DOMAIN={{ container_netalertx_domain }}
\ No newline at end of file
diff --git a/ansible/roles/deploy_container_netalertx/templates/docker-compose.yml.j2 b/ansible/roles/deploy_container_netalertx/templates/docker-compose.yml.j2
new file mode 100644
index 0000000..2705107
--- /dev/null
+++ b/ansible/roles/deploy_container_netalertx/templates/docker-compose.yml.j2
@@ -0,0 +1,37 @@
+services:
+ netalertx:
+ image: jokobsk/netalertx:${NETALERTX_VERSION}
+ container_name: netalertx
+ restart: unless-stopped
+ networks:
+ traefik:
+ volumes:
+ - ./data/config:/app/config
+ - ./data/db:/app/db
+ - ./data/logs:/app/front/log
+ environment:
+ - TZ=Europe/Berlin
+ labels:
+ - "traefik.enable=true"
+ - "traefik.http.routers.netalertx.entrypoints=http"
+ - "traefik.http.routers.netalertx.rule=Host(`${NETALERTX_DOMAIN}`)"
+ - "traefik.http.middlewares.netalertx-https-redirect.redirectscheme.scheme=https"
+ - "traefik.http.routers.netalertx.middlewares=traefik-https-redirect"
+ - "traefik.http.routers.netalertx-secure.entrypoints=https"
+ - "traefik.http.routers.netalertx-secure.rule=Host(`${NETALERTX_DOMAIN}`)"
+ - "traefik.http.routers.netalertx-secure.tls=true"
+ - "traefik.http.services.netalertx.loadbalancer.server.port=20211"
+{% if container_traefik_auth == 'sso' %}
+ - "traefik.http.routers.netalertx-secure.middlewares=middlewares-authelia@file"
+{% endif %}
+ - "traefik.docker.network=traefik"
+ healthcheck:
+ test: ["CMD", "curl", "-f", "127.0.0.1:20211/php/server/query_json.php?file=app_state.json"]
+ interval: 30s
+ timeout: 5s
+ start_period: 15s
+ retries: 2
+
+networks:
+ traefik:
+ external: true
\ No newline at end of file
diff --git a/ansible/roles/deploy_container_netalertx/vars/main.yml b/ansible/roles/deploy_container_netalertx/vars/main.yml
new file mode 100644
index 0000000..632933a
--- /dev/null
+++ b/ansible/roles/deploy_container_netalertx/vars/main.yml
@@ -0,0 +1 @@
+container_base_dir: /opt/docker/netalertx
\ No newline at end of file
diff --git a/ansible/roles/deploy_container_netbox/defaults/main.yml b/ansible/roles/deploy_container_netbox/defaults/main.yml
new file mode 100644
index 0000000..eb1a081
--- /dev/null
+++ b/ansible/roles/deploy_container_netbox/defaults/main.yml
@@ -0,0 +1,13 @@
+##########
+# Netbox #
+##########
+container_netbox_postgres_version: 16
+container_netbox_postgres_db: netbox
+container_netbox_postgres_user: netbox
+container_netbox_postgres_password: random_password_here
+
+container_netbox_redis_version: 7
+
+container_netbox_version: latest
+container_netbox_secret_key: "random_secret_key_here"
+container_netbox_domain: netbox.example.com
diff --git a/ansible/roles/deploy_container_netbox/files/Dockerfile-Plugins b/ansible/roles/deploy_container_netbox/files/Dockerfile-Plugins
new file mode 100644
index 0000000..4302f29
--- /dev/null
+++ b/ansible/roles/deploy_container_netbox/files/Dockerfile-Plugins
@@ -0,0 +1,14 @@
+ARG NETBOX_VERSION
+
+FROM netboxcommunity/netbox:$NETBOX_VERSION
+
+COPY ./data/plugin_requirements.txt /opt/netbox/
+RUN /usr/local/bin/uv pip install -r /opt/netbox/plugin_requirements.txt
+
+# For the toplogical_view Plugin
+RUN mkdir -p /opt/netbox/netbox/static/netbox_topology_views/img
+
+# These lines are only required if your plugin has its own static files.
+COPY ./data/configuration/plugins.py /etc/netbox/config/plugins.py
+RUN DEBUG="true" SECRET_KEY="dummydummydummydummydummydummydummydummydummydummy" \
+ /opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py collectstatic --no-input
\ No newline at end of file
diff --git a/ansible/roles/deploy_container_netbox/files/plugin_requirements.txt b/ansible/roles/deploy_container_netbox/files/plugin_requirements.txt
new file mode 100644
index 0000000..bc6462e
--- /dev/null
+++ b/ansible/roles/deploy_container_netbox/files/plugin_requirements.txt
@@ -0,0 +1,3 @@
+netbox-plugin-dns
+netbox-topology-views
+netbox-qrcode
\ No newline at end of file
diff --git a/ansible/roles/deploy_container_netbox/files/plugins.py b/ansible/roles/deploy_container_netbox/files/plugins.py
new file mode 100644
index 0000000..500223f
--- /dev/null
+++ b/ansible/roles/deploy_container_netbox/files/plugins.py
@@ -0,0 +1,13 @@
+PLUGINS = [
+ "netbox_dns",
+ "netbox_topology_views",
+ "netbox_qrcode"
+]
+
+PLUGINS_CONFIG = {
+ 'netbox_qrcode': {
+ 'models': {
+ 'dcim.device': {}, # QR-Codes für Geräte aktivieren
+ }
+ }
+}
\ No newline at end of file
diff --git a/ansible/roles/deploy_container_netbox/handlers/main.yml b/ansible/roles/deploy_container_netbox/handlers/main.yml
new file mode 100644
index 0000000..e69de29
diff --git a/ansible/roles/deploy_container_netbox/meta/main.yml b/ansible/roles/deploy_container_netbox/meta/main.yml
new file mode 100644
index 0000000..e69de29
diff --git a/ansible/roles/deploy_container_netbox/tasks/main.yml b/ansible/roles/deploy_container_netbox/tasks/main.yml
new file mode 100644
index 0000000..383ddb2
--- /dev/null
+++ b/ansible/roles/deploy_container_netbox/tasks/main.yml
@@ -0,0 +1,51 @@
+---
+- name: Ensure data directories exist
+ ansible.builtin.file:
+ path: "{{ container_base_dir }}/{{ item }}"
+ state: directory
+ mode: '0755'
+ loop:
+ - "data/backup"
+ - "data/configuration"
+ - "data/netbox"
+ - "data/static/netbox_topology_views/img"
+ - "data/static/netbox_topology_views/js"
+ - "data/static/netbox_topology_views/css"
+
+- name: Ensure Docker BuildX Plugin is installed
+ ansible.builtin.apt:
+ package:
+ - docker-buildx-plugin
+ state: present
+ cache_valid_time: 3600
+
+- name: Copy Files
+ ansible.builtin.copy:
+ src: '{{ item.src }}'
+ dest: '{{ item.dest }}'
+ mode: "0664"
+ loop:
+ - {src: 'Dockerfile-Plugins', dest: '{{ container_base_dir }}/Dockerfile-Plugins'}
+ - {src: 'plugins.py', dest: '{{ container_base_dir }}/data/configuration/plugins.py'}
+ - {src: 'plugin_requirements.txt', dest: '{{ container_base_dir }}/data/plugin_requirements.txt'}
+
+- name: Render Template Files
+ ansible.builtin.template:
+ src: '{{ item.src }}'
+ dest: '{{ item.dest }}'
+ mode: "0664"
+ loop:
+ - {src: .env.j2, dest: '{{ container_base_dir }}/.env'}
+ - {src: 'docker-compose.yml.j2', dest: '{{ container_base_dir }}/docker-compose.yml'}
+
+- name: Stop Container
+ community.docker.docker_compose_v2:
+ project_src: "{{ container_base_dir }}"
+ state: absent
+
+- name: Start Container
+ community.docker.docker_compose_v2:
+ project_src: "{{ container_base_dir }}"
+ state: present
+ pull: always
+ recreate: always
\ No newline at end of file
diff --git a/ansible/roles/deploy_container_netbox/templates/.env.j2 b/ansible/roles/deploy_container_netbox/templates/.env.j2
new file mode 100644
index 0000000..a0f25d1
--- /dev/null
+++ b/ansible/roles/deploy_container_netbox/templates/.env.j2
@@ -0,0 +1,13 @@
+# Netbox
+NETBOX_VERSION={{ container_netbox_version }}
+NETBOX_SECRET_KEY={{ container_netbox_secret_key }}
+NETBOX_DOMAIN={{ container_netbox_domain }}
+
+# Redis
+NETBOX_REDIS_VERSION={{ container_netbox_redis_version }}
+
+# PostgreSQL
+POSTGRES_VERSION={{ container_netbox_postgres_version }}
+POSTGRES_DB= {{ container_netbox_postgres_db }}
+POSTGRES_USER={{ container_netbox_postgres_user }}
+POSTGRES_PASSWORD={{ container_netbox_postgres_password }}
\ No newline at end of file
diff --git a/ansible/roles/deploy_container_netbox/templates/docker-compose.yml.j2 b/ansible/roles/deploy_container_netbox/templates/docker-compose.yml.j2
new file mode 100644
index 0000000..5701baa
--- /dev/null
+++ b/ansible/roles/deploy_container_netbox/templates/docker-compose.yml.j2
@@ -0,0 +1,96 @@
+---
+services:
+ postgres:
+ image: postgres:${POSTGRES_VERSION:-16}
+ container_name: netbox-db
+ restart: unless-stopped
+ networks:
+ - netbox
+ volumes:
+ - netbox-db:/var/lib/postgresql/data
+ - ./data/backup:/backup # Volume for Cronjob: 0 2 * * * /usr/bin/docker exec netbox-db /bin/bash -c 'PGPASSWORD=changeMeNow! pg_dump --username=netbox netbox > >
+ environment:
+ POSTGRES_DB: ${POSTGRES_DB}
+ POSTGRES_USER: ${POSTGRES_USER}
+ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
+ healthcheck:
+ test: ["CMD-SHELL", "sh -c 'pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}'"]
+ interval: 30s
+ timeout: 10s
+ retries: 5
+
+ redis:
+ image: redis:${NETBOX_REDIS_VERSION:-7}
+ restart: unless-stopped
+ networks:
+ - netbox
+ volumes:
+ - netbox-redis:/data
+ healthcheck:
+ test: ["CMD", "redis-cli", "ping"]
+ interval: 10s
+ timeout: 3s
+ retries: 5
+
+ netbox:
+ build:
+ context: .
+ dockerfile: Dockerfile-Plugins
+ args:
+ NETBOX_VERSION: ${NETBOX_VERSION:-latest}
+ container_name: netbox
+ restart: unless-stopped
+ networks:
+ - traefik
+ - netbox
+ env_file: .env
+ environment:
+ DB_NAME: ${POSTGRES_DB}
+ DB_USER: ${POSTGRES_USER}
+ DB_PASSWORD: ${POSTGRES_PASSWORD}
+ DB_HOST: postgres
+ REDIS_HOST: redis
+ REDIS_DATABASE: 0
+ REDIS_CACHE_DATABASE: 1
+ SECRET_KEY: ${NETBOX_SECRET_KEY}
+ ALLOWED_HOSTS: "*"
+ volumes:
+ - netbox-static:/opt/netbox/netbox/static
+ - netbox-media:/etc/netbox/media
+ - ./data/configuration/plugins.py:/etc/netbox/config/plugins.py
+ - ./data/netbox/static/img:/opt/netbox/netbox/static/netbox_topology_views/img
+ - ./data/netbox/static/js:/opt/netbox/netbox/static/netbox_topology_views/js
+ - ./data/netbox/static/css:/opt/netbox/netbox/static/netbox_topology_views/css
+ labels:
+ - "traefik.enable=true"
+ - "traefik.http.routers.netbox.entrypoints=http"
+ - "traefik.http.routers.netbox.rule=Host(`${NETBOX_DOMAIN:?error}`)"
+ - "traefik.http.middlewares.netbox-https-redirect.redirectscheme.scheme=https"
+ - "traefik.http.routers.netbox.middlewares=traefik-https-redirect"
+ - "traefik.http.routers.netbox-secure.entrypoints=https"
+ - "traefik.http.routers.netbox-secure.rule=Host(`${NETBOX_DOMAIN:?error}`)"
+ - "traefik.http.routers.netbox-secure.tls=true"
+ - "traefik.http.services.netbox.loadbalancer.server.port=8080"
+ - "traefik.docker.network=traefik"
+ depends_on:
+ postgres:
+ condition: service_healthy
+ redis:
+ condition: service_healthy
+ healthcheck:
+ start_period: 60s
+ timeout: 3s
+ interval: 15s
+ test: "curl -f http://localhost:8080/login/ || exit 1"
+
+networks:
+ traefik:
+ external: true
+ netbox:
+ driver: bridge
+
+volumes:
+ netbox-db:
+ netbox-redis:
+ netbox-static:
+ netbox-media:
\ No newline at end of file
diff --git a/ansible/roles/deploy_container_netbox/vars/main.yml b/ansible/roles/deploy_container_netbox/vars/main.yml
new file mode 100644
index 0000000..ade3d90
--- /dev/null
+++ b/ansible/roles/deploy_container_netbox/vars/main.yml
@@ -0,0 +1 @@
+container_base_dir: /opt/docker/netbox
\ No newline at end of file
diff --git a/ansible/roles/deploy_container_plausible/defaults/main.yml b/ansible/roles/deploy_container_plausible/defaults/main.yml
new file mode 100644
index 0000000..37f34fc
--- /dev/null
+++ b/ansible/roles/deploy_container_plausible/defaults/main.yml
@@ -0,0 +1,8 @@
+#############
+# Plausible #
+#############
+container_plausible_version: "latest"
+container_plausible_clickhouse_version: "latest"
+container_plausible_postgres_version: "latest"
+container_plausible_secret_key: "randon_secret_key" # openssl rand -base64 48
+container_plausible_domain: "plausible.example.com"
diff --git a/ansible/roles/deploy_container_plausible/files/disable-internal-memory-tracker.xml b/ansible/roles/deploy_container_plausible/files/disable-internal-memory-tracker.xml
new file mode 100644
index 0000000..b005e0a
--- /dev/null
+++ b/ansible/roles/deploy_container_plausible/files/disable-internal-memory-tracker.xml
@@ -0,0 +1,3 @@
+query_log
+