created potential branch

This commit is contained in:
2026-03-19 23:09:55 -06:00
parent 362309a51d
commit cc29d886f2
22 changed files with 485 additions and 521 deletions

261
deploy_matrix.yml Normal file
View File

@@ -0,0 +1,261 @@
---
- name: Deploy Matrix + TURN + Traefik + NGINX + Teamspeak
hosts: all
become: true
collections:
- containers.podman
vars_files:
- ../vars/vars.yml # ← our variable file
tasks:
# -----------------------------------------------------------------
# (unchanged) Install podman, create network, create volumes …
# -----------------------------------------------------------------
- name: Install podman package
ansible.builtin.package:
name: podman
state: present
- name: Create podman network "{{ podman_network }}"
containers.podman.podman_network:
name: "{{ podman_network }}"
driver: bridge
subnet: "10.88.0.0/16"
state: present
- name: Ensure required podman volumes exist
containers.podman.podman_volume:
name: "{{ item }}"
driver: local
state: present
loop:
- "{{ vol_traefik }}"
- "{{ vol_synapse }}"
- "{{ vol_media }}"
- "{{ vol_turn }}"
- "{{ vol_nginx }}"
- "{{ vol_teamspeak }}" # <-- new volume
# -----------------------------------------------------------------
# Render all configuration files from the templates
# -----------------------------------------------------------------
- name: Render static Traefik config
ansible.builtin.template:
src: ../templates/traefik_static.toml.j2
dest: "{{ static_traefik_path }}"
mode: "0644"
- name: Render dynamic Traefik config
ansible.builtin.template:
src: ../templates/traefik_dynamic.yml.j2
dest: "{{ dynamic_traefik_path }}"
mode: "0644"
- name: Render coturn config
ansible.builtin.template:
src: ../templates/turnserver.conf.j2
dest: "{{ turn_conf_path }}"
mode: "0644"
- name: Render Synapse homeserver.yaml
ansible.builtin.template:
src: ../templates/homeserver.yaml.j2
dest: "{{ synapse_cfg_path }}"
mode: "0644"
- name: Render landing page index.html
ansible.builtin.template:
src: ../templates/landing.html.j2 # path relative to this playbook file
dest: "{{ nginx_html_path }}" # we already defined this variable in vars.yml
mode: "0644"
# -----------------------------------------------------------------
# Start the NGINX container (unchanged – just mounts the file we created)
# -----------------------------------------------------------------
- name: Start NGINX landing‑page container
containers.podman.podman_container:
name: landing
image: "{{ nginx_image }}"
state: started
ports:
- "8080:80"
volumes:
- "{{ vol_nginx }}:/usr/share/nginx/html:ro"
- "{{ nginx_html_path }}:/usr/share/nginx/html/index.html:ro"
network: "{{ podman_network }}"
restart_policy: always
# -----------------------------------------------------------------
# Pull required images (including Teamspeak)
# -----------------------------------------------------------------
- name: Pull Traefik image
containers.podman.podman_image:
name: "{{ traefik_image }}"
state: present
- name: Pull coturn image
containers.podman.podman_image:
name: "{{ turn_image }}"
state: present
- name: Pull Synapse image
containers.podman.podman_image:
name: "{{ synapse_image }}"
state: present
- name: Pull NGINX image
containers.podman.podman_image:
name: "{{ nginx_image }}"
state: present
- name: Pull Teamspeak image
containers.podman.podman_image:
name: "{{ teamspeak_image }}"
state: present
# -----------------------------------------------------------------
# Start containers (Traefik, TURN, Synapse, NGINX – unchanged)
# -----------------------------------------------------------------
- name: Start Traefik container
containers.podman.podman_container:
name: traefik
image: "{{ traefik_image }}"
state: started
ports:
- "{{ traefik_http_port }}:{{ traefik_http_port }}"
- "{{ traefik_https_port }}:{{ traefik_https_port }}"
- "{{ teamspeak_tcp_port }}:{{ teamspeak_tcp_port }}" # expose TCP entrypoint on host
volumes:
- "{{ vol_traefik }}:/etc/traefik"
- "{{ static_traefik_path }}:{{ static_traefik_path }}:ro"
- "{{ dynamic_traefik_path }}:{{ dynamic_traefik_path }}:ro"
network: "{{ podman_network }}"
restart_policy: always
- name: Start coturn container
containers.podman.podman_container:
name: turn
image: "{{ turn_image }}"
state: started
ports:
- "{{ turn_listen_port }}:{{ turn_listen_port }}/udp"
- "{{ turn_listen_port }}:{{ turn_listen_port }}/tcp"
- "{{ turn_tls_port }}:{{ turn_tls_port }}/udp"
- "{{ turn_tls_port }}:{{ turn_tls_port }}/tcp"
volumes:
- "{{ vol_turn }}:/var/lib/turn"
- "{{ turn_conf_path }}:/etc/turnserver.conf:ro"
command: "-c /etc/turnserver.conf"
network: "{{ podman_network }}"
restart_policy: always
- name: Start Synapse container
containers.podman.podman_container:
name: synapse
image: "{{ synapse_image }}"
state: started
env:
SYNAPSE_SERVER_NAME: "{{ matrix_domain }}"
SYNAPSE_REPORT_STATS: "yes"
ports:
- "{{ synapse_http_port }}:{{ synapse_http_port }}"
volumes:
- "{{ vol_synapse }}:/data"
- "{{ vol_media }}:/data/media_store"
- "{{ synapse_cfg_path }}:/data/homeserver.yaml:ro"
network: "{{ podman_network }}"
restart_policy: always
- name: Start NGINX landing‑page container
containers.podman.podman_container:
name: landing
image: "{{ nginx_image }}"
state: started
ports:
- "8080:80"
volumes:
- "{{ vol_nginx }}:/usr/share/nginx/html:ro"
- "{{ nginx_html_path }}:/usr/share/nginx/html/index.html:ro"
network: "{{ podman_network }}"
restart_policy: always
# -----------------------------------------------------------------
# **NEW** – Start Teamspeak container
# -----------------------------------------------------------------
- name: Start Teamspeak container
containers.podman.podman_container:
name: "{{ teamspeak_container_name }}"
image: "{{ teamspeak_image }}"
state: started
ports:
# UDP voice port – exposed directly on the host (no Traefik)
- "{{ teamspeak_udp_port }}:{{ teamspeak_udp_port }}/udp"
# TCP query port – Traefik will forward it (see static config)
- "{{ teamspeak_tcp_port }}:{{ teamspeak_tcp_port }}/tcp"
# Optional file‑transfer port (exposed directly)
- "{{ teamspeak_file_port }}:{{ teamspeak_file_port }}/tcp"
volumes:
- "{{ vol_teamspeak }}:/var/ts3server"
network: "{{ podman_network }}"
restart_policy: always
# -----------------------------------------------------------------
# (optional) generate systemd units for the new container
# -----------------------------------------------------------------
- name: Generate systemd unit for Teamspeak
containers.podman.podman_generate_systemd:
name: "{{ teamspeak_container_name }}"
state: present
dest: "/etc/systemd/system/{{ teamspeak_container_name }}.service"
when: generate_systemd | bool
# -----------------------------------------------------------------
# (unchanged) systemd unit generation for the other containers
# -----------------------------------------------------------------
- name: Generate systemd unit for Traefik
containers.podman.podman_generate_systemd:
name: traefik
state: present
dest: "/etc/systemd/system/traefik.service"
when: generate_systemd | bool
- name: Generate systemd unit for TURN
containers.podman.podman_generate_systemd:
name: turn
state: present
dest: "/etc/systemd/system/turn.service"
when: generate_systemd | bool
- name: Generate systemd unit for Synapse
containers.podman.podman_generate_systemd:
name: synapse
state: present
dest: "/etc/systemd/system/synapse.service"
when: generate_systemd | bool
- name: Generate systemd unit for landing page
containers.podman.podman_generate_systemd:
name: landing
state: present
dest: "/etc/systemd/system/landing.service"
when: generate_systemd | bool
- name: Reload systemd daemon (if units were created)
ansible.builtin.systemd:
daemon_reload: yes
when: generate_systemd | bool
# -----------------------------------------------------------------
# Debug – list containers
# -----------------------------------------------------------------
- name: List running podman containers
containers.podman.podman_ps:
all: true
register: ps_out
- name: Show container list
ansible.builtin.debug:
var: ps_out.containers