diff --git a/nas.yml b/nas.yml index 5df9d22c..0ab4577e 100644 --- a/nas.yml +++ b/nas.yml @@ -133,6 +133,10 @@ tags: - firefly + - role: flaresolverr + tags: + - flaresolverr + - role: freshrss tags: - freshrss diff --git a/roles/flaresolverr/defaults/main.yml b/roles/flaresolverr/defaults/main.yml new file mode 100644 index 00000000..ec3b2a06 --- /dev/null +++ b/roles/flaresolverr/defaults/main.yml @@ -0,0 +1,19 @@ +--- +flaresolverr_enabled: false +flaresolverr_available_externally: false + +# directories +flaresolverr_config_directory: "{{ docker_home }}/flaresolverr/config" + +# uid / gid +flaresolverr_user_id: "0" +flaresolverr_group_id: "0" + +# network +flaresolverr_port: "8191" + +# specs +flaresolverr_memory: 200m + +# docker +flaresolverr_container_name: flaresolverr diff --git a/roles/flaresolverr/docs/flaresolverr.md b/roles/flaresolverr/docs/flaresolverr.md new file mode 100644 index 00000000..0c9874fd --- /dev/null +++ b/roles/flaresolverr/docs/flaresolverr.md @@ -0,0 +1,11 @@ +# FlareSolverr + +Homepage: + +FlareSolverr is a proxy server to bypass Cloudflare and DDoS-GUARD protection. Some Jackett indexers require it. + +## Usage + +Set `flaresolverr_enabled: true` in your `inventories//nas.yml` file. + +The Flaresolverr API can be accessed from . diff --git a/roles/flaresolverr/molecule/default/molecule.yml b/roles/flaresolverr/molecule/default/molecule.yml new file mode 100644 index 00000000..f944445a --- /dev/null +++ b/roles/flaresolverr/molecule/default/molecule.yml @@ -0,0 +1,6 @@ +--- +provisioner: + inventory: + group_vars: + all: + flaresolverr_enabled: true diff --git a/roles/flaresolverr/molecule/default/side_effect.yml b/roles/flaresolverr/molecule/default/side_effect.yml new file mode 100644 index 00000000..edbe38bd --- /dev/null +++ b/roles/flaresolverr/molecule/default/side_effect.yml @@ -0,0 +1,10 @@ +--- +- name: Stop + hosts: all + become: true + tasks: + - name: "Include {{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') | basename }} role" + ansible.builtin.include_role: + name: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') | basename }}" + vars: + flaresolverr_enabled: false diff --git a/roles/flaresolverr/molecule/default/verify.yml b/roles/flaresolverr/molecule/default/verify.yml new file mode 100644 index 00000000..be2a0842 --- /dev/null +++ b/roles/flaresolverr/molecule/default/verify.yml @@ -0,0 +1,18 @@ +--- +- name: Verify + hosts: all + gather_facts: false + tasks: + - ansible.builtin.include_vars: + file: ../../defaults/main.yml + + - name: Get container state + community.docker.docker_container_info: + name: "{{ flaresolverr_container_name }}" + register: result + + - name: Check FlareSolverr is running + ansible.builtin.assert: + that: + - result.container['State']['Status'] == "running" + - result.container['State']['Restarting'] == false diff --git a/roles/flaresolverr/molecule/default/verify_stopped.yml b/roles/flaresolverr/molecule/default/verify_stopped.yml new file mode 100644 index 00000000..fa49f224 --- /dev/null +++ b/roles/flaresolverr/molecule/default/verify_stopped.yml @@ -0,0 +1,18 @@ +--- +- name: Verify + hosts: all + gather_facts: false + tasks: + - ansible.builtin.include_vars: + file: ../../defaults/main.yml + + - name: Try and stop and remove FlareSolverr + community.docker.docker_container: + name: "{{ flaresolverr_container_name }}" + state: absent + register: result + + - name: Check FlareSolverr is stopped + ansible.builtin.assert: + that: + - not result.changed diff --git a/roles/flaresolverr/tasks/main.yml b/roles/flaresolverr/tasks/main.yml new file mode 100644 index 00000000..527899bd --- /dev/null +++ b/roles/flaresolverr/tasks/main.yml @@ -0,0 +1,42 @@ +--- +- name: Start FlareSolverr + block: + - name: Create FlareSolverr Directories + ansible.builtin.file: + path: "{{ item }}" + state: directory + # mode: 0755 + with_items: + - "{{ docker_home }}/flaresolverr/config" + + - name: FlareSolverr Docker Container + community.docker.docker_container: + name: "{{ flaresolverr_container_name }}" + image: flaresolverr/flaresolverr + pull: true + volumes: + - "{{ flaresolverr_config_directory }}:/config:rw" + ports: + - "{{ flaresolverr_port }}:5050" + env: + TZ: "{{ ansible_nas_timezone }}" + PUID: "{{ flaresolverr_user_id }}" + PGID: "{{ flaresolverr_group_id }}" + restart_policy: unless-stopped + memory: "{{ flaresolverr_memory }}" + labels: + traefik.enable: "{{ flaresolverr_available_externally | string }}" + traefik.http.routers.flaresolverr.rule: "Host(`flaresolverr.{{ ansible_nas_domain }}`)" + traefik.http.routers.flaresolverr.tls.certresolver: "letsencrypt" + traefik.http.routers.flaresolverr.tls.domains[0].main: "{{ ansible_nas_domain }}" + traefik.http.routers.flaresolverr.tls.domains[0].sans: "*.{{ ansible_nas_domain }}" + traefik.http.services.flaresolverr.loadbalancer.server.port: "5050" + when: flaresolverr_enabled is true + +- name: Stop FlareSolverr + block: + - name: Stop FlareSolverr + community.docker.docker_container: + name: "{{ flaresolverr_container_name }}" + state: absent + when: flaresolverr_enabled is false