Manage Jitsi through Ansible using custom role #172
5 changed files with 94 additions and 2 deletions
Use jitsi role to configure jitsi
The host has been manually cleaned up (removed old packages and config) and this config has been deployed already.
commit
86e793c624
|
|
@ -1,4 +1,7 @@
|
||||||
ansible_pull__age_private_key: ENC[AES256_GCM,data:8PCkZx76R5aWPITn5MCZCMckXvaLfVvnDgO70XmF/eeH5xLVOVx+EC3DZjmHxEoW7Kn4LAJTR4mWl/xP+p++elRvTMcHltV+vBQ=,iv:jKq07NLM84MSGU4CCyUS9ODmwiUMhlDONkKJ7P9P2DM=,tag:95yBZlwYdSNeX2O4t/h9kw==,type:str]
|
ansible_pull__age_private_key: ENC[AES256_GCM,data:8PCkZx76R5aWPITn5MCZCMckXvaLfVvnDgO70XmF/eeH5xLVOVx+EC3DZjmHxEoW7Kn4LAJTR4mWl/xP+p++elRvTMcHltV+vBQ=,iv:jKq07NLM84MSGU4CCyUS9ODmwiUMhlDONkKJ7P9P2DM=,tag:95yBZlwYdSNeX2O4t/h9kw==,type:str]
|
||||||
|
jitsi__jicofo_auth_password: ENC[AES256_GCM,data:a7y36RJUR4OBtVNzgmqlGEsg1hNRGgsuwG2YFJrDlMI=,iv:mnGlKOXtNltNe3wY34BnVCJ9CtLQ7aksr4xXbrTOnJg=,tag:j1N7MUTJG8K0JW/a6YESFg==,type:str]
|
||||||
|
jitsi__jvb_auth_password: ENC[AES256_GCM,data:xUFiIXAzY4pEpwgL/5LPBlhkx73RX6VFT3QJlG5QbFo=,iv:/XqENztrrpj1h3lBhEtJJo78lCrxrMWxRszNjSwx+KQ=,tag:+LRYmv9Tvt0muR47QTd6HA==,type:str]
|
||||||
|
jitsi__turn_secret: ENC[AES256_GCM,data:UPev9ND9Mf2gGK28huQuuxRyUZvPPCmFL9rU1f0zndSPPBMspSsnlgtMy0+VY/CsGEIEcWsy3eYDPcAW/EKFtA==,iv:ew0MKP5zdQvqfla2y7xkcXLm3qSMlf5sucn8Qu3G3Zs=,tag:dqe239LD+wPVqLQFF+nz2A==,type:str]
|
||||||
sops:
|
sops:
|
||||||
age:
|
age:
|
||||||
- enc: |
|
- enc: |
|
||||||
|
|
@ -30,8 +33,8 @@ sops:
|
||||||
QzBBdJ6TiDwJ1rwwM211smfIbcYhWX6C/EfitI5XoIW8aS4ln1g1Ww==
|
QzBBdJ6TiDwJ1rwwM211smfIbcYhWX6C/EfitI5XoIW8aS4ln1g1Ww==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age187zdk64205lx7r83a4m26pfa8hq6khc8sf83k266jasngeq08v3sfqswfg
|
recipient: age187zdk64205lx7r83a4m26pfa8hq6khc8sf83k266jasngeq08v3sfqswfg
|
||||||
lastmodified: "2026-07-29T20:26:44Z"
|
lastmodified: "2026-10-08T07:56:43Z"
|
||||||
mac: ENC[AES256_GCM,data:dHiB768SBppBrjNoSpgDvriCgrSNzIkpSYzm9REx4otbnvNjHYPhP9OdsZ6zTcoFoX+41/zE13r4EoAz4F++jdJidv1+7DMFvVUKMuFNzp2VjDfB1ZNzzyM+px7l83L5eNhgNPp26mweOVMEz92NgB916KMY+5e3uUeSR+iIdho=,iv:7k8rugBXULjPSOZukQiufNn9Vs5uWVhcvFKIhD1o7so=,tag:IE+2uhzGS2xJJgFHuc94CA==,type:str]
|
mac: ENC[AES256_GCM,data:CgD19xHN5nEg9TMQq/c4Xpv1LH0LfcXrkfBMUcbJiIn4FsSzQetLYxueeDXUVOujOb9ZSEin1nR+OZwa/nuwN9mTg37c0XZ6HV0UvNNEIrN/o4doUCQa2jLmbX8etxeNhF7oWJ84OgQIhPLvLwp3Z0A/+kPKbmtz3znQNgKoHQY=,iv:6Dt7z55az2SJovJ7ozG35Q99a08kOrKl/uQCUVcbq8c=,tag:M6p0ZJzoFnWgspnGknq7SQ==,type:str]
|
||||||
pgp:
|
pgp:
|
||||||
- created_at: "2026-09-24T19:54:13Z"
|
- created_at: "2026-09-24T19:54:13Z"
|
||||||
enc: |-
|
enc: |-
|
||||||
|
|
|
||||||
13
inventories/chaosknoten/host_vars/jitsi.yaml
Normal file
13
inventories/chaosknoten/host_vars/jitsi.yaml
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
nftables__config: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/jitsi/nftables/nftables.conf') }}"
|
||||||
|
|
||||||
|
# renovate: datasource=github-releases depName=jitsi/docker-jitsi-meet versioning=regex:^stable-(?<major>\d+)$
|
||||||
|
jitsi__version: stable-11248
|
||||||
|
jitsi__domain: jitsi.hamburg.ccc.de
|
||||||
|
jitsi__letsencrypt_email: le-admin@hamburg.ccc.de
|
||||||
|
jitsi__jvb_advertise_ips:
|
||||||
|
- 212.12.51.139
|
||||||
|
- 2a00:14b0:f000:23:51:139:0:1
|
||||||
|
jitsi__whiteboard: true
|
||||||
|
jitsi__turn: true
|
||||||
|
jitsi__prometheus_exporter: true
|
||||||
|
# jitsi__jicofo_auth_password, jitsi__jvb_auth_password and jitsi__turn_secret are defined in jitsi.sops.yaml.
|
||||||
|
|
@ -141,6 +141,7 @@ systemd_networkd_hosts:
|
||||||
router:
|
router:
|
||||||
nftables_hosts:
|
nftables_hosts:
|
||||||
hosts:
|
hosts:
|
||||||
|
jitsi:
|
||||||
router:
|
router:
|
||||||
docker_compose_hosts:
|
docker_compose_hosts:
|
||||||
hosts:
|
hosts:
|
||||||
|
|
@ -258,6 +259,9 @@ wiki_hosts:
|
||||||
netbox_hosts:
|
netbox_hosts:
|
||||||
hosts:
|
hosts:
|
||||||
netbox:
|
netbox:
|
||||||
|
jitsi_hosts:
|
||||||
|
hosts:
|
||||||
|
jitsi:
|
||||||
proxmox_vm_template_hosts:
|
proxmox_vm_template_hosts:
|
||||||
hosts:
|
hosts:
|
||||||
chaosknoten:
|
chaosknoten:
|
||||||
|
|
|
||||||
65
resources/chaosknoten/jitsi/nftables/nftables.conf
Normal file
65
resources/chaosknoten/jitsi/nftables/nftables.conf
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
#!/usr/sbin/nft -f
|
||||||
|
|
||||||
|
# Docker manages its own tables (via iptables-nft), so don't use "flush ruleset" here,
|
||||||
|
# but only replace our own table. This also means that a reload is fine, but stopping
|
||||||
|
# or restarting nftables.service (which flushes the whole ruleset) requires restarting
|
||||||
|
# Docker afterwards.
|
||||||
|
# Traffic to ports published by Docker containers (web, JVB, exporter) gets DNATed in
|
||||||
|
# prerouting and therefore passes the forward hook instead of the input hook.
|
||||||
|
|
||||||
|
## Variables
|
||||||
|
|
||||||
|
define if_wan = "ens18"
|
||||||
|
|
||||||
|
# Prometheus on grafana (IPv4 via the NAT of router)
|
||||||
|
define prometheus_v4 = { 212.12.48.123 }
|
||||||
|
define prometheus_v6 = { 2a00:14b0:42:102::e }
|
||||||
|
|
||||||
|
## Rules
|
||||||
|
|
||||||
|
table inet host_filter
|
||||||
|
delete table inet host_filter
|
||||||
|
|
||||||
|
table inet host_filter {
|
||||||
|
# Runs before Docker's DNAT, so this also applies to ports published by containers.
|
||||||
|
chain prerouting {
|
||||||
|
type filter hook prerouting priority dstnat - 10; policy accept;
|
||||||
|
|
||||||
|
iifname $if_wan tcp dport 9888 ip saddr $prometheus_v4 accept comment "jitsi exporter (container)"
|
||||||
|
iifname $if_wan tcp dport 9888 ip6 saddr $prometheus_v6 accept comment "jitsi exporter (container)"
|
||||||
|
iifname $if_wan tcp dport 9888 drop
|
||||||
|
}
|
||||||
|
|
||||||
|
chain input {
|
||||||
|
type filter hook input priority filter; policy drop;
|
||||||
|
|
||||||
|
iifname "lo" accept
|
||||||
|
ct state invalid drop
|
||||||
|
ct state established,related accept
|
||||||
|
|
||||||
|
# ICMPv6 is needed for neighbour discovery etc.
|
||||||
|
meta l4proto ipv6-icmp accept
|
||||||
|
meta l4proto icmp accept
|
||||||
|
|
||||||
|
# Docker networks
|
||||||
|
iifname { "docker0", "br-*" } accept
|
||||||
|
|
||||||
|
tcp dport 22 accept comment "ssh"
|
||||||
|
|
||||||
|
# Ports published by containers normally get DNATed and never reach the input
|
||||||
|
# hook, but they do when handled by docker-proxy (e.g. for IPv6 without IPv6
|
||||||
|
# enabled on the Docker network).
|
||||||
|
tcp dport { 80, 443 } accept comment "jitsi web (container)"
|
||||||
|
udp dport 10000 accept comment "jitsi jvb (container)"
|
||||||
|
|
||||||
|
# coturn (runs in the host network namespace)
|
||||||
|
udp dport 3478 accept comment "turn"
|
||||||
|
tcp dport 3478 accept comment "turn"
|
||||||
|
tcp dport 5349 accept comment "turns"
|
||||||
|
udp dport 5349 accept comment "turns (dtls)"
|
||||||
|
udp dport 49152-65535 accept comment "turn relay ports"
|
||||||
|
|
||||||
|
tcp dport { 9100, 9888 } ip saddr $prometheus_v4 accept comment "node exporter, jitsi exporter (container)"
|
||||||
|
tcp dport { 9100, 9888 } ip6 saddr $prometheus_v6 accept comment "node exporter, jitsi exporter (container)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -13,3 +13,10 @@
|
||||||
group: root
|
group: root
|
||||||
become: true
|
become: true
|
||||||
notify: Reload nftables service
|
notify: Reload nftables service
|
||||||
|
|
||||||
|
- name: ensure nftables service is enabled and started
|
||||||
|
ansible.builtin.systemd_service:
|
||||||
|
name: nftables
|
||||||
|
enabled: true
|
||||||
|
state: started
|
||||||
|
become: true
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue