diff --git a/env.yml b/env.yml index f3a3313..34cda9d 100644 --- a/env.yml +++ b/env.yml @@ -21,6 +21,13 @@ cifs_mounts: gid: "{{ host_uid }}" file_mode: 640 dir_mode: 750 + fireshare: + src: "//{{ cifs_host }}/backup/fireshare" + path: /mnt/storagebox/fireshare + uid: "{{ users['fireshare'] + uid_shift }}" + gid: "{{ users['fireshare'] + uid_shift }}" + file_mode: 644 + dir_mode: 755 storagebox: src: "//{{ cifs_host }}/backup" path: /mnt/storagebox @@ -41,6 +48,7 @@ projects: - coturn - element - etebase + - fireshare - hedgedoc - homepage - keycloak @@ -84,6 +92,7 @@ ports: coturn_relay_max: 49172 element: 8084 etebase: 3735 + fireshare: 8085 hedgedoc: 8086 homepage: 8686 keycloak: 8444 @@ -110,6 +119,7 @@ ports: users: coturn: 666 etebase: 373 + fireshare: 1007 hedgedoc: 1004 homepage: 8686 keycloak: 1000 @@ -131,6 +141,9 @@ volumes: coturn_tls_certificate_file: "/etc/letsencrypt/live/turn.{{ domain }}/fullchain.pem" coturn_tls_certificate_key_file: "/etc/letsencrypt/live/turn.{{ domain }}/privkey.pem" etebase_datadir: /mnt/etebasedata + fireshare_datadir: /mnt/firesharedata + fireshare_processeddir: /mnt/storagebox/fireshare/processed + fireshare_videosdir: /mnt/storagebox/fireshare/videos hedgedoc_uploadsdir: /mnt/hedgedocuploads mailserver_datadir: /mnt/mailserver mailserver_tls_certificate_file: "/etc/letsencrypt/live/mail.{{ domain }}/fullchain.pem" diff --git a/roles/fireshare/tasks/main.yml b/roles/fireshare/tasks/main.yml new file mode 100644 index 0000000..2b65be3 --- /dev/null +++ b/roles/fireshare/tasks/main.yml @@ -0,0 +1,9 @@ +- name: Include setup tasks + include_tasks: + file: setup.yml + when: run_setup | default(false) | bool + +- name: Include update tasks + include_tasks: + file: update.yml + when: run_update | default(false) | bool diff --git a/roles/fireshare/tasks/setup.yml b/roles/fireshare/tasks/setup.yml new file mode 100644 index 0000000..2ae598d --- /dev/null +++ b/roles/fireshare/tasks/setup.yml @@ -0,0 +1,27 @@ +- name: "(Re)Create {{ project_dir }} project directory" + file: + path: "{{ project_dir }}" + state: "{{ item }}" + loop: + - absent + - directory + +- name: Template docker-compose.yaml & .env to project directory + template: + src: "{{ item }}" + dest: "{{ project_dir }}/{{ item }}" + owner: "{{ host_uid }}" + group: "{{ host_uid }}" + mode: '640' + loop: + - docker-compose.yaml + - .env + +- name: "Create (if not exists) directory {{ volumes['fireshare_datadir'] }} & set permissions" + file: + path: "{{ volumes['fireshare_datadir'] }}" + state: directory + owner: "{{ users['fireshare'] + uid_shift }}" + group: "{{ users['fireshare'] + uid_shift }}" + mode: '750' + become: true diff --git a/roles/fireshare/tasks/update.yml b/roles/fireshare/tasks/update.yml new file mode 100644 index 0000000..cb605b0 --- /dev/null +++ b/roles/fireshare/tasks/update.yml @@ -0,0 +1,18 @@ +- name: Pull project services + community.docker.docker_compose: + project_src: "{{ project_dir }}" + recreate: never + pull: true + debug: true + when: docker_pull_images | bool + register: fireshare_docker_compose_pull_result + +- name: Display pulled image(s) name + set_fact: + fireshare_pulled_images: "{{ fireshare_pulled_images | default([]) + [item.pulled_image.name] }}" + loop: "{{ fireshare_docker_compose_pull_result['actions'] | default([]) | selectattr('pulled_image', 'defined') }}" + +- name: Create/Restart project services + community.docker.docker_compose: + project_src: "{{ project_dir }}" + restarted: "{{ run_setup | default(false) | bool }}" diff --git a/roles/fireshare/templates/.env b/roles/fireshare/templates/.env new file mode 100644 index 0000000..33407cc --- /dev/null +++ b/roles/fireshare/templates/.env @@ -0,0 +1,9 @@ +ADMIN_USERNAME='{{ fireshare_secrets["admin_username"] }}' +ADMIN_PASSWORD='{{ fireshare_secrets["admin_password"] }}' +SECRET_KEY='{{ fireshare_secrets["secret_key"] }}' +MINUTES_BETWEEN_VIDEO_SCANS=5 +# The location in the video thumbnails are generated. A value between 0-100 where 50 would be the frame in the middle of the video file and 0 would be the first frame of the video. +THUMBNAIL_VIDEO_LOCATION=0 +DOMAIN=clips.{{ domain }} +PUID={{ users['fireshare'] }} +PGID={{ users['fireshare'] }} diff --git a/roles/fireshare/templates/docker-compose.yaml b/roles/fireshare/templates/docker-compose.yaml new file mode 100644 index 0000000..5a66b4c --- /dev/null +++ b/roles/fireshare/templates/docker-compose.yaml @@ -0,0 +1,12 @@ +services: + fireshare: + container_name: fireshare + image: docker.io/shaneisrael/fireshare:latest + restart: always + env_file: .env + ports: + - 127.0.0.1:{{ ports['fireshare'] }}:80 + volumes: + - {{ volumes['fireshare_datadir'] }}:/data + - {{ volumes['fireshare_processeddir'] }}:/processed + - {{ volumes['fireshare_videosdir'] }}:/videos diff --git a/roles/nginx/templates/sites-enabled/clips.conf b/roles/nginx/templates/sites-enabled/clips.conf new file mode 100644 index 0000000..1804ef5 --- /dev/null +++ b/roles/nginx/templates/sites-enabled/clips.conf @@ -0,0 +1,12 @@ +server { + listen 443 ssl; + listen [::]:443 ssl; + + server_name clips.{{ domain }}; + + location / { + proxy_pass http://127.0.0.1:{{ ports['fireshare'] }}; + + client_max_body_size 500M; + } +} diff --git a/secrets.yml.example b/secrets.yml.example index 16a3b3c..6f98ef0 100644 --- a/secrets.yml.example +++ b/secrets.yml.example @@ -11,6 +11,11 @@ cifs_credentials: coturn_secrets: static_auth_secret: +fireshare_secrets: + admin_username: + admin_password: + secret_key: + hedgedoc_secrets: client_id: client_secret: