Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add FlareSolverr Support #712

Merged
merged 3 commits into from
Jun 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ If you have a spare domain name you can configure applications to be accessible
* [Emby](https://emby.media/) - Media streaming and management
* [ESPHome](https://esphome.io/) - ESP8266/ESP32 programming and management for home automation
* [Firefly III](https://firefly-iii.org/) - Free and open source personal finance manager
* [FlareSolverr](https://github.com/FlareSolverr/FlareSolverr) - FlareSolverr is a proxy server to bypass Cloudflare and DDoS-GUARD protection
* [Fresh RSS](https://freshrss.org/) - Self-hosted RSS feed aggregator like Leed or Kriss Feed
* [get_iplayer](https://github.com/get-iplayer/get_iplayer) - download programmes from BBC iplayer
* [Gitea](https://gitea.io/en-us/) - Simple self-hosted GitHub clone
Expand Down
4 changes: 4 additions & 0 deletions nas.yml
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,10 @@
tags:
- firefly

- role: flaresolverr
tags:
- flaresolverr

- role: freshrss
tags:
- freshrss
Expand Down
19 changes: 19 additions & 0 deletions roles/flaresolverr/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -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
11 changes: 11 additions & 0 deletions roles/flaresolverr/docs/flaresolverr.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# FlareSolverr

Homepage: <https://github.com/FlareSolverr/FlareSolverr>

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/<your_inventory>/nas.yml` file.

The FlareSolverr API can be accessed from <http://ansible_nas_host_or_ip:8191>.
6 changes: 6 additions & 0 deletions roles/flaresolverr/molecule/default/molecule.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
provisioner:
inventory:
group_vars:
all:
flaresolverr_enabled: true
10 changes: 10 additions & 0 deletions roles/flaresolverr/molecule/default/side_effect.yml
Original file line number Diff line number Diff line change
@@ -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
18 changes: 18 additions & 0 deletions roles/flaresolverr/molecule/default/verify.yml
Original file line number Diff line number Diff line change
@@ -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
18 changes: 18 additions & 0 deletions roles/flaresolverr/molecule/default/verify_stopped.yml
Original file line number Diff line number Diff line change
@@ -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
42 changes: 42 additions & 0 deletions roles/flaresolverr/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -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: "8191"
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
Loading