From 466e8d68b1445c69c5a487003e4d4bcecb7b1faf Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Fri, 24 Jul 2026 15:09:11 +0200 Subject: [PATCH 1/6] ignored dynamic dir --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 1b4341d..fba9b79 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .DS_Store +.ansible ansible/playbooks/wg_clients collections \ No newline at end of file -- 2.17.1 From 528d834160400cf6ec421e49a60d9eaf8f320442 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Fri, 24 Jul 2026 15:11:01 +0200 Subject: [PATCH 2/6] Imported pangolin role from https://github.com/patelanuj21/pangolin-ansible-terraform/tree/main --- .../group_vars/pangolin/mini1.yaml | 5 + ansible/playbooks/pangolin.yaml | 7 ++ .../roles/pangolin/tasks/docker_pangolin.yaml | 99 +++++++++++++++++++ .../playbooks/roles/pangolin/tasks/main.yaml | 3 + .../roles/pangolin/tasks/prepare_node.yaml | 50 ++++++++++ .../pangolin/templates/docker-compose.yml.j2 | 53 ++++++++++ .../pangolin/templates/dynamic_config.yml.j2 | 53 ++++++++++ .../pangolin/templates/pangolin_config.yml.j2 | 22 +++++ .../pangolin/templates/traefik_config.yml.j2 | 49 +++++++++ 9 files changed, 341 insertions(+) create mode 100644 ansible/inventories/group_vars/pangolin/mini1.yaml create mode 100644 ansible/playbooks/pangolin.yaml create mode 100644 ansible/playbooks/roles/pangolin/tasks/docker_pangolin.yaml create mode 100644 ansible/playbooks/roles/pangolin/tasks/main.yaml create mode 100644 ansible/playbooks/roles/pangolin/tasks/prepare_node.yaml create mode 100644 ansible/playbooks/roles/pangolin/templates/docker-compose.yml.j2 create mode 100644 ansible/playbooks/roles/pangolin/templates/dynamic_config.yml.j2 create mode 100644 ansible/playbooks/roles/pangolin/templates/pangolin_config.yml.j2 create mode 100644 ansible/playbooks/roles/pangolin/templates/traefik_config.yml.j2 diff --git a/ansible/inventories/group_vars/pangolin/mini1.yaml b/ansible/inventories/group_vars/pangolin/mini1.yaml new file mode 100644 index 0000000..aceaaee --- /dev/null +++ b/ansible/inventories/group_vars/pangolin/mini1.yaml @@ -0,0 +1,5 @@ +--- +pangolin_dashboard_url: "https://pangolin.hassallab.it" +pangolin_base_domain: "hassallab.it" +pangolin_secret: "{{ pangolin_crypted_secret }}" +pangolin_admin_email: "hassallah@mail.com" diff --git a/ansible/playbooks/pangolin.yaml b/ansible/playbooks/pangolin.yaml new file mode 100644 index 0000000..b7858cf --- /dev/null +++ b/ansible/playbooks/pangolin.yaml @@ -0,0 +1,7 @@ +--- +- name: Install and configure Pangolin + hosts: pangolin + become: true + roles: + - geerlingguy.docker + - pangolin \ No newline at end of file diff --git a/ansible/playbooks/roles/pangolin/tasks/docker_pangolin.yaml b/ansible/playbooks/roles/pangolin/tasks/docker_pangolin.yaml new file mode 100644 index 0000000..c36a279 --- /dev/null +++ b/ansible/playbooks/roles/pangolin/tasks/docker_pangolin.yaml @@ -0,0 +1,99 @@ +- name: Ensure Pangolin directory exists + file: + path: /home/ubuntu/pangolin + state: directory + +- name: Ensure Pangolin config directory exists + file: + path: /home/ubuntu/pangolin/pangolin_config + state: directory + +- name: Template Pangolin config file + template: + src: pangolin_config.yml.j2 + dest: /home/ubuntu/pangolin/pangolin_config/config.yaml + +- name: Ensure Traefik config directory exists + file: + path: /home/ubuntu/pangolin/config/traefik + state: directory + +- name: Template Traefik config file + template: + src: traefik_config.yml.j2 + dest: /home/ubuntu/pangolin/config/traefik/traefik_config.yml + +- name: Template Traefik dynamic config file + template: + src: dynamic_config.yml.j2 + dest: /home/ubuntu/pangolin/config/traefik/dynamic_config.yml + +- name: Template docker-compose.yml for Pangolin + template: + src: docker-compose.yml.j2 + dest: /home/ubuntu/pangolin/docker-compose.yml + register: pangolin_compose_template + +- name: Check if Pangolin container is running + shell: docker ps --filter "name=pangolin" --filter "status=running" --format "{{'{{.Names}}'}}" + register: pangolin_running + changed_when: false + +- name: Check if Traefik container is running + shell: docker ps --filter "name=traefik" --filter "status=running" --format "{{'{{.Names}}'}}" + register: traefik_running + changed_when: false + +- name: Check if Gerbil container is running + shell: docker ps --filter "name=gerbil" --filter "status=running" --format "{{'{{.Names}}'}}" + register: gerbil_running + changed_when: false + +- name: Set fact if compose up is needed + set_fact: + pangolin_compose_needs_up: "{{ pangolin_compose_template.changed or (pangolin_running.stdout != 'pangolin') or (traefik_running.stdout != 'traefik') or (gerbil_running.stdout != 'gerbil') }}" + +- name: Remove conflicting Pangolin containers if present + shell: | + docker rm -f pangolin || true + docker rm -f traefik || true + docker rm -f gerbil || true + when: pangolin_compose_needs_up + ignore_errors: true + +- name: Start Pangolin and Gerbil with Docker Compose (force recreate if needed) + shell: | + cd /home/ubuntu/pangolin + docker compose up -d --force-recreate + when: pangolin_compose_needs_up + register: docker_compose_up + failed_when: docker_compose_up.rc != 0 + +- name: Check Docker Compose service status + shell: | + cd /home/ubuntu/pangolin + docker compose ps + register: docker_compose_status + +- name: Display Docker Compose service status + debug: + msg: "{{ docker_compose_status.stdout_lines }}" + +- name: "Assert that mandatory variables are defined and not default" + assert: + that: + - pangolin_dashboard_url != 'https://pangolin.example.com' + - pangolin_base_domain != 'example.com' + - pangolin_secret != 'changeme' + - pangolin_admin_email != 'admin@example.com' + fail_msg: "Please define all mandatory variables in group_vars/all/main.yml. Do not use the default example values." + success_msg: "All mandatory variables are properly defined." + +- name: Display success message + debug: + msg: | + ✅ Pangolin deployment is complete! + + You can access your dashboard at: {{ pangolin_dashboard_url }} + Initial Setup URL: {{ pangolin_dashboard_url }}/auth/initial-setup + Admin User: {{ pangolin_admin_email }} \ No newline at end of file diff --git a/ansible/playbooks/roles/pangolin/tasks/main.yaml b/ansible/playbooks/roles/pangolin/tasks/main.yaml new file mode 100644 index 0000000..a40aeb3 --- /dev/null +++ b/ansible/playbooks/roles/pangolin/tasks/main.yaml @@ -0,0 +1,3 @@ +--- +include_tasks: prepare_node.yaml +include_tasks: docker_pangolin.yaml \ No newline at end of file diff --git a/ansible/playbooks/roles/pangolin/tasks/prepare_node.yaml b/ansible/playbooks/roles/pangolin/tasks/prepare_node.yaml new file mode 100644 index 0000000..5a03ae2 --- /dev/null +++ b/ansible/playbooks/roles/pangolin/tasks/prepare_node.yaml @@ -0,0 +1,50 @@ +--- +- name: Update all packages + apt: + update_cache: yes + upgrade: dist + +- name: Install essential packages + apt: + name: + - net-tools + - curl + - wget + - htop + - vim + state: present + +- name: Add 1GB swap file + shell: | + fallocate -l 1G /swapfile + chmod 600 /swapfile + mkswap /swapfile + swapon /swapfile + args: + creates: /swapfile + +- name: Make swap persistent + lineinfile: + dest: /etc/fstab + line: '/swapfile none swap sw 0 0' + state: present + +- name: Configure iptables firewall rules + iptables: + chain: INPUT + protocol: "{{ item.protocol }}" + destination_port: "{{ item.port }}" + jump: ACCEPT + action: insert + rule_num: 1 + loop: + - { protocol: tcp, port: '80', description: 'HTTP for Lets Encrypt ACME challenge' } + - { protocol: tcp, port: '443', description: 'HTTPS for secure web traffic' } + - { protocol: udp, port: '51820', description: 'WireGuard VPN traffic' } + become: true + register: iptables_result + +- name: Display iptables configuration status + debug: + msg: "Configured firewall rules for ports: 80 (HTTP), 443 (HTTPS), 51820 (WireGuard UDP)" + when: iptables_result is changed diff --git a/ansible/playbooks/roles/pangolin/templates/docker-compose.yml.j2 b/ansible/playbooks/roles/pangolin/templates/docker-compose.yml.j2 new file mode 100644 index 0000000..b0efb85 --- /dev/null +++ b/ansible/playbooks/roles/pangolin/templates/docker-compose.yml.j2 @@ -0,0 +1,53 @@ +services: + pangolin: + image: fosrl/pangolin:latest + container_name: pangolin + restart: unless-stopped + volumes: + - ./pangolin_config:/app/config + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3001/api/v1/"] + interval: "3s" + timeout: "3s" + retries: 15 + + gerbil: + image: fosrl/gerbil:1.0.0 + container_name: gerbil + restart: unless-stopped + depends_on: + pangolin: + condition: service_healthy + command: + - --reachableAt=http://gerbil:3003 + - --generateAndSaveKeyTo=/var/config/key + - --remoteConfig=http://pangolin:3001/api/v1/gerbil/get-config + - --reportBandwidthTo=http://pangolin:3001/api/v1/gerbil/receive-bandwidth + volumes: + - ./gerbil_config/:/var/config + cap_add: + - NET_ADMIN + - SYS_MODULE + ports: + - 51820:51820/udp + - 443:443 # Port for traefik because of the network_mode + - 80:80 # Port for traefik because of the network_mode + + traefik: + image: traefik:v3.4.1 + container_name: traefik + restart: unless-stopped + network_mode: service:gerbil # Ports appear on the gerbil service + depends_on: + pangolin: + condition: service_healthy + command: + - --configFile=/etc/traefik/traefik_config.yml + volumes: + - ./config/traefik:/etc/traefik:ro # Volume to store the Traefik configuration + - ./config/letsencrypt:/letsencrypt # Volume to store the Let's Encrypt certificates + - ./config/traefik/logs:/var/log/traefik # Volume to store Traefik logs +networks: + default: + driver: bridge + name: pangolin \ No newline at end of file diff --git a/ansible/playbooks/roles/pangolin/templates/dynamic_config.yml.j2 b/ansible/playbooks/roles/pangolin/templates/dynamic_config.yml.j2 new file mode 100644 index 0000000..33c3312 --- /dev/null +++ b/ansible/playbooks/roles/pangolin/templates/dynamic_config.yml.j2 @@ -0,0 +1,53 @@ +http: + middlewares: + redirect-to-https: + redirectScheme: + scheme: https + + routers: + # HTTP to HTTPS redirect router + main-app-router-redirect: + rule: "Host(`{{ pangolin_dashboard_url | regex_replace('^https://', '') }}`)" + service: next-service + entryPoints: + - web + middlewares: + - redirect-to-https + + # Next.js router (handles everything except API and WebSocket paths) + next-router: + rule: "Host(`{{ pangolin_dashboard_url | regex_replace('^https://', '') }}`) && !PathPrefix(`/api/v1`)" + service: next-service + entryPoints: + - websecure + tls: + certResolver: letsencrypt + + # API router (handles /api/v1 paths) + api-router: + rule: "Host(`{{ pangolin_dashboard_url | regex_replace('^https://', '') }}`) && PathPrefix(`/api/v1`)" + service: api-service + entryPoints: + - websecure + tls: + certResolver: letsencrypt + + # WebSocket router + ws-router: + rule: "Host(`{{ pangolin_dashboard_url | regex_replace('^https://', '') }}`)" + service: api-service + entryPoints: + - websecure + tls: + certResolver: letsencrypt + + services: + next-service: + loadBalancer: + servers: + - url: "http://pangolin:3002" + + api-service: + loadBalancer: + servers: + - url: "http://pangolin:3000" \ No newline at end of file diff --git a/ansible/playbooks/roles/pangolin/templates/pangolin_config.yml.j2 b/ansible/playbooks/roles/pangolin/templates/pangolin_config.yml.j2 new file mode 100644 index 0000000..f1be62d --- /dev/null +++ b/ansible/playbooks/roles/pangolin/templates/pangolin_config.yml.j2 @@ -0,0 +1,22 @@ +# https://docs.fossorial.io/Pangolin/Configuration/config + +app: + dashboard_url: "{{ pangolin_dashboard_url }}" + log_level: "{{ pangolin_log_level }}" + +domains: + domain1: + base_domain: "{{ pangolin_base_domain }}" + cert_resolver: "{{ pangolin_cert_resolver }}" + +server: + secret: "{{ pangolin_secret }}" + cors: + origins: ["{{ pangolin_cors_origin }}"] + methods: ["GET", "POST", "PUT", "DELETE", "PATCH"] + allowed_headers: ["X-CSRF-Token", "Content-Type"] + credentials: {{ pangolin_cors_credentials | lower }} + +gerbil: + start_port: {{ pangolin_gerbil_start_port }} + base_endpoint: "{{ pangolin_dashboard_url | regex_replace('^https://', '') }}" # Gerbil endpoint should be the FQDN, not the full URL diff --git a/ansible/playbooks/roles/pangolin/templates/traefik_config.yml.j2 b/ansible/playbooks/roles/pangolin/templates/traefik_config.yml.j2 new file mode 100644 index 0000000..11356dc --- /dev/null +++ b/ansible/playbooks/roles/pangolin/templates/traefik_config.yml.j2 @@ -0,0 +1,49 @@ +api: + insecure: true + dashboard: true + +providers: + http: + endpoint: "http://pangolin:3001/api/v1/traefik-config" + pollInterval: "5s" + file: + filename: "/etc/traefik/dynamic_config.yml" + +experimental: + plugins: + badger: + moduleName: "github.com/fosrl/badger" + version: "v1.2.0" + +log: + level: "INFO" + format: "common" + maxSize: 100 + maxBackups: 3 + maxAge: 3 + compress: true + +certificatesResolvers: + letsencrypt: + acme: + httpChallenge: + entryPoint: web + email: {{ pangolin_admin_email }} + storage: "/letsencrypt/acme.json" + #caServer: "https://acme-staging-v02.api.letsencrypt.org/directory" + caServer: "https://acme-v02.api.letsencrypt.org/directory" + +entryPoints: + web: + address: ":80" + websecure: + address: ":443" + transport: + respondingTimeouts: + readTimeout: "30m" + http: + tls: + certResolver: "letsencrypt" + +serversTransport: + insecureSkipVerify: true \ No newline at end of file -- 2.17.1 From 81a1bff0bb1e713b5d1cc5d081b0de4ae677161f Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Fri, 24 Jul 2026 15:13:52 +0200 Subject: [PATCH 3/6] Basic syntax fixes --- ansible/playbooks/roles/pangolin/tasks/main.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ansible/playbooks/roles/pangolin/tasks/main.yaml b/ansible/playbooks/roles/pangolin/tasks/main.yaml index a40aeb3..61bf5ce 100644 --- a/ansible/playbooks/roles/pangolin/tasks/main.yaml +++ b/ansible/playbooks/roles/pangolin/tasks/main.yaml @@ -1,3 +1,3 @@ --- -include_tasks: prepare_node.yaml -include_tasks: docker_pangolin.yaml \ No newline at end of file +- ansible.builtin.include_tasks: prepare_node.yaml +- ansible.builtin.include_tasks: docker_pangolin.yaml \ No newline at end of file -- 2.17.1 From bba5ad878176e7c400bf0246db08ceece57fb7b1 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Fri, 24 Jul 2026 15:43:15 +0200 Subject: [PATCH 4/6] FQDNs for tasks --- .../roles/pangolin/tasks/docker_pangolin.yaml | 34 +++++++++---------- .../roles/pangolin/tasks/prepare_node.yaml | 12 +++---- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/ansible/playbooks/roles/pangolin/tasks/docker_pangolin.yaml b/ansible/playbooks/roles/pangolin/tasks/docker_pangolin.yaml index c36a279..fb165ba 100644 --- a/ansible/playbooks/roles/pangolin/tasks/docker_pangolin.yaml +++ b/ansible/playbooks/roles/pangolin/tasks/docker_pangolin.yaml @@ -1,60 +1,60 @@ - name: Ensure Pangolin directory exists - file: + ansible.builtin.file: path: /home/ubuntu/pangolin state: directory - name: Ensure Pangolin config directory exists - file: + ansible.builtin.file: path: /home/ubuntu/pangolin/pangolin_config state: directory - name: Template Pangolin config file - template: + ansible.builtin.template: src: pangolin_config.yml.j2 dest: /home/ubuntu/pangolin/pangolin_config/config.yaml - name: Ensure Traefik config directory exists - file: + ansible.builtin.file: path: /home/ubuntu/pangolin/config/traefik state: directory - name: Template Traefik config file - template: + ansible.builtin.template: src: traefik_config.yml.j2 dest: /home/ubuntu/pangolin/config/traefik/traefik_config.yml - name: Template Traefik dynamic config file - template: + ansible.builtin.template: src: dynamic_config.yml.j2 dest: /home/ubuntu/pangolin/config/traefik/dynamic_config.yml - name: Template docker-compose.yml for Pangolin - template: + ansible.builtin.template: src: docker-compose.yml.j2 dest: /home/ubuntu/pangolin/docker-compose.yml register: pangolin_compose_template - name: Check if Pangolin container is running - shell: docker ps --filter "name=pangolin" --filter "status=running" --format "{{'{{.Names}}'}}" + ansible.builtin.shell: docker ps --filter "name=pangolin" --filter "status=running" --format "{{'{{.Names}}'}}" register: pangolin_running changed_when: false - name: Check if Traefik container is running - shell: docker ps --filter "name=traefik" --filter "status=running" --format "{{'{{.Names}}'}}" + ansible.builtin.shell: docker ps --filter "name=traefik" --filter "status=running" --format "{{'{{.Names}}'}}" register: traefik_running changed_when: false - name: Check if Gerbil container is running - shell: docker ps --filter "name=gerbil" --filter "status=running" --format "{{'{{.Names}}'}}" + ansible.builtin.shell: docker ps --filter "name=gerbil" --filter "status=running" --format "{{'{{.Names}}'}}" register: gerbil_running changed_when: false - name: Set fact if compose up is needed - set_fact: + ansible.builtin.set_fact: pangolin_compose_needs_up: "{{ pangolin_compose_template.changed or (pangolin_running.stdout != 'pangolin') or (traefik_running.stdout != 'traefik') or (gerbil_running.stdout != 'gerbil') }}" - name: Remove conflicting Pangolin containers if present - shell: | + ansible.builtin.shell: | docker rm -f pangolin || true docker rm -f traefik || true docker rm -f gerbil || true @@ -62,7 +62,7 @@ ignore_errors: true - name: Start Pangolin and Gerbil with Docker Compose (force recreate if needed) - shell: | + ansible.builtin.shell: | cd /home/ubuntu/pangolin docker compose up -d --force-recreate when: pangolin_compose_needs_up @@ -70,17 +70,17 @@ failed_when: docker_compose_up.rc != 0 - name: Check Docker Compose service status - shell: | + ansible.builtin.shell: | cd /home/ubuntu/pangolin docker compose ps register: docker_compose_status - name: Display Docker Compose service status - debug: + ansible.builtin.debug: msg: "{{ docker_compose_status.stdout_lines }}" - name: "Assert that mandatory variables are defined and not default" - assert: + ansible.builtin.assert: that: - pangolin_dashboard_url != 'https://pangolin.example.com' - pangolin_base_domain != 'example.com' @@ -90,7 +90,7 @@ success_msg: "All mandatory variables are properly defined." - name: Display success message - debug: + ansible.builtin.debug: msg: | ✅ Pangolin deployment is complete! diff --git a/ansible/playbooks/roles/pangolin/tasks/prepare_node.yaml b/ansible/playbooks/roles/pangolin/tasks/prepare_node.yaml index 5a03ae2..9ce7064 100644 --- a/ansible/playbooks/roles/pangolin/tasks/prepare_node.yaml +++ b/ansible/playbooks/roles/pangolin/tasks/prepare_node.yaml @@ -1,11 +1,11 @@ --- - name: Update all packages - apt: + ansible.builtin.apt: update_cache: yes upgrade: dist - name: Install essential packages - apt: + ansible.builtin.apt: name: - net-tools - curl @@ -15,7 +15,7 @@ state: present - name: Add 1GB swap file - shell: | + ansible.builtin.shell: | fallocate -l 1G /swapfile chmod 600 /swapfile mkswap /swapfile @@ -24,13 +24,13 @@ creates: /swapfile - name: Make swap persistent - lineinfile: + ansible.builtin.lineinfile: dest: /etc/fstab line: '/swapfile none swap sw 0 0' state: present - name: Configure iptables firewall rules - iptables: + ansible.builtin.iptables: chain: INPUT protocol: "{{ item.protocol }}" destination_port: "{{ item.port }}" @@ -45,6 +45,6 @@ register: iptables_result - name: Display iptables configuration status - debug: + ansible.builtin.debug: msg: "Configured firewall rules for ports: 80 (HTTP), 443 (HTTPS), 51820 (WireGuard UDP)" when: iptables_result is changed -- 2.17.1 From bda8eaa320fba7676f39cf920a39f38b469be82b Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Fri, 24 Jul 2026 15:43:56 +0200 Subject: [PATCH 5/6] variables defaults and specific --- ansible/inventories/group_vars/all/vault.yaml | 23 +++++++----- .../group_vars/pangolin/mini1.yaml | 9 +++++ .../roles/pangolin/defaults/main.yaml | 37 +++++++++++++++++++ 3 files changed, 60 insertions(+), 9 deletions(-) create mode 100644 ansible/playbooks/roles/pangolin/defaults/main.yaml diff --git a/ansible/inventories/group_vars/all/vault.yaml b/ansible/inventories/group_vars/all/vault.yaml index c7b0203..20a360f 100644 --- a/ansible/inventories/group_vars/all/vault.yaml +++ b/ansible/inventories/group_vars/all/vault.yaml @@ -1,10 +1,15 @@ $ANSIBLE_VAULT;1.1;AES256 -63363932663263346563646533323931303266346338383735666332363465373331653562663262 -3837343464366635373863353833316532663539303938310a623664663134633033613839343835 -32646630616663323035313563376133396563666434336561363930643832663763353136336135 -6630656261323031610a626134346232383266343962393262353962613533373931656561396666 -36616666383135663133646462333134653461326634336463353234383632396461663866383836 -64316464626236663163323535643734633539653733353039336337626661373234356562653464 -62613965616138633234396236656465316663616438326265356363623037663238656464633236 -34663832343031663136643063356330366564393362643238386364373461396636363637346434 -3937 +64343439326561656337616462326636363536366438383335356662626138353862383433313832 +6636646438386161386230316262343734626639613264610a336331316539323335323235633130 +30376236363635636533663333613135306462333632396265613863643862333266346265636265 +3030353239373836610a316136353164656438613130653535666135623134616364333666323634 +63303563383031346636396133353265373765373364386266346435313364353530633664636538 +65653266643736666261383463643863666132616534316162373234323738336536323834666333 +61383730613866646339396534376462303661656438343435326535626237616263303734326664 +64356163323537633263303132643664356661643733313265326233363533313932333964303637 +33326264333034623334656339316233343034623034396432346661623430333435373239653736 +63613437346266393039343435346139313465376630623032353761306562623862663334326364 +62663363633131613362373237333431316530336362303633623932383239633664633562326336 +32633363353131396361376438616132393732613330313032656238373838323237636438663630 +66663436613963626361336631303963346365303464656334633437373966643839373532616632 +6131353533393865666562313639363536653564386262373735 diff --git a/ansible/inventories/group_vars/pangolin/mini1.yaml b/ansible/inventories/group_vars/pangolin/mini1.yaml index aceaaee..20664df 100644 --- a/ansible/inventories/group_vars/pangolin/mini1.yaml +++ b/ansible/inventories/group_vars/pangolin/mini1.yaml @@ -3,3 +3,12 @@ pangolin_dashboard_url: "https://pangolin.hassallab.it" pangolin_base_domain: "hassallab.it" pangolin_secret: "{{ pangolin_crypted_secret }}" pangolin_admin_email: "hassallah@mail.com" + +pangolin_gerbil_subnet_group: "10.42.0.0/16" + +# Email (SMTP) settings +pangolin_email_smtp_host: "mail.com" +pangolin_email_smtp_port: 587 +pangolin_email_smtp_user: "pango.lin@mail.com" +pangolin_email_smtp_pass: "{{ pangolin_mail_crypted_password }}" +pangolin_email_no_reply: "no-reply@mail.com" \ No newline at end of file diff --git a/ansible/playbooks/roles/pangolin/defaults/main.yaml b/ansible/playbooks/roles/pangolin/defaults/main.yaml new file mode 100644 index 0000000..6e2e2c2 --- /dev/null +++ b/ansible/playbooks/roles/pangolin/defaults/main.yaml @@ -0,0 +1,37 @@ +--- +# Derived Variables +pangolin_cors_origin: "{{ pangolin_dashboard_url }}" + +# Logging +pangolin_log_level: "info" + +# CORS +pangolin_cors_credentials: false + +# Cert Resolver for Pangolin config +pangolin_cert_resolver: "letsencrypt" + +# Gerbil (WireGuard) settings +pangolin_gerbil_start_port: 51820 +pangolin_gerbil_use_subdomain: false +pangolin_gerbil_block_size: 24 +pangolin_gerbil_site_block_size: 30 +pangolin_gerbil_subnet_group: "100.89.137.0/20" + +# Rate limits +pangolin_rate_limit_window_minutes: 1 +pangolin_rate_limit_max_requests: 500 + +# Email (SMTP) settings +pangolin_email_smtp_host: "smtp.example.com" +pangolin_email_smtp_port: 587 +pangolin_email_smtp_user: "user@example.com" +pangolin_email_smtp_pass: "changeme-email-password" +pangolin_email_no_reply: "no-reply@example.com" + +# Feature flags +pangolin_flag_require_email_verification: false +pangolin_flag_disable_signup_without_invite: false +pangolin_flag_disable_user_create_org: false +pangolin_flag_allow_raw_resources: true +pangolin_flag_allow_base_domain_resources: true \ No newline at end of file -- 2.17.1 From 0e18e5fbc0c17ac1ae31f8bb1d4a0ef8d2e63b0a Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Fri, 24 Jul 2026 16:02:25 +0200 Subject: [PATCH 6/6] basic fixes --- ansible/inventories/group_vars/all/vault.yaml | 28 +++++++++---------- .../roles/pangolin/defaults/main.yaml | 2 +- .../roles/pangolin/tasks/docker_pangolin.yaml | 3 +- .../playbooks/roles/pangolin/tasks/main.yaml | 2 +- .../roles/pangolin/tasks/prepare_node.yaml | 2 +- 5 files changed, 19 insertions(+), 18 deletions(-) diff --git a/ansible/inventories/group_vars/all/vault.yaml b/ansible/inventories/group_vars/all/vault.yaml index 20a360f..6178444 100644 --- a/ansible/inventories/group_vars/all/vault.yaml +++ b/ansible/inventories/group_vars/all/vault.yaml @@ -1,15 +1,15 @@ $ANSIBLE_VAULT;1.1;AES256 -64343439326561656337616462326636363536366438383335356662626138353862383433313832 -6636646438386161386230316262343734626639613264610a336331316539323335323235633130 -30376236363635636533663333613135306462333632396265613863643862333266346265636265 -3030353239373836610a316136353164656438613130653535666135623134616364333666323634 -63303563383031346636396133353265373765373364386266346435313364353530633664636538 -65653266643736666261383463643863666132616534316162373234323738336536323834666333 -61383730613866646339396534376462303661656438343435326535626237616263303734326664 -64356163323537633263303132643664356661643733313265326233363533313932333964303637 -33326264333034623334656339316233343034623034396432346661623430333435373239653736 -63613437346266393039343435346139313465376630623032353761306562623862663334326364 -62663363633131613362373237333431316530336362303633623932383239633664633562326336 -32633363353131396361376438616132393732613330313032656238373838323237636438663630 -66663436613963626361336631303963346365303464656334633437373966643839373532616632 -6131353533393865666562313639363536653564386262373735 +35316234643930663465333664613362323061613838343333313331636366616163366162303165 +3565383837343936306536633765616638646437356562630a396536396664303736303965383863 +64383632386534316230366337633462613336666636633138626438336163373138616363323835 +3137666361653932390a393432313565323939356232376430393762336136613762363036343961 +36613462636630626430303636613130346533336534386165633232326238366134376233613466 +35613338333035623237303336653137333133666234643466643166633636343234616430346130 +31643238653833663761326262626536636537666162653863363934363165323134646564653736 +65663334363037636266383930356664356531356664303261333539636462356533396634616130 +63336431376532323630323531386437313639393639353332393061633764613030613261393862 +36373738613136663165623834376462356139353932626364366164643038323665346639346462 +30356166343639653632313833333565393436633733346136653538663235636333383333313533 +31306634366535306464313738356662646130363662653062366635333837666464633330393038 +31376561323264633063616530656661396331353165626135366462373663346333373131396535 +6430326664303432393137353864366339366639643332356134 diff --git a/ansible/playbooks/roles/pangolin/defaults/main.yaml b/ansible/playbooks/roles/pangolin/defaults/main.yaml index 6e2e2c2..29136b5 100644 --- a/ansible/playbooks/roles/pangolin/defaults/main.yaml +++ b/ansible/playbooks/roles/pangolin/defaults/main.yaml @@ -34,4 +34,4 @@ pangolin_flag_require_email_verification: false pangolin_flag_disable_signup_without_invite: false pangolin_flag_disable_user_create_org: false pangolin_flag_allow_raw_resources: true -pangolin_flag_allow_base_domain_resources: true \ No newline at end of file +pangolin_flag_allow_base_domain_resources: true diff --git a/ansible/playbooks/roles/pangolin/tasks/docker_pangolin.yaml b/ansible/playbooks/roles/pangolin/tasks/docker_pangolin.yaml index fb165ba..62f0799 100644 --- a/ansible/playbooks/roles/pangolin/tasks/docker_pangolin.yaml +++ b/ansible/playbooks/roles/pangolin/tasks/docker_pangolin.yaml @@ -1,3 +1,4 @@ +--- - name: Ensure Pangolin directory exists ansible.builtin.file: path: /home/ubuntu/pangolin @@ -96,4 +97,4 @@ You can access your dashboard at: {{ pangolin_dashboard_url }} Initial Setup URL: {{ pangolin_dashboard_url }}/auth/initial-setup - Admin User: {{ pangolin_admin_email }} \ No newline at end of file + Admin User: {{ pangolin_admin_email }} diff --git a/ansible/playbooks/roles/pangolin/tasks/main.yaml b/ansible/playbooks/roles/pangolin/tasks/main.yaml index 61bf5ce..2c34c0a 100644 --- a/ansible/playbooks/roles/pangolin/tasks/main.yaml +++ b/ansible/playbooks/roles/pangolin/tasks/main.yaml @@ -1,3 +1,3 @@ --- - ansible.builtin.include_tasks: prepare_node.yaml -- ansible.builtin.include_tasks: docker_pangolin.yaml \ No newline at end of file +- ansible.builtin.include_tasks: docker_pangolin.yaml diff --git a/ansible/playbooks/roles/pangolin/tasks/prepare_node.yaml b/ansible/playbooks/roles/pangolin/tasks/prepare_node.yaml index 9ce7064..95581b0 100644 --- a/ansible/playbooks/roles/pangolin/tasks/prepare_node.yaml +++ b/ansible/playbooks/roles/pangolin/tasks/prepare_node.yaml @@ -1,7 +1,7 @@ --- - name: Update all packages ansible.builtin.apt: - update_cache: yes + update_cache: true upgrade: dist - name: Install essential packages -- 2.17.1