netbird server works now. linted the yml files
This commit is contained in:
+1
-1
@@ -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,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
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
collections:
|
||||||
|
- name: community.docker
|
||||||
@@ -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"
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
@@ -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,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
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
collections:
|
||||||
|
- name: community.docker
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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,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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
collections:
|
||||||
|
- name: community.docker
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
caddy_container: caddy
|
||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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.
|
||||||
@@ -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 }}"
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
netbird_relay_secret: t1MABpanE31W/uHj591cEz6+sONla2u+MQBGNMhSuZA=
|
||||||
|
netbird_datastore_enc_key: Km3apaNV5Iy7JtdN6gogqX0EhbdLxPp+5G6RJj4ukSw=
|
||||||
|
netbird_cookie_encryption_key: g4srYV9cv5IK3Ct2kNLXwAXgjNL3a0MQmAsK4lejIKs=
|
||||||
Reference in New Issue
Block a user