01_fullstack.ymlΒΆ

---
- when: NEXTCLOUD_HPB_SIGNALING_ENABLED | bool
  block:
    - name: "πŸ›‘ Assert Janus joins the host network only in compose mode"
      ansible.builtin.assert:
        that: IS_COMPOSE_MODE
        fail_msg: >-
          services.talk.network_mode host gives Janus the host network namespace,
          which docker stack deploy cannot provide. Use bridge in swarm mode.
        quiet: true
      when: NEXTCLOUD_HPB_JANUS_HOST_NETWORK | bool

    - name: "πŸ›‘ Assert Talk has the TURN server its calls relay through"
      ansible.builtin.assert:
        that: NEXTCLOUD_HPB_TURN_ACTIVE_SERVER | length > 0
        fail_msg: >-
          services.talk.enabled is true, but {{ NEXTCLOUD_HPB_TURN_STANDALONE_ROLE }} is not deployed
          on this host, so Talk would hand out no STUN or TURN server and calls behind NAT would carry
          no media. Deploy {{ NEXTCLOUD_HPB_TURN_STANDALONE_ROLE }} or set services.talk.enabled to false.
        quiet: true
      when: IS_STACK_HOST | bool

- name: "🧩 load docker, db and proxy for {{ application_id }}"
  include_role:
    name: sys-stk-full
  vars:
    compose_handlers_flush: false
    application_id: web-app-nextcloud
    webserver_client_max_body_size: 10G

- name: "πŸ“„ Deploy '{{ NEXTCLOUD_INIT_GATE_HOST }}'"
  copy:
    src: "{{ NEXTCLOUD_INIT_GATE_SRC }}"
    dest: "{{ NEXTCLOUD_INIT_GATE_HOST }}"
    mode: "0755"
  when: IS_STACK_HOST | bool
  notify:
    - compose-build
    - compose-up

- when: NEXTCLOUD_WHITEBOARD_ENABLED | bool
  block:
    - name: "πŸ“ Create '{{ NEXTCLOUD_WHITEBOARD_SERVICE_DIRECTORY }}' Directory"
      file:
        path: "{{ NEXTCLOUD_WHITEBOARD_SERVICE_DIRECTORY }}"
        state: directory
        owner: "{{ NEXTCLOUD_DOCKER_USER_ID }}"
        group: "{{ NEXTCLOUD_DOCKER_USER_ID }}"
        mode: "0755"

    - name: "πŸ“„ Deploy Whiteboard Dockerfile to {{ NEXTCLOUD_WHITEBOARD_SERVICE_DOCKERFILE }}"
      stack_host_copy:
        src: "Dockerfiles/Whiteboard/Dockerfile"
        dest: "{{ NEXTCLOUD_WHITEBOARD_SERVICE_DOCKERFILE }}"
      notify:
        - compose-build
        - compose-up

- name: "πŸ“ create {{ NEXTCLOUD_HOST_CONF_ADD_PATH }}"
  file:
    path: "{{ NEXTCLOUD_HOST_CONF_ADD_PATH }}"
    state: directory
    owner: "{{ NEXTCLOUD_DOCKER_USER_ID }}"
    group: "{{ NEXTCLOUD_DOCKER_USER_ID }}"
    mode: "0755"

- name: "πŸ“„ Render Nextcloud config at {{ NEXTCLOUD_HOST_CONF_ADD_PATH }} (local + peers)"
  ansible.builtin.include_tasks:
    file: "{{ lookup('path_absolute', 'roles/sys-svc-compose/tasks/utils/render_replicated_templates.yml') }}"
  vars:
    role_templates:
      - src_glob: "config/*.j2"
        dest_dir: "{{ NEXTCLOUD_HOST_CONF_ADD_PATH }}"
        owner: "{{ NEXTCLOUD_DOCKER_USER_ID }}"
        group: "{{ NEXTCLOUD_DOCKER_USER_ID }}"
        mode: "0644"

- name: "πŸ” NEXTCLOUD | Ensure host-mounted config files ownership/permissions (recursive)"
  ansible.builtin.file:
    path: "{{ NEXTCLOUD_HOST_CONF_ADD_PATH }}"
    state: directory
    recurse: true
    owner: "{{ NEXTCLOUD_DOCKER_USER_ID }}"
    group: "{{ NEXTCLOUD_DOCKER_USER_ID }}"
    mode: "u=rwX,g=rX,o=rX"

- name: "πŸ“„ Render Nextcloud internal nginx config (local + swarm peers)"
  ansible.builtin.include_tasks:
    file: "{{ lookup('path_absolute', 'roles/sys-svc-compose/tasks/utils/render_replicated_templates.yml') }}"
  vars:
    role_templates:
      - src: "docker.conf.j2"
        dest: "{{ NEXTCLOUD_HOST_NGINX_PATH }}"

- name: "πŸ“„ Render the php-fpm pool sizing (local + swarm peers)"
  ansible.builtin.include_tasks:
    file: "{{ lookup('path_absolute', 'roles/sys-svc-compose/tasks/utils/render_replicated_templates.yml') }}"
  vars:
    role_templates:
      - src: "fpm-pool.conf.j2"
        dest: "{{ NEXTCLOUD_HOST_FPM_POOL_PATH }}"

- when: NEXTCLOUD_HPB_SIGNALING_ENABLED | bool
  block:
    - name: "πŸ“ Create the Talk build directories"
      ansible.builtin.file:
        path: "{{ item }}"
        state: directory
        mode: "0755"
      loop:
        - "{{ NEXTCLOUD_HPB_JANUS_BUILD_DIRECTORY }}"
        - "{{ NEXTCLOUD_RECORDING_BUILD_DIRECTORY }}"

    - name: "πŸ“„ Deploy the Talk Dockerfiles that build Janus and the recording server"
      stack_host_copy:
        src: "{{ item.src }}"
        dest: "{{ item.dest }}"
      loop:
        - { src: "Dockerfiles/Janus/Dockerfile", dest: "{{ NEXTCLOUD_HPB_JANUS_DOCKERFILE }}" }
        - { src: "Dockerfiles/Recording/Dockerfile", dest: "{{ NEXTCLOUD_RECORDING_DOCKERFILE }}" }
      notify:
        - compose-build
        - compose-up

    - name: "πŸ“„ Render the Janus, signaling and recording configs (local + swarm peers)"
      ansible.builtin.include_tasks:
        file: "{{ lookup('path_absolute', 'roles/sys-svc-compose/tasks/utils/render_replicated_templates.yml') }}"
      vars:
        role_templates:
          - src: "janus.jcfg.j2"
            dest: "{{ NEXTCLOUD_HPB_JANUS_CONFIG_HOST }}"
            mode: "0644"
          - src: "signaling.conf.j2"
            dest: "{{ NEXTCLOUD_HPB_SIGNALING_CONFIG_HOST }}"
            owner: "{{ NEXTCLOUD_HPB_SIGNALING_USER_ID }}"
            group: "{{ NEXTCLOUD_HPB_SIGNALING_USER_ID }}"
            mode: "0400"
          - src: "recording.conf.j2"
            dest: "{{ NEXTCLOUD_RECORDING_CONFIG_HOST }}"
            owner: "{{ NEXTCLOUD_RECORDING_USER_ID }}"
            group: "{{ NEXTCLOUD_RECORDING_USER_ID }}"
            mode: "0400"