netbird server works now. linted the yml files

This commit is contained in:
2026-08-30 07:35:08 +00:00
parent ae69c2fafe
commit 35a3bb9ad2
40 changed files with 366 additions and 135 deletions
+1 -1
View File
@@ -2,7 +2,7 @@ HOST=0.0.0.0
PORT=80 PORT=80
LOG_LEVEL=WARN LOG_LEVEL=WARN
DEBUG=false DEBUG=false
SQLALCHEMY_DATABASE_URI=postgresql+psycopg://postgres:123456@postgres:5432/petty{{ name }} SQLALCHEMY_DATABASE_URI=postgresql+psycopg://postgres:123456@postgres:5432/petty{{ app_name }}
MODULE_NAME=barker.main MODULE_NAME=barker.main
PROJECT_NAME=barker PROJECT_NAME=barker
MAX_WORKERS=4 MAX_WORKERS=4
+2 -1
View File
@@ -2,7 +2,8 @@
# DO Community Playbooks: Docker # DO Community Playbooks: Docker
################################################# #################################################
--- ---
- hosts: barker - name: Deploy Barker
hosts: barker
become: true become: true
vars_files: vars_files:
- vars/default.yml - vars/default.yml
+3
View File
@@ -0,0 +1,3 @@
---
collections:
- name: community.docker
+10 -10
View File
@@ -1,30 +1,32 @@
--- ---
# Tasks for docker role # Tasks for docker role
- name: Log in to Docker registry - name: Log in to Docker registry
docker_login: community.docker.docker_login:
registry: "{{ registry }}" registry: "{{ registry }}"
username: "{{ username }}" username: "{{ username }}"
password: "{{ password }}" password: "{{ password }}"
- name: Pull Barker image - name: Pull Barker image
docker_image: community.docker.docker_image:
name: "{{ image_name }}" name: "{{ image_name }}"
source: pull source: pull
state: present state: present
force_source: yes force_source: true
- name: Ensure Host Directory exists - name: Ensure Host Directory exists
file: ansible.builtin.file:
path: "/var/lib/{{ host_directory }}" path: "/var/lib/{{ host_directory }}"
state: directory state: directory
mode: "0755"
- name: Upload the .env file - name: Upload the .env file
template: ansible.builtin.template:
src: "files/.env" src: "files/.env"
dest: "/var/lib/{{ host_directory }}/.env" dest: "/var/lib/{{ host_directory }}/.env"
mode: "0644"
- name: Create barker container - name: Create barker container
docker_container: community.docker.docker_container:
name: "{{ host_directory }}" name: "{{ host_directory }}"
image: "{{ image_name }}" image: "{{ image_name }}"
state: started state: started
@@ -32,5 +34,3 @@
env_file: "/var/lib/{{ host_directory }}/.env" env_file: "/var/lib/{{ host_directory }}/.env"
networks: networks:
- name: "{{ docker_network }}" - name: "{{ docker_network }}"
# volumes:
# - "/var/lib/{{ host_directory }}/frontend:/frontend"
+2 -2
View File
@@ -1,6 +1,6 @@
---
caddy_container: caddy caddy_container: caddy
caddyfile_path: /var/lib/caddy/conf/Caddyfile caddy_caddyfile_path: /var/lib/caddy/conf/Caddyfile
# snippet_block: | # snippet_block: |
# {{ host }} { # {{ host }} {
# reverse_proxy {{ barker_container }}:80 # reverse_proxy {{ barker_container }}:80
+4 -6
View File
@@ -1,7 +1,5 @@
--- ---
# Handlers for Nginx role - name: Reload Caddy configuration
- name: Restart caddy container ansible.builtin.command: "docker exec -w /etc/caddy {{ caddy_container }} caddy reload"
docker_container: listen: "Reload Caddy"
name: "{{ caddy_container }}" changed_when: true
state: started
restart: true
+13 -12
View File
@@ -1,26 +1,27 @@
--- ---
- name: Read snippet from template file - name: Read snippet from template file
set_fact: ansible.builtin.set_fact:
snippet_block: "{{ lookup('template', 'files/Caddyfile.j2') }}" caddy_snippet_block: "{{ lookup('template', 'files/Caddyfile.j2') }}"
- name: Read current Caddyfile - name: Read current Caddyfile
ansible.builtin.slurp: ansible.builtin.slurp:
path: "{{ caddyfile_path }}" path: "{{ caddy_caddyfile_path }}"
register: caddyfile_raw register: caddy_caddyfile_raw
- name: Decode Caddyfile content - name: Decode Caddyfile content
set_fact: ansible.builtin.set_fact:
caddyfile_content: "{{ caddyfile_raw['content'] | b64decode }}" caddy_caddyfile_content: "{{ caddy_caddyfile_raw['content'] | b64decode }}"
- name: Check if snippet already exists - name: Check if snippet already exists
set_fact: ansible.builtin.set_fact:
snippet_present: "{{ snippet_block in caddyfile_content }}" caddy_snippet_present: "{{ caddy_snippet_block in caddy_caddyfile_content }}"
- name: Add snippet if missing - name: Add snippet if missing
ansible.builtin.blockinfile: ansible.builtin.blockinfile:
path: "{{ caddyfile_path }}" path: "{{ caddy_caddyfile_path }}"
marker: "# {mark} Ansible managed Caddy snippet for {{ host }}" marker: "# {mark} Ansible managed Caddy snippet for {{ host }}"
block: "{{ snippet_block }}" block: "{{ caddy_snippet_block }}"
create: yes create: true
when: not snippet_present mode: "0644"
when: not caddy_snippet_present
notify: Restart caddy container notify: Restart caddy container
+2 -2
View File
@@ -1,10 +1,10 @@
--- ---
- name: Ensure 'barker' Docker network exists - name: Ensure 'barker' Docker network exists
docker_network: community.docker.docker_network:
name: "{{ docker_network }}" name: "{{ docker_network }}"
state: present state: present
connected: connected:
- caddy - caddy
- valkey - valkey
- postgres - postgres
appends: yes appends: true
+3 -3
View File
@@ -1,8 +1,8 @@
--- ---
name: chd app_name: chd
secret_key: d9e4facec94d7e0bf3d63ca03b1d78d834b158627b6593274f7fe27f6aed6db4 secret_key: d9e4facec94d7e0bf3d63ca03b1d78d834b158627b6593274f7fe27f6aed6db4
middleware_key: 8d5f28b083 middleware_key: 8d5f28b083
host: knox.greatbear.in host: knox.greatbear.in
host_directory: "barker-{{ name }}" host_directory: "barker-{{ app_name }}"
docker_network: "{{ host_directory}}_net" docker_network: "{{ host_directory }}_net"
+3 -3
View File
@@ -1,8 +1,8 @@
--- ---
name: hin app_name: hin
secret_key: 029858927beda45d76317729824ae500d0938f04d4ca955f3afa95061c9a9298 secret_key: 029858927beda45d76317729824ae500d0938f04d4ca955f3afa95061c9a9298
middleware_key: c4b0b98ff9 middleware_key: c4b0b98ff9
host: knox.mozimo.in host: knox.mozimo.in
host_directory: "barker-{{ name }}" host_directory: "barker-{{ app_name }}"
docker_network: "{{ host_directory}}_net" docker_network: "{{ host_directory }}_net"
+3 -3
View File
@@ -1,8 +1,8 @@
--- ---
name: mhl app_name: mhl
secret_key: 8b7f704ad1bbee3caa683a57440a6a371937fe5f64a7712a6a15bf3165c3c598 secret_key: 8b7f704ad1bbee3caa683a57440a6a371937fe5f64a7712a6a15bf3165c3c598
middleware_key: 1aa5487223 middleware_key: 1aa5487223
host: knox.hngmohali.com host: knox.hngmohali.com
host_directory: "barker-{{ name }}" host_directory: "barker-{{ app_name }}"
docker_network: "{{ host_directory}}_net" docker_network: "{{ host_directory }}_net"
+3 -3
View File
@@ -1,8 +1,8 @@
--- ---
name: pkl app_name: pkl
secret_key: bd6e5dee0f3b8a6f0db50f7aa08e91d55b2ae5ab6df126defa37e80602481002 secret_key: bd6e5dee0f3b8a6f0db50f7aa08e91d55b2ae5ab6df126defa37e80602481002
middleware_key: 1d34ef6597 middleware_key: 1d34ef6597
host: knox.hopsngrains.com host: knox.hopsngrains.com
host_directory: "barker-{{ name }}" host_directory: "barker-{{ app_name }}"
docker_network: "{{ host_directory}}_net" docker_network: "{{ host_directory }}_net"
+91 -66
View File
@@ -2,7 +2,8 @@
# DO Community Playbooks: Docker # DO Community Playbooks: Docker
################################################# #################################################
--- ---
- hosts: all - name: Bake pies
hosts: all
become: true become: true
vars_files: vars_files:
- vars/pies.yml - vars/pies.yml
@@ -19,161 +20,185 @@
# when: lcd_rotate_test.stdout == "0" # when: lcd_rotate_test.stdout == "0"
- name: Update the hostname file - name: Update the hostname file
replace: ansible.builtin.replace:
path: /etc/hostname path: /etc/hostname
regexp: '(\s*)raspberrypi(\s+.*)?$' regexp: "(\\s*)raspberrypi(\\s+.*)?$"
replace: "\\1{{ hostname }}\\2" replace: "\\1{{ hostname }}\\2"
backup: yes backup: true
- name: Update the hosts file - name: Update the hosts file
replace: ansible.builtin.replace:
path: /etc/hosts path: /etc/hosts
regexp: '(\s+)raspberrypi(\s+.*)?$' regexp: "(\\s+)raspberrypi(\\s+.*)?$"
replace: "\\1{{ hostname }}\\2" replace: "\\1{{ hostname }}\\2"
backup: yes backup: true
- name: Ensure SSH Directory exists - name: Ensure SSH Directory exists
file: ansible.builtin.file:
path: "/home/{{ user }}/.ssh" path: "/home/{{ user }}/.ssh"
state: directory state: directory
group: "{{ user }}"
owner: "{{ user }}"
mode: 0700
- name: Ensure authorized_keys file exists
copy:
content: ""
dest: "/home/{{ user }}/.ssh/authorized_keys"
force: no
group: "{{ user }}" group: "{{ user }}"
owner: "{{ user }}" owner: "{{ user }}"
mode: 0644 mode: "0700"
- name: Ensure authorized_keys file exists
ansible.builtin.copy:
content: ""
dest: "/home/{{ user }}/.ssh/authorized_keys"
force: false
group: "{{ user }}"
owner: "{{ user }}"
mode: "0644"
- name: Check Terminus public key - name: Check Terminus public key
shell: "grep -c \"{{ terminus_key }}\" /home/{{ user }}/.ssh/authorized_keys || true" ansible.builtin.shell: "grep -c \"{{ terminus_key }}\" /home/{{ user }}/.ssh/authorized_keys || true"
register: terminuskey_test register: terminuskey_test
changed_when: false
- name: Add Terminus public key - name: Add Terminus public key
lineinfile: ansible.builtin.lineinfile:
dest: "/home/{{ user }}/.ssh/authorized_keys" dest: "/home/{{ user }}/.ssh/authorized_keys"
line: "{{ terminus_key }}" line: "{{ terminus_key }}"
when: terminuskey_test.stdout == "0" when: terminuskey_test.stdout == "0"
- name: Check clair public key - name: Check clair public key
shell: "grep -c \"{{ clair_key }}\" /home/{{ user }}/.ssh/authorized_keys || true" ansible.builtin.shell: "grep -c \"{{ clair_key }}\" /home/{{ user }}/.ssh/authorized_keys || true"
register: clairkey_test register: clairkey_test
changed_when: false
- name: Add clair public key - name: Add clair public key
lineinfile: ansible.builtin.lineinfile:
dest: "/home/{{ user }}/.ssh/authorized_keys" dest: "/home/{{ user }}/.ssh/authorized_keys"
line: "{{ clair_key }}" line: "{{ clair_key }}"
when: clairkey_test.stdout == "0" when: clairkey_test.stdout == "0"
- name: Check Anjin public key - name: Check Anjin public key
shell: "grep -c \"{{ anjin_key }}\" /home/{{ user }}/.ssh/authorized_keys || true" ansible.builtin.shell: "grep -c \"{{ anjin_key }}\" /home/{{ user }}/.ssh/authorized_keys || true"
register: anjin_key_test register: anjin_key_test
changed_when: false
- name: Add Anjin public key - name: Add Anjin public key
lineinfile: ansible.builtin.lineinfile:
dest: "/home/{{ user }}/.ssh/authorized_keys" dest: "/home/{{ user }}/.ssh/authorized_keys"
line: "{{ anjin_key }}" line: "{{ anjin_key }}"
when: anjin_key_test.stdout == "0" when: anjin_key_test.stdout == "0"
- name: Update the sshd config file to disable password logins - name: Update the sshd config file to disable password logins
replace: ansible.builtin.replace:
path: /etc/ssh/sshd_config path: /etc/ssh/sshd_config
regexp: '(\s+)#PasswordAuthentication yes(\s+.*)?$' regexp: "(\\s+)#PasswordAuthentication yes(\\s+.*)?$"
replace: "\\1PasswordAuthentication no\\2" replace: "\\1PasswordAuthentication no\\2"
backup: yes backup: true
- name: Check if .ssh config file exists - name: Check if .ssh config file exists
stat: ansible.builtin.stat:
path: "/home/{{ user }}/.ssh/config" path: "/home/{{ user }}/.ssh/config"
register: config_status register: config_status
- name: No need to upload the .ssh config - name: No need to upload the .ssh config
when: config_status.stat.exists == true when: config_status.stat.exists
debug: ansible.builtin.debug:
msg: No need to upload the .ssh config as it already exists. msg: No need to upload the .ssh config as it already exists.
- name: Upload the .ssh config file - name: Upload the .ssh config file
when: config_status.stat.exists == false when: not config_status.stat.exists
template: ansible.builtin.template:
src: "files/config" src: "files/config"
dest: "/home/{{ user }}/.ssh/config" dest: "/home/{{ user }}/.ssh/config"
group: "{{ user }}" group: "{{ user }}"
owner: "{{ user }}" owner: "{{ user }}"
mode: 0644 mode: "0644"
- name: Check if ed25519 key exists - name: Check if ed25519 key exists
stat: ansible.builtin.stat:
path: "/home/{{ user }}/.ssh/id_ed25519" path: "/home/{{ user }}/.ssh/id_ed25519"
register: key_status register: key_status
- name: No need to generate new ed25519 key - name: No need to generate new ed25519 key
when: key_status.stat.exists == true when: key_status.stat.exists
debug: ansible.builtin.debug:
msg: No need to generate new ed25519 key as it already exists. msg: No need to generate new ed25519 key as it already exists.
- name: Generate new id_ed25519 key - name: Generate new id_ed25519 key
when: key_status.stat.exists == false when: not key_status.stat.exists
become: yes become: true
become_user: "{{ user }}" become_user: "{{ user }}"
shell: ssh-keygen -t ed25519 -q -f "/home/{{ user }}/.ssh/id_ed25519" -C "{{ user }}@{{ hostname }} $(date '+%Y.%m.%d')" -N "" ansible.builtin.shell: ssh-keygen -t ed25519 -q -f "/home/{{ user }}/.ssh/id_ed25519" -C "{{ user }}@{{ hostname }} $(date '+%Y.%m.%d')" -N ""
changed_when: true
- name: Install Docker - name: Install Docker
shell: curl -sSL https://get.docker.com | sh ansible.builtin.shell: curl -sSL https://get.docker.com | sh # noqa command-instead-of-module risky-shell-pipe
changed_when: true
- name: Install matchbox-keyboard - name: Install matchbox-keyboard
package: ansible.builtin.package:
name: matchbox-keyboard name: matchbox-keyboard
state: latest state: present
- name: Install python3-docker - name: Install python3-docker
package: ansible.builtin.package:
name: python3-docker name: python3-docker
state: latest state: present
- name: adding user to group docker - name: Adding user to group docker
user: ansible.builtin.user:
name: "{{ user }}" name: "{{ user }}"
groups: docker groups: docker
append: yes append: true
- name: adding user to group lp (line printers) - name: Adding user to group lp (line printers)
user: ansible.builtin.user:
name: "{{ user }}" name: "{{ user }}"
groups: lp groups: lp
append: yes append: true
- name: install nats-tunnel systemd unit file - name: Install nats-tunnel systemd unit file
template: ansible.builtin.template:
src: "files/nats-tunnel.service" src: "files/nats-tunnel.service"
dest: "/etc/systemd/system/nats-tunnel.service" dest: "/etc/systemd/system/nats-tunnel.service"
mode: "0644"
- name: enable service nats-tunnel and ensure it is not masked - name: Enable service nats-tunnel and ensure it is not masked
systemd: ansible.builtin.systemd:
name: nats-tunnel name: nats-tunnel
enabled: yes enabled: true
masked: no masked: false
- name: Make sure nats-tunnel service is running - name: Make sure nats-tunnel service is running
systemd: ansible.builtin.systemd:
state: started state: started
name: nats-tunnel name: nats-tunnel
- name: install leardal systemd unit file - name: Install leardal systemd unit file
template: ansible.builtin.template:
src: "files/leardal.service" src: "files/leardal.service"
dest: "/etc/systemd/system/leardal.service" dest: "/etc/systemd/system/leardal.service"
mode: "0644"
- name: enable service leardal and ensure it is not masked - name: Enable service leardal and ensure it is not masked
systemd: ansible.builtin.systemd:
name: leardal name: leardal
enabled: yes enabled: true
masked: no masked: false
- name: Make sure leardal service is running - name: Make sure leardal service is running
systemd: ansible.builtin.systemd:
state: started state: started
name: leardal name: leardal
- name: Check if NetBird is installed
ansible.builtin.command: netbird --version
register: netbird_installed
ignore_errors: true
changed_when: false
- name: Install NetBird client
ansible.builtin.shell: curl -fsSL https://pkgs.netbird.io/install.sh | sh
when: netbird_installed.rc != 0
changed_when: true
- name: Connect NetBird to management server
ansible.builtin.command: >
netbird up --management-url {{ netbird_management_url }} --setup-key {{ netbird_setup_key }}
when: netbird_installed.rc != 0
changed_when: true
+2 -1
View File
@@ -2,7 +2,8 @@
# DO Community Playbooks: Docker # DO Community Playbooks: Docker
################################################# #################################################
--- ---
- hosts: frank - name: Deploy Frank
hosts: frank
become: true become: true
vars_files: vars_files:
- vars/registry.yml - vars/registry.yml
+3
View File
@@ -0,0 +1,3 @@
---
collections:
- name: community.docker
+26 -8
View File
@@ -8,28 +8,28 @@
msg: "No need to upload the frank .env file as it already exists." msg: "No need to upload the frank .env file as it already exists."
- name: Upload the frank .env file - name: Upload the frank .env file
when: status.stat.exists == false when: not status.stat.exists
template: template:
src: files/frank.env src: files/frank.env
dest: "/home/{{ user }}/frank.env" dest: "/home/{{ user }}/frank.env"
group: "{{ user }}" group: "{{ user }}"
owner: "{{ user }}" owner: "{{ user }}"
mode: 0644 mode: "0644"
- name: Log into registry - name: Log into registry
docker_login: community.docker.docker_login:
registry: "{{ registry }}" registry: "{{ registry }}"
username: "{{ username }}" username: "{{ username }}"
password: "{{ password }}" password: "{{ password }}"
- name: Pull frank image - name: Pull frank image
docker_image: community.docker.docker_image:
name: "registry.tanshu.com/frank:{{ frank_version | default('latest') }}" name: "registry.tanshu.com/frank:{{ frank_version | default('latest') }}"
source: pull source: pull
force_source: yes force_source: true
- name: Create frank worker container - name: Create frank worker container
docker_container: community.docker.docker_container:
name: "frank" name: "frank"
image: "registry.tanshu.com/frank:{{ frank_version | default('latest') }}" image: "registry.tanshu.com/frank:{{ frank_version | default('latest') }}"
pull: true pull: true
@@ -44,14 +44,32 @@
template: template:
src: "files/frank.service" src: "files/frank.service"
dest: "/etc/systemd/system/frank.service" dest: "/etc/systemd/system/frank.service"
mode: "0644"
- name: enable service frank and ensure it is not masked - name: enable service frank and ensure it is not masked
systemd: systemd:
name: frank name: frank
enabled: yes enabled: true
masked: no masked: false
- name: Make sure frank service is running - name: Make sure frank service is running
systemd: systemd:
state: started state: started
name: frank name: frank
- name: Check if NetBird is installed
ansible.builtin.command: netbird --version
register: netbird_installed
ignore_errors: true
changed_when: false
- name: Install NetBird client
ansible.builtin.shell: curl -fsSL https://pkgs.netbird.io/install.sh | sh
when: netbird_installed.rc != 0
changed_when: true
- name: Connect NetBird to management server
ansible.builtin.command: >
netbird up --management-url {{ netbird_management_url }} --setup-key {{ netbird_setup_key }}
when: netbird_installed.rc != 0
changed_when: true
+16 -14
View File
@@ -1,32 +1,34 @@
--- ---
- name: install nats-tunnel systemd unit file - name: Install nats-tunnel systemd unit file
template: ansible.builtin.template:
src: "files/nats-tunnel.service" src: "files/nats-tunnel.service"
dest: "/etc/systemd/system/nats-tunnel.service" dest: "/etc/systemd/system/nats-tunnel.service"
mode: "0644"
- name: enable service nats-tunnel and ensure it is not masked - name: Enable service nats-tunnel and ensure it is not masked
systemd: ansible.builtin.systemd:
name: nats-tunnel name: nats-tunnel
enabled: yes enabled: true
masked: no masked: false
- name: Make sure nats-tunnel service is running - name: Make sure nats-tunnel service is running
systemd: ansible.builtin.systemd:
state: started state: started
name: nats-tunnel name: nats-tunnel
- name: install leardal systemd unit file - name: Install leardal systemd unit file
template: ansible.builtin.template:
src: "files/leardal.service" src: "files/leardal.service"
dest: "/etc/systemd/system/leardal.service" dest: "/etc/systemd/system/leardal.service"
mode: "0644"
- name: enable service leardal and ensure it is not masked - name: Enable service leardal and ensure it is not masked
systemd: ansible.builtin.systemd:
name: leardal name: leardal
enabled: yes enabled: true
masked: no masked: false
- name: Make sure leardal service is running - name: Make sure leardal service is running
systemd: ansible.builtin.systemd:
state: started state: started
name: leardal name: leardal
+2
View File
@@ -2,4 +2,6 @@
hostname: chd1 hostname: chd1
ssh_port: 22341 ssh_port: 22341
user: pi user: pi
queue_name: moz-elante
printer_port: "/dev/usb/lp0" printer_port: "/dev/usb/lp0"
ip_address: 10.3.4.1
+1
View File
@@ -2,4 +2,5 @@
hostname: chd2 hostname: chd2
ssh_port: 22342 ssh_port: 22342
user: pi user: pi
queue_name: moz-elante
printer_port: "/dev/usb/lp0" printer_port: "/dev/usb/lp0"
+1
View File
@@ -2,4 +2,5 @@
hostname: mhl1 hostname: mhl1
ssh_port: 22441 ssh_port: 22441
user: pi user: pi
queue_name: moz-elante
printer_port: "/dev/usb/lp0" printer_port: "/dev/usb/lp0"
+1
View File
@@ -2,4 +2,5 @@
hostname: mhl2 hostname: mhl2
ssh_port: 22442 ssh_port: 22442
user: pi user: pi
queue_name: moz-elante
printer_port: "/dev/usb/lp0" printer_port: "/dev/usb/lp0"
+1
View File
@@ -2,4 +2,5 @@
hostname: mhl3 hostname: mhl3
ssh_port: 22443 ssh_port: 22443
user: pi user: pi
queue_name: moz-elante
printer_port: "/dev/usb/lp0" printer_port: "/dev/usb/lp0"
+1
View File
@@ -2,4 +2,5 @@
hostname: mhl4 hostname: mhl4
ssh_port: 22444 ssh_port: 22444
user: pi user: pi
queue_name: moz-elante
printer_port: "/dev/usb/lp0" printer_port: "/dev/usb/lp0"
+1
View File
@@ -2,4 +2,5 @@
hostname: moz1 hostname: moz1
ssh_port: 22541 ssh_port: 22541
user: vari user: vari
queue_name: moz-elante
printer_port: "/dev/usb/lp0" printer_port: "/dev/usb/lp0"
+1
View File
@@ -2,4 +2,5 @@
hostname: moz2 hostname: moz2
ssh_port: 22542 ssh_port: 22542
user: vari user: vari
queue_name: moz-elante
printer_port: "/dev/usb/lp0" printer_port: "/dev/usb/lp0"
+1
View File
@@ -2,4 +2,5 @@
hostname: pkl1 hostname: pkl1
ssh_port: 22241 ssh_port: 22241
user: pi user: pi
queue_name: moz-elante
printer_port: "/dev/usb/lp0" printer_port: "/dev/usb/lp0"
+1
View File
@@ -2,4 +2,5 @@
hostname: pkl2 hostname: pkl2
ssh_port: 22242 ssh_port: 22242
user: pi user: pi
queue_name: moz-elante
printer_port: "/dev/usb/lp0" printer_port: "/dev/usb/lp0"
+1
View File
@@ -2,4 +2,5 @@
hostname: pkl3 hostname: pkl3
ssh_port: 22243 ssh_port: 22243
user: pi user: pi
queue_name: moz-elante
printer_port: "/dev/usb/lp0" printer_port: "/dev/usb/lp0"
+2
View File
@@ -3,3 +3,5 @@ terminus_key: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK8WQHla0uCcNwmN0DUE49lbjNWa6
clair_key: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBeTz3weHvjJRTlBg+ovP3KfQNDvyn9mVsekAGwX1HMn tanshu@clair 2025-06-30" clair_key: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBeTz3weHvjJRTlBg+ovP3KfQNDvyn9mVsekAGwX1HMn tanshu@clair 2025-06-30"
anjin_key: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMlvalE0JqKyjpEsGTgtf/N1d9QK2MgNFJib+e8O2h9M tanshu@anjin 2024.09.28" anjin_key: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMlvalE0JqKyjpEsGTgtf/N1d9QK2MgNFJib+e8O2h9M tanshu@anjin 2024.09.28"
server: "clair" server: "clair"
netbird_management_url: "https://netbird.tanshu.com"
netbird_setup_key: "REPLACE_ME_WITH_SETUP_KEY"
+3
View File
@@ -14,3 +14,6 @@ uv run ruff check . --fix
uv run bandit --recursive barker uv run bandit --recursive barker
uv run bandit --recursive . uv run bandit --recursive .
uv run safety check uv run safety check
uvx ansible-lint ../ansible --fix
uvx ansible-lint ../netbird --fix
uvx ansible-lint ../frank/ansible --fix
+9
View File
@@ -0,0 +1,9 @@
---
- name: Deploy Netbird and Caddy
hosts: clair # Replace with the actual host running the Netbird control plane
become: true
vars_files:
- vars/default.yml
roles:
- netbird
- caddy
+3
View File
@@ -0,0 +1,3 @@
---
collections:
- name: community.docker
+2
View File
@@ -0,0 +1,2 @@
---
caddy_container: caddy
+9
View File
@@ -0,0 +1,9 @@
{{ netbird_domain }} {
@grpc header Content-Type application/grpc*
reverse_proxy @grpc h2c://netbird-server:80
@backend path /relay* /ws-proxy/* /api/* /oauth2/*
reverse_proxy @backend netbird-server:80
reverse_proxy /* netbird-dashboard:80
}
+5
View File
@@ -0,0 +1,5 @@
---
- name: Reload Caddy configuration
ansible.builtin.command: "docker exec -w /etc/caddy {{ caddy_container }} caddy reload"
listen: "Reload Caddy"
changed_when: true
+36
View File
@@ -0,0 +1,36 @@
---
- name: Ensure 'caddy' container is connected to netbird_net
community.docker.docker_network:
name: netbird_net
state: present
connected:
- caddy
appends: true
- name: Read current Caddyfile
ansible.builtin.slurp:
path: "/var/lib/caddy/conf/Caddyfile"
register: caddy_caddyfile_raw
ignore_errors: true
- name: Decode Caddyfile content
ansible.builtin.set_fact:
caddy_caddyfile_content: "{{ caddy_caddyfile_raw['content'] | b64decode }}"
- name: Read snippet from template file
ansible.builtin.set_fact:
caddy_netbird_caddy_snippet: "{{ lookup('template', 'files/Caddyfile.j2') }}"
- name: Check if Netbird snippet already exists
ansible.builtin.set_fact:
caddy_snippet_present: "{{ caddy_netbird_caddy_snippet in caddy_caddyfile_content }}"
- name: Add Netbird snippet to Caddyfile
ansible.builtin.blockinfile:
path: "/var/lib/caddy/conf/Caddyfile"
marker: "# {mark} Ansible managed Caddy snippet for Netbird"
block: "{{ caddy_netbird_caddy_snippet }}"
create: true
mode: "0644"
when: not caddy_snippet_present
notify: Reload Caddy
+8
View File
@@ -0,0 +1,8 @@
---
netbird_domain: netbird.tanshu.com
netbird_mgmt_api_port: 33073
netbird_signal_port: 10000
netbird_coturn_port: 3478
# Note: As of NetBird v0.62+, it includes an integrated local Identity Provider!
# You no longer need an external IdP like Authentik, Zitadel, or Auth0 to get started.
# You can set up your first admin account directly in the NetBird Dashboard UI.
+54
View File
@@ -0,0 +1,54 @@
---
- name: Create Netbird docker network
community.docker.docker_network:
name: netbird_net
state: present
- name: Create Netbird configuration directories
ansible.builtin.file:
path: "/var/lib/netbird/{{ item }}"
state: directory
mode: "0755"
loop:
- server/etc
- server/data
- name: Deploy Netbird server configuration
ansible.builtin.template:
src: config.yaml.j2
dest: /var/lib/netbird/server/etc/config.yaml
mode: "0644"
force: false
- name: Start Netbird Server Container
community.docker.docker_container:
name: netbird-server
image: netbirdio/netbird-server:latest
state: started
restart_policy: always
network_mode: netbird_net
ports:
- "{{ netbird_mgmt_api_port }}:80/tcp"
volumes:
- "/var/lib/netbird/server/etc:/etc/netbird"
- "/var/lib/netbird/server/data:/var/lib/netbird"
command: "--config /etc/netbird/config.yaml"
- name: Start Netbird Dashboard Container
community.docker.docker_container:
name: netbird-dashboard
image: netbirdio/dashboard:latest
state: started
restart_policy: always
network_mode: netbird_net
env:
NETBIRD_MGMT_API_ENDPOINT: "https://{{ netbird_domain }}"
NETBIRD_MGMT_GRPC_API_ENDPOINT: "https://{{ netbird_domain }}"
AUTH_AUDIENCE: "netbird-dashboard"
AUTH_CLIENT_ID: "netbird-dashboard"
AUTH_CLIENT_SECRET: ""
AUTH_AUTHORITY: "https://{{ netbird_domain }}/oauth2"
USE_AUTH0: "false"
AUTH_SUPPORTED_SCOPES: "openid profile email groups"
AUTH_REDIRECT_URI: "/nb-auth"
AUTH_SILENT_REDIRECT_URI: "/nb-silent-auth"
@@ -0,0 +1,33 @@
# Combined NetBird Server Configuration
# Generated by Ansible
server:
listenAddress: ":80"
exposedAddress: "https://{{ netbird_domain }}:443"
stunPorts:
- 3478
metricsPort: 9090
healthcheckAddress: ":9000"
logLevel: "info"
logFile: "console"
authSecret: "{{ netbird_relay_secret }}"
dataDir: "/var/lib/netbird"
auth:
issuer: "https://{{ netbird_domain }}/oauth2"
signKeyRefreshEnabled: true
sessionCookieEncryptionKey: "{{ lookup('password', '/dev/null chars=ascii_letters,digits length=32') | b64encode }}"
dashboardRedirectURIs:
- "https://{{ netbird_domain }}/nb-auth"
- "https://{{ netbird_domain }}/nb-silent-auth"
cliRedirectURIs:
- "http://localhost:53000/"
reverseProxy:
trustedHTTPProxies:
- "0.0.0.0/0"
store:
engine: "sqlite"
encryptionKey: "{{ netbird_datastore_enc_key }}"
+3
View File
@@ -0,0 +1,3 @@
netbird_relay_secret: t1MABpanE31W/uHj591cEz6+sONla2u+MQBGNMhSuZA=
netbird_datastore_enc_key: Km3apaNV5Iy7JtdN6gogqX0EhbdLxPp+5G6RJj4ukSw=
netbird_cookie_encryption_key: g4srYV9cv5IK3Ct2kNLXwAXgjNL3a0MQmAsK4lejIKs=