commit fb5a0fc542a10f0d9446a525c6a60b4cb6c8c62a Author: AlexLebens Date: Tue Sep 26 18:14:36 2023 -0600 init diff --git a/Actual/.drone.yml b/Actual/.drone.yml new file mode 100644 index 0000000..2314ef0 --- /dev/null +++ b/Actual/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Actual + URL: actual.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Actual failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Actual failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Actual succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Actual failed. + when: + status: + - failure diff --git a/Actual/README.md b/Actual/README.md new file mode 100644 index 0000000..b8942ba --- /dev/null +++ b/Actual/README.md @@ -0,0 +1,3 @@ +# Actual + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Actual/status.svg)](https://drone.alexlebens.net/alexlebens/Actual) \ No newline at end of file diff --git a/Actual/UptimeKuma/docker-1.json b/Actual/UptimeKuma/docker-1.json new file mode 100644 index 0000000..7f4a604 --- /dev/null +++ b/Actual/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Actual - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://actual.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "actual", + "docker_host": 1 +} \ No newline at end of file diff --git a/Actual/UptimeKuma/http-1.json b/Actual/UptimeKuma/http-1.json new file mode 100644 index 0000000..6d91563 --- /dev/null +++ b/Actual/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Actual - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://actual.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Actual/docker-compose.yml b/Actual/docker-compose.yml new file mode 100644 index 0000000..80d7a6e --- /dev/null +++ b/Actual/docker-compose.yml @@ -0,0 +1,43 @@ +services: + actual: + container_name: actual + image: jlongster/actual-server:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.actual.entrypoints: websecure + traefik.http.routers.actual.rule: Host(`actual.alexlebens.net`) + traefik.http.routers.actual.service: actual + traefik.http.services.actual.loadbalancer.server.port: 5006 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + privileged: true + restart: always + volumes: + - server:/app/server-files + - user:/app/user-files + +networks: + traefik: + name: traefik + external: true + +volumes: + server: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/actual_server + + user: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/actual_user diff --git a/Apprise/.drone.yml b/Apprise/.drone.yml new file mode 100644 index 0000000..cdb4804 --- /dev/null +++ b/Apprise/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Apprise + URL: apprise.alexlebens.net mind.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Apprise failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Apprise failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Apprise succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Apprise failed. + when: + status: + - failure diff --git a/Apprise/README.md b/Apprise/README.md new file mode 100644 index 0000000..5d45a1a --- /dev/null +++ b/Apprise/README.md @@ -0,0 +1,3 @@ +# Apprise + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Apprise/status.svg)](https://drone.alexlebens.net/alexlebens/Apprise) \ No newline at end of file diff --git a/Apprise/UptimeKuma/docker-1.json b/Apprise/UptimeKuma/docker-1.json new file mode 100644 index 0000000..fb12770 --- /dev/null +++ b/Apprise/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Apprise - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://apprise.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "apprise_api", + "docker_host": 1 +} \ No newline at end of file diff --git a/Apprise/UptimeKuma/docker-2.json b/Apprise/UptimeKuma/docker-2.json new file mode 100644 index 0000000..9db10a2 --- /dev/null +++ b/Apprise/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Apprise Mind - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://mind.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "apprise_mind", + "docker_host": 1 +} \ No newline at end of file diff --git a/Apprise/UptimeKuma/http-1.json b/Apprise/UptimeKuma/http-1.json new file mode 100644 index 0000000..f4d8c17 --- /dev/null +++ b/Apprise/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Apprise - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://apprise.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Apprise/UptimeKuma/http-2.json b/Apprise/UptimeKuma/http-2.json new file mode 100644 index 0000000..a528e9f --- /dev/null +++ b/Apprise/UptimeKuma/http-2.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Apprise Mind - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://mind.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Apprise/docker-compose.yml b/Apprise/docker-compose.yml new file mode 100644 index 0000000..299be00 --- /dev/null +++ b/Apprise/docker-compose.yml @@ -0,0 +1,68 @@ +services: + apprise_api: + container_name: apprise_api + environment: + - PUID=1000 + - PGID=1000 + - TZ=America/Denver + image: lscr.io/linuxserver/apprise-api:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.apprise_api.entrypoints: websecure + traefik.http.routers.apprise_api.rule: Host(`apprise.alexlebens.net`) + traefik.http.routers.apprise_api.service: apprise_api + traefik.http.services.apprise_api.loadbalancer.server.port: 8000 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + volumes: + - apprise_config:/config + + mind: + container_name: apprise_mind + environment: + - TZ=America/Denver + image: 'mrcas/mind:latest' + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.apprise_mind.entrypoints: websecure + traefik.http.routers.apprise_mind.rule: Host(`mind.alexlebens.net`) + traefik.http.routers.apprise_mind.service: apprise_mind + traefik.http.services.apprise_mind.loadbalancer.server.port: 8080 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + volumes: + - mind_db:/app/db + +networks: + traefik: + name: traefik + external: true + +volumes: + apprise_config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/apprise_config + + mind_db: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/apprise_mind_db diff --git a/Audiobookshelf/.drone.yml b/Audiobookshelf/.drone.yml new file mode 100644 index 0000000..0c010aa --- /dev/null +++ b/Audiobookshelf/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Audiobookshelf + URL: audiobookshelf.alexlebens.net openaudible.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Audiobookshelf failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Audiobookshelf failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Audiobookshelf succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Audiobookshelf failed. + when: + status: + - failure diff --git a/Audiobookshelf/.env b/Audiobookshelf/.env new file mode 100644 index 0000000..bbfb5fc --- /dev/null +++ b/Audiobookshelf/.env @@ -0,0 +1,4 @@ +AUDIOBOOKSHELF_UID=1024 +AUDIOBOOKSHELF_GID=65536 +PORT=80 +SOURCE=docker \ No newline at end of file diff --git a/Audiobookshelf/README.md b/Audiobookshelf/README.md new file mode 100644 index 0000000..13ef161 --- /dev/null +++ b/Audiobookshelf/README.md @@ -0,0 +1,3 @@ +# Audiobookshelf + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Audiobookshelf/status.svg)](https://drone.alexlebens.net/alexlebens/Audiobookshelf) \ No newline at end of file diff --git a/Audiobookshelf/UptimeKuma/docker-1.json b/Audiobookshelf/UptimeKuma/docker-1.json new file mode 100644 index 0000000..f657e4d --- /dev/null +++ b/Audiobookshelf/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Audiobookshelf - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://audiobookshelf.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "audiobookshelf", + "docker_host": 1 +} \ No newline at end of file diff --git a/Audiobookshelf/UptimeKuma/docker-2.json b/Audiobookshelf/UptimeKuma/docker-2.json new file mode 100644 index 0000000..8e62f3c --- /dev/null +++ b/Audiobookshelf/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Audiobookshelf Openaudible - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://openaudible.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "audiobookshelf_openaudible", + "docker_host": 1 +} \ No newline at end of file diff --git a/Audiobookshelf/UptimeKuma/http-1.json b/Audiobookshelf/UptimeKuma/http-1.json new file mode 100644 index 0000000..2f4a2fd --- /dev/null +++ b/Audiobookshelf/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Audiobookshelf - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://audiobookshelf.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Audiobookshelf/UptimeKuma/http-2.json b/Audiobookshelf/UptimeKuma/http-2.json new file mode 100644 index 0000000..d4ba387 --- /dev/null +++ b/Audiobookshelf/UptimeKuma/http-2.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Audiobookshelf Openaudible - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://openaudible.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Audiobookshelf/docker-compose.yml b/Audiobookshelf/docker-compose.yml new file mode 100644 index 0000000..8a58a62 --- /dev/null +++ b/Audiobookshelf/docker-compose.yml @@ -0,0 +1,61 @@ +services: + audiobookshelf: + container_name: audiobookshelf + env_file: + - .env + image: advplyr/audiobookshelf:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.audiobookshelf.entrypoints: websecure + traefik.http.routers.audiobookshelf.rule: Host(`audiobookshelf.alexlebens.net`) + traefik.http.routers.audiobookshelf.service: audiobookshelf + traefik.http.services.audiobookshelf.loadbalancer.server.port: 80 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + privileged: true + volumes: + - audiobooks_nfs:/audiobooks + - podcasts_nfs:/podcasts + - audiobookshelf_metadata:/metadata + - audiobookshelf_config:/config + +networks: + traefik: + name: traefik + external: true + +volumes: + audiobookshelf_metadata: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/audiobookshelf_metadata + + audiobookshelf_config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/audiobookshelf_config + + audiobooks_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Audiobooks" + + podcasts_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Podcasts" diff --git a/Authentik/.drone.yml b/Authentik/.drone.yml new file mode 100644 index 0000000..b6b80b7 --- /dev/null +++ b/Authentik/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Authentik + URL: authentik.alexlebens.net authentikldap.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Authentik failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Authentik failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Authentik succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Authentik failed. + when: + status: + - failure diff --git a/Authentik/.env b/Authentik/.env new file mode 100644 index 0000000..0d88d86 --- /dev/null +++ b/Authentik/.env @@ -0,0 +1,17 @@ +POSTGRES_PASSWORD='0dJ+B16mOL7J25Quw3PzseRJhQfGKUcAuzGFiU7WqoUbBOrH' +POSTGRES_USER='authentik' +POSTGRES_DB='authentik' + +AUTHENTIK_REDIS__HOST='redis' +AUTHENTIK_POSTGRESQL__HOST='postgresql' +AUTHENTIK_POSTGRESQL__USER='authentik' +AUTHENTIK_POSTGRESQL__NAME='authentik' +AUTHENTIK_POSTGRESQL__PASSWORD='0dJ+B16mOL7J25Quw3PzseRJhQfGKUcAuzGFiU7WqoUbBOrH' +AUTHENTIK_SECRET_KEY='SY8kT618oeYGjbSShODJk7rxM9JXnw7oa+vSDq7O0XEP1BvQ' +AUTHENTIK_ERROR_REPORTING__ENABLED='true' +WORKERS='1' + +AUTHENTIK_HOST='https://authentik.alexlebens.net' +AUTHENTIK_INSECURE='false' +AUTHENTIK_TOKEN='dIA2OZiTUBn4Df7motslW6sm3nDEIbdbursrVhk2sM6LFtbnZdpapLIdQCb3' +SSL_CERT_FILE='/etc/ssl/certs/ca-certificates.crt' \ No newline at end of file diff --git a/Authentik/README.md b/Authentik/README.md new file mode 100644 index 0000000..4ad6636 --- /dev/null +++ b/Authentik/README.md @@ -0,0 +1,3 @@ +# Authentik + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Authentik/status.svg)](https://drone.alexlebens.net/alexlebens/Authentik) \ No newline at end of file diff --git a/Authentik/UptimeKuma/docker-1.json b/Authentik/UptimeKuma/docker-1.json new file mode 100644 index 0000000..1a70f47 --- /dev/null +++ b/Authentik/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Authentik PostgreSQL - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://authentik.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "authentik_postgresql", + "docker_host": 1 +} \ No newline at end of file diff --git a/Authentik/UptimeKuma/docker-2.json b/Authentik/UptimeKuma/docker-2.json new file mode 100644 index 0000000..af6a8d3 --- /dev/null +++ b/Authentik/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Authentik Redis - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://authentik.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "authentik_redis", + "docker_host": 1 +} \ No newline at end of file diff --git a/Authentik/UptimeKuma/docker-3.json b/Authentik/UptimeKuma/docker-3.json new file mode 100644 index 0000000..1096526 --- /dev/null +++ b/Authentik/UptimeKuma/docker-3.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Authentik Server - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://authentik.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "authentik_server", + "docker_host": 1 +} \ No newline at end of file diff --git a/Authentik/UptimeKuma/docker-4.json b/Authentik/UptimeKuma/docker-4.json new file mode 100644 index 0000000..4869e45 --- /dev/null +++ b/Authentik/UptimeKuma/docker-4.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Authentik Worker - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://authentik.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "authentik_worker", + "docker_host": 1 +} \ No newline at end of file diff --git a/Authentik/UptimeKuma/docker-5.json b/Authentik/UptimeKuma/docker-5.json new file mode 100644 index 0000000..0b070d9 --- /dev/null +++ b/Authentik/UptimeKuma/docker-5.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Authentik LDAP - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://authentik.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "authentik_ldap", + "docker_host": 1 +} \ No newline at end of file diff --git a/Authentik/UptimeKuma/http-1.json b/Authentik/UptimeKuma/http-1.json new file mode 100644 index 0000000..db82767 --- /dev/null +++ b/Authentik/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Authentik - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://authentik.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Authentik/docker-compose.yml b/Authentik/docker-compose.yml new file mode 100644 index 0000000..2446a7f --- /dev/null +++ b/Authentik/docker-compose.yml @@ -0,0 +1,185 @@ +services: + postgresql: + container_name: authentik_postgresql + env_file: + - .env + image: postgres:12-alpine + healthcheck: + test: + [ + "CMD-SHELL", + "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}" + ] + start_period: 20s + interval: 30s + retries: 5 + timeout: 5s + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + authentik: + ipv4_address: 172.14.0.3 + restart: unless-stopped + volumes: + - postgressql:/var/lib/postgresql/data + + redis: + command: --save 60 1 --loglevel warning + container_name: authentik_redis + healthcheck: + test: [ "CMD-SHELL", "redis-cli ping | grep PONG" ] + start_period: 20s + interval: 30s + retries: 5 + timeout: 3s + image: redis:alpine + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + authentik: + ipv4_address: 172.14.0.2 + restart: unless-stopped + volumes: + - redis:/data + + authentik: + command: server + container_name: authentik_server + depends_on: + - postgresql + - redis + env_file: + - .env + image: ghcr.io/goauthentik/server:2022.12.2 + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.authentik.entrypoints: websecure + traefik.http.routers.authentik.rule: Host(`authentik-old.alexlebens.net`) + traefik.http.routers.authentik.service: authentik + traefik.http.services.authentik.loadbalancer.server.port: 9000 + traefik.http.routers.authentikoutpost.rule: HostRegexp(`{subdomain:[a-z0-9-]+}.alexlebens.net`) && PathPrefix(`/outpost.goauthentik.io/`) + traefik.http.routers.authentikoutpost.entrypoints: websecure + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + authentik: + ipv4_address: 172.14.0.10 + restart: unless-stopped + privileged: true + volumes: + - media:/media + - templates:/templates + + authentik_worker: + command: worker + container_name: authentik_worker + depends_on: + - authentik + env_file: + - .env + image: ghcr.io/goauthentik/server:2022.12.2 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + authentik: + ipv4_address: 172.14.0.11 + privileged: true + restart: unless-stopped + user: root + volumes: + - backups:/backups + - certs:/certs + - media:/media + - templates:/templates + - /var/run/docker.sock:/var/run/docker.sock + + authentik_ldap: + container_name: authentik_ldap + depends_on: + - authentik + env_file: + - .env + image: ghcr.io/goauthentik/ldap:2022.12.2 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + authentik: + ipv4_address: 172.14.0.12 + traefik: null + ports: + - 192.168.1.15:389:389/tcp + - 192.168.1.15:636:636/tcp + privileged: true + restart: unless-stopped + +networks: + traefik: + name: traefik + external: true + + authentik: + name: authentik + external: false + ipam: + config: + - subnet: 172.14.0.0/16 + +volumes: + postgressql: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/authentik_postgressql + + redis: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/authentik_redis + + backups: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/authentik_backups + + certs: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/authentik_certs + + media: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/authentik_media + + templates: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/authentik_templates diff --git a/Calibre/.drone.yml b/Calibre/.drone.yml new file mode 100644 index 0000000..5b37f35 --- /dev/null +++ b/Calibre/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Calibre + URL: calibre.alexlebens.net calibredb.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Calibre failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Calibre failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Calibre succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Calibre failed. + when: + status: + - failure diff --git a/Calibre/.env b/Calibre/.env new file mode 100644 index 0000000..4925aa1 --- /dev/null +++ b/Calibre/.env @@ -0,0 +1,3 @@ +PUID=1000 +PGID=1000 +TZ=America/Denver \ No newline at end of file diff --git a/Calibre/README.md b/Calibre/README.md new file mode 100644 index 0000000..4a469bb --- /dev/null +++ b/Calibre/README.md @@ -0,0 +1,3 @@ +# Calibre + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Calibre/status.svg)](https://drone.alexlebens.net/alexlebens/Calibre) \ No newline at end of file diff --git a/Calibre/UptimeKuma/docker-1.json b/Calibre/UptimeKuma/docker-1.json new file mode 100644 index 0000000..01d6c4e --- /dev/null +++ b/Calibre/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Calibre - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://calibre.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "calibre", + "docker_host": 1 +} \ No newline at end of file diff --git a/Calibre/UptimeKuma/docker-2.json b/Calibre/UptimeKuma/docker-2.json new file mode 100644 index 0000000..7245dc6 --- /dev/null +++ b/Calibre/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Calibre DB - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://calibredb.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "calibre_database", + "docker_host": 1 +} \ No newline at end of file diff --git a/Calibre/UptimeKuma/http-1.json b/Calibre/UptimeKuma/http-1.json new file mode 100644 index 0000000..979eefd --- /dev/null +++ b/Calibre/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Calibre - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://calibre.alexlebens.net/login", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Calibre/UptimeKuma/http-2.json b/Calibre/UptimeKuma/http-2.json new file mode 100644 index 0000000..898050c --- /dev/null +++ b/Calibre/UptimeKuma/http-2.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Calibre DB - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://calibredb.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Calibre/docker-compose.yml b/Calibre/docker-compose.yml new file mode 100644 index 0000000..f61a251 --- /dev/null +++ b/Calibre/docker-compose.yml @@ -0,0 +1,81 @@ +services: + calibre_db: + container_name: calibre_database + env_file: + - .env + image: lscr.io/linuxserver/calibre:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.calibre_database.entrypoints: websecure + traefik.http.routers.calibre_database.rule: Host(`calibredb.alexlebens.net`) + traefik.http.routers.calibre_database.service: calibre_database + traefik.http.services.calibre_database.loadbalancer.server.port: 8080 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + privileged: true + restart: unless-stopped + security_opt: + - seccomp:unconfined + user: root + volumes: + - calibre_database_config:/config + - books_nfs:/books + + calibre_web: + container_name: calibre_web + env_file: + - .env + image: lscr.io/linuxserver/calibre-web:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.calibre_web.entrypoints: websecure + traefik.http.routers.calibre_web.rule: Host(`calibre.alexlebens.net`) + traefik.http.routers.calibre_web.service: calibre_web + traefik.http.routers.calibre_web.middlewares: calibreweb-theme@file + traefik.http.services.calibre_web.loadbalancer.server.port: 8083 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: unless-stopped + privileged: true + volumes: + - calibre_web_config:/config + - books_nfs:/books:ro + +networks: + traefik: + name: traefik + external: true + +volumes: + calibre_database_config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/calibre_calibre_database + + calibre_web_config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/calibre_web_config + + books_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: :/volume2/Storage/Books diff --git a/Checkrr/.drone.yml b/Checkrr/.drone.yml new file mode 100644 index 0000000..6dbbe3b --- /dev/null +++ b/Checkrr/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Checkrr + URL: checkrr.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Checkrr failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Checkrr failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Checkrr succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Checkrr failed. + when: + status: + - failure diff --git a/Checkrr/Files/servarr_checkrr/checkrr.yaml b/Checkrr/Files/servarr_checkrr/checkrr.yaml new file mode 100644 index 0000000..224cb44 --- /dev/null +++ b/Checkrr/Files/servarr_checkrr/checkrr.yaml @@ -0,0 +1,112 @@ +checkrr: + checkpath: + - "/mnt/store/Anime" + - "/mnt/store/Anime Movies" + - "/mnt/store/Documentaries" + - "/mnt/store/Documentary Shows" + - "/mnt/store/Movies" + - "/mnt/store/Movies Classics" + - "/mnt/store/Movies Foreign" + - "/mnt/store/Music/Music Artists" + - "/mnt/store/Stand Up" + - "/mnt/store/TV Shows" + database: /tmp/checkrr.db + debug: true + csvfile: /tmp/badfiles.csv + logfile: /tmp/checkrr.log + logjson: false + cron: "@daily" + ignorehidden: true + ignoreexts: + - .txt + - .nfo + - .nfo-orig + - .nzb + - .url + - .db + - .srt + - .ac3 + - .m2ts +arr: + radarr: + process: true + service: radarr + address: 172.27.1.30 + apikey: e6e3d6f4aafe4e499d970cfcbf042db9 + baseurl: / + port: 7878 + radarranime: + process: true + service: radarr + address: 172.27.1.61 + apikey: fb126bad31d64d43bb669ad81329954d + baseurl: / + port: 7878 + radarrart: + process: true + service: radarr + address: 172.27.1.62 + apikey: 32365893c4234f8a9ad96d68d6e7a520 + baseurl: / + port: 7878 + radarrdocumentaries: + process: true + service: radarr + address: 172.27.1.63 + apikey: fd03f47363324096a56d0a453623420b + baseurl: / + port: 7878 + radarrstandup: + process: true + service: radarr + address: 172.27.1.64 + apikey: c7c425b3fbcf4112895aceec7729f4d1 + baseurl: / + port: 7878 + sonarr: + process: true + service: sonarr + address: 172.27.1.31 + apikey: 7f0dfeea4b9f410d96b5ffa2f809d1e8 + baseurl: / + port: 8989 + sonarranime: + process: true + service: sonarr + address: 172.27.1.70 + apikey: a2f10e70559c4ee3b8ff1d6cdc5a41f1 + baseurl: / + port: 8989 + sonarrdocumentaries: + process: true + service: sonarr + address: 172.27.1.72 + apikey: 3ed988c3731b45ad8124b7d55b620d6b + baseurl: / + port: 8989 + lidarr: + service: lidarr + process: true + address: 172.27.1.32 + apikey: d25bd6d24f4e4b90a21fc5b70bcb9fd9 + baseurl: / + port: 8686 +notifications: + discord: + url: https://discord.com/api/webhooks/988292688501698590/7rh8CfveLozzH9qTJdLK6zxBAwpPqzC6jeDGwo92xoOhHgHR7UuWIsnS1fJUdriErpWN + notificationtypes: + - reacquire + - unknowndeleted + - unknowndetected + - startrun + - endrun + pushover: + apitoken: ae7g9zjetygqc1myexgszjp44z5xx8 + recipient: pixel7 + notificationtypes: + - reacquire +webserver: + port: 8585 + baseurl: "/" + trustedproxies: + - 172.27.0.0/16 diff --git a/Checkrr/README.md b/Checkrr/README.md new file mode 100644 index 0000000..a2e56c1 --- /dev/null +++ b/Checkrr/README.md @@ -0,0 +1,3 @@ +# Checkrr + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Checkrr/status.svg)](https://drone.alexlebens.net/alexlebens/Checkrr) \ No newline at end of file diff --git a/Checkrr/UptimeKuma/docker-1.json b/Checkrr/UptimeKuma/docker-1.json new file mode 100644 index 0000000..b98f34e --- /dev/null +++ b/Checkrr/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Checkrr - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://checkrr.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "checkrr", + "docker_host": 1 +} \ No newline at end of file diff --git a/Checkrr/UptimeKuma/http-1.json b/Checkrr/UptimeKuma/http-1.json new file mode 100644 index 0000000..16663f9 --- /dev/null +++ b/Checkrr/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Checkrr - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://checkrr.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Checkrr/docker-compose.yml b/Checkrr/docker-compose.yml new file mode 100644 index 0000000..f06b553 --- /dev/null +++ b/Checkrr/docker-compose.yml @@ -0,0 +1,56 @@ +services: + checkrr: + command: + - --config-file=/tmp/checkrr.yaml + container_name: checkrr + environment: + - TZ=America/Denver + image: aetaric/checkrr:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.checkrr.entrypoints: websecure + traefik.http.routers.checkrr.rule: Host(`checkrr.alexlebens.net`) + traefik.http.routers.checkrr.service: checkrr + traefik.http.routers.checkrr.middlewares: authentik@file + traefik.http.services.checkrr.loadbalancer.server.port: 8585 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + privileged: true + user: root + volumes: + - checkrr:/tmp + - storage_nfs:/mnt/store + +networks: + traefik: + name: traefik + external: true + +volumes: + checkrr: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/servarr_checkrr + +# storage: +# driver: local +# driver_opts: +# type: cifs +# o: username=aurailious,password=24wrsfxv@$$WRSFXV,file_mode=0777,dir_mode=0777 +# device: "//192.168.1.194/Storage" + + storage_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: :/volume2/Storage \ No newline at end of file diff --git a/CloudflareDDNS/.drone.yml b/CloudflareDDNS/.drone.yml new file mode 100644 index 0000000..d5983a1 --- /dev/null +++ b/CloudflareDDNS/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: CloudflareDDNS + URL: "" + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for CloudflareDDNS failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for CloudflareDDNS failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for CloudflareDDNS succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for CloudflareDDNS failed. + when: + status: + - failure diff --git a/CloudflareDDNS/README.md b/CloudflareDDNS/README.md new file mode 100644 index 0000000..49d8858 --- /dev/null +++ b/CloudflareDDNS/README.md @@ -0,0 +1,3 @@ +# CloudflareDDNS + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/CloudflareDDNS/status.svg)](https://drone.alexlebens.net/alexlebens/CloudflareDDNS) \ No newline at end of file diff --git a/CloudflareDDNS/UptimeKuma/docker-1.json b/CloudflareDDNS/UptimeKuma/docker-1.json new file mode 100644 index 0000000..d0d5a1a --- /dev/null +++ b/CloudflareDDNS/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "CloudflareDDNS - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://www.cloudflare.com", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "cloudflare_ddns", + "docker_host": 1 +} \ No newline at end of file diff --git a/CloudflareDDNS/UptimeKuma/docker-2.json b/CloudflareDDNS/UptimeKuma/docker-2.json new file mode 100644 index 0000000..9520a5d --- /dev/null +++ b/CloudflareDDNS/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "CloudflareDDNS Synology - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://www.cloudflare.com", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "cloudflare_ddns_synology", + "docker_host": 1 +} \ No newline at end of file diff --git a/CloudflareDDNS/docker-compose.yml b/CloudflareDDNS/docker-compose.yml new file mode 100644 index 0000000..e938c7c --- /dev/null +++ b/CloudflareDDNS/docker-compose.yml @@ -0,0 +1,55 @@ +services: + cloudflare_ddns_root: + container_name: cloudflare_ddns_root + environment: + - API_KEY=t48J4O_n5uNYHGXfCHZ1SRbCLwNTZAR6n1sZHj6d + - ZONE=alexlebens.net + - PROXIED=false + image: oznu/cloudflare-ddns:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: unless-stopped + + cloudflare_ddns_wildcard: + container_name: cloudflare_ddns_wildcard + environment: + - API_KEY=VfWsmY_1_hYyT-w4TNwR-3yKp4UvkoY_BQ8KUxJf + - ZONE=alexlebens.net + - SUBDOMAIN=* + - PROXIED=false + image: oznu/cloudflare-ddns:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: unless-stopped + + cloudflare_ddns_synology: + container_name: cloudflare_ddns_synology + environment: + - API_KEY=t48J4O_n5uNYHGXfCHZ1SRbCLwNTZAR6n1sZHj6d + - ZONE=alexlebens.net + - SUBDOMAIN=synology + - PROXIED=false + image: oznu/cloudflare-ddns:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: unless-stopped + +networks: + traefik: + name: traefik + external: true diff --git a/CodeServer/.drone.yml b/CodeServer/.drone.yml new file mode 100644 index 0000000..acfbd0d --- /dev/null +++ b/CodeServer/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: CodeServer + URL: codeserver.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for CodeServer failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for CodeServer failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for CodeServer succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for CodeServer failed. + when: + status: + - failure diff --git a/CodeServer/.env b/CodeServer/.env new file mode 100644 index 0000000..369cb02 --- /dev/null +++ b/CodeServer/.env @@ -0,0 +1,3 @@ +DOCKER_USER=1000 +USER=1000 +HOME=/home/coder \ No newline at end of file diff --git a/CodeServer/README.md b/CodeServer/README.md new file mode 100644 index 0000000..953b11e --- /dev/null +++ b/CodeServer/README.md @@ -0,0 +1,3 @@ +# CodeServer + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/CodeServer/status.svg)](https://drone.alexlebens.net/alexlebens/CodeServer) \ No newline at end of file diff --git a/CodeServer/UptimeKuma/docker-1.json b/CodeServer/UptimeKuma/docker-1.json new file mode 100644 index 0000000..e2c41d2 --- /dev/null +++ b/CodeServer/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "CodeServer - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://codeserver.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "code_server", + "docker_host": 1 +} \ No newline at end of file diff --git a/CodeServer/UptimeKuma/http-1.json b/CodeServer/UptimeKuma/http-1.json new file mode 100644 index 0000000..6448d5a --- /dev/null +++ b/CodeServer/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "CodeServer - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://codeserver.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/CodeServer/docker-compose.yml b/CodeServer/docker-compose.yml new file mode 100644 index 0000000..348bd2e --- /dev/null +++ b/CodeServer/docker-compose.yml @@ -0,0 +1,39 @@ +services: + code_server: + command: --auth none --disable-telemetry + container_name: code_server + env_file: + - .env + image: 'codercom/code-server:latest' + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.code_server.entrypoints: websecure + traefik.http.routers.code_server.rule: Host(`codeserver.alexlebens.net`) + traefik.http.routers.code_server.service: code_server + traefik.http.routers.code_server.middlewares: authentik@file + traefik.http.services.code_server.loadbalancer.server.port: 8080 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + user: "1000:1000" + volumes: + - home:/home/coder/ + +networks: + traefik: + name: traefik + external: true + +volumes: + home: + driver: local + driver_opts: + type: none + o: bind + device: /opt/code_server_home/ diff --git a/CoreDNS/.drone.yml b/CoreDNS/.drone.yml new file mode 100755 index 0000000..0180de1 --- /dev/null +++ b/CoreDNS/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: CoreDNS + URL: "" + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for CoreDNS failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for CoreDNS failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for CoreDNS succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for CoreDNS failed. + when: + status: + - failure diff --git a/CoreDNS/Files/coredns_config/Corefile b/CoreDNS/Files/coredns_config/Corefile new file mode 100755 index 0000000..884f579 --- /dev/null +++ b/CoreDNS/Files/coredns_config/Corefile @@ -0,0 +1,20 @@ +alexlebens.net { + file /etc/coredns/alexlebens.net.zone { + reload 10s + } + bufsize 4096 + log + errors + prometheus :9153 + reload 30s + auto +} + +.:53 { + forward . 172.27.1.3 + bufsize 4096 + log + errors + prometheus :9153 + reload 30s +} \ No newline at end of file diff --git a/CoreDNS/Files/coredns_config/alexlebens.net.zone b/CoreDNS/Files/coredns_config/alexlebens.net.zone new file mode 100755 index 0000000..275b1e4 --- /dev/null +++ b/CoreDNS/Files/coredns_config/alexlebens.net.zone @@ -0,0 +1,89 @@ +$ORIGIN alexlebens.net. +$TTL 86400 +@ IN SOA patryk.ns.cloudflare.com. alexanderlebens.gmail.com. ( + 2021121701 ; serial + 3H ; refresh after 3 hours + 1H ; retry after 1 hour + 1W ; expire after 1 week + 1D) ; minimum TTL of 1 day + + ; Name Server + IN NS patryk.ns.cloudflare.com. + IN NS veda.ns.cloudflare.com. +; IN NS dns1.alexlebens.net. + +; Name Server + IN NS patryk.ns.cloudflare.com. + IN NS veda.ns.cloudflare.com. +; IN NS dns1.alexlebens.net. + +alexlebens.net. IN A 192.168.1.15 +www IN A 192.168.1.15 + +dns1 IN A 192.168.1.15 + +pd04wd IN A 192.168.1.115 +ps03fd IN A 192.168.1.15 +ps08rp IN A 192.168.1.136 + +talos-ibv-goo IN A 192.168.1.16 + +talos-luo-mqa IN A 192.168.1.192 +talos-uk2-e0z IN A 192.168.1.39 +talos-yed-cb6 IN A 192.168.1.126 + +talos IN A 192.168.1.192 +talos IN A 192.168.1.39 +talos IN A 192.168.1.126 + +airgradientbr IN A 192.168.1.100 +hdhr IN A 192.168.1.213 +pibox IN A 192.168.1.40 +pikvm IN A 192.168.1.57 +synology IN A 192.168.1.55 +synologybond IN A 192.168.1.194 +unifi IN A 192.168.1.1 + +traefik-ps08rp IN A 192.168.1.136 +technitium-ps08rp IN A 192.168.1.136 + + +pihole IN A 192.168.1.15 + + +alertmanager IN A 192.168.1.16 +argocd IN A 192.168.1.16 +audiobookshelf IN A 192.168.1.16 +authentik IN A 192.168.1.16 +calibre IN A 192.168.1.16 +codeserver IN A 192.168.1.16 +kubernetes IN A 192.168.1.16 +gitea IN A 192.168.1.16 +grafana IN A 192.168.1.16 +homeassistant IN A 192.168.1.16 +homepage IN A 192.168.1.16 +jellyfin IN A 192.168.1.16 +kargo IN A 192.168.1.16 +minio IN A 192.168.1.16 +minio-console IN A 192.168.1.16 +navidrome IN A 192.168.1.16 +n8n IN A 192.168.1.16 +outline IN A 192.168.1.16 +pgadmin IN A 192.168.1.16 +plex IN A 192.168.1.16 +prometheus IN A 192.168.1.16 +promtail IN A 192.168.1.16 +rss IN A 192.168.1.16 +tautulli IN A 192.168.1.16 +traefik IN A 192.168.1.16 +tubearchivist IN A 192.168.1.16 +vault IN A 192.168.1.16 +vikunja IN A 192.168.1.16 +overseerr IN A 192.168.1.16 +prowlarr IN A 192.168.1.16 +readarr IN A 192.168.1.16 +radarr IN A 192.168.1.16 +sonarr IN A 192.168.1.16 +lidarr IN A 192.168.1.16 +tdaarr IN A 192.168.1.16 +qbittorrent IN A 192.168.1.16 \ No newline at end of file diff --git a/CoreDNS/README.md b/CoreDNS/README.md new file mode 100755 index 0000000..4d54e27 --- /dev/null +++ b/CoreDNS/README.md @@ -0,0 +1,3 @@ +# CoreDNS + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/CoreDNS/status.svg)](https://drone.alexlebens.net/alexlebens/CoreDNS) \ No newline at end of file diff --git a/CoreDNS/UptimeKuma/docker-1.json b/CoreDNS/UptimeKuma/docker-1.json new file mode 100755 index 0000000..63cfee3 --- /dev/null +++ b/CoreDNS/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "CoreDNS - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "coredns", + "docker_host": 1 +} \ No newline at end of file diff --git a/CoreDNS/docker-compose.yml b/CoreDNS/docker-compose.yml new file mode 100755 index 0000000..a96a065 --- /dev/null +++ b/CoreDNS/docker-compose.yml @@ -0,0 +1,33 @@ +services: + coredns: + command: "-conf /etc/coredns/Corefile" + container_name: coredns + image: coredns/coredns:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.2 + ports: + - 192.168.1.15:53:53/tcp + - 192.168.1.15:53:53/udp + restart: always + privileged: true + volumes: + - config:/etc/coredns + +networks: + traefik: + name: traefik + external: true + +volumes: + config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/coredns_config diff --git a/DeploymentScripts/.drone.yml b/DeploymentScripts/.drone.yml new file mode 100644 index 0000000..e1fcfb1 --- /dev/null +++ b/DeploymentScripts/.drone.yml @@ -0,0 +1,41 @@ +--- +kind: pipeline +type: docker +name: trigger + +steps: + - name: trigger + image: plugins/downstream + settings: + server: https://drone.alexlebens.net + token: + from_secret: drone_token + fork: true + repositories: + - alexlebens/DroneImage + + - name: Nofification > Discord | Trigger - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Trigger executed from Deployment Scripts to DroneImage + when: + status: + - sucess + + - name: Nofification > Discord | Trigger - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Trigger failed from Deployment Scripts to DroneImage + when: + status: + - failure \ No newline at end of file diff --git a/DeploymentScripts/configuration.sh b/DeploymentScripts/configuration.sh new file mode 100644 index 0000000..404b0e2 --- /dev/null +++ b/DeploymentScripts/configuration.sh @@ -0,0 +1,111 @@ +#!/usr/bin/env bash +#set -e + + +echo ">>>> Configuration" +WORKINGDIR=$(pwd) + +echo ">>> Apply" + +echo ">> Storage" + +PATH_FAILURE=true +PATHS=$(yq '.volumes[].driver_opts.device | select(. > "/var*")' docker-compose.yml) + +for dir in $PATHS; do + if ! ssh -q drone@$HOST_IP "sudo test -d $dir"; then + echo "Missing path: $dir" + ssh -q drone@$HOST_IP "sudo test -d $dir" + + ssh drone@$HOST_IP "sudo mkdir -p $dir" + ssh drone@$HOST_IP "sudo chown alexlebens:alexlebens $dir" + + if ! ssh -q drone@$HOST_IP "sudo test -d $dir"; then + echo "Failed to create path: $dir" + ssh -q drone@$HOST_IP "sudo test -d $dir" + else + echo "Path created: $dir" + PATH_FAILURE=false + fi + else + echo "Path found: $dir" + PATH_FAILURE=false + fi +done + + +echo ">>> Checks" + +echo ">> DNS" + +URL_CHECK=true +URL_FAILURE=false + +if [ -n "$URL" ]; then + for i in $URL; do + if [ "$(dig +short -t a $i)" ]; then + echo "URL found: $i" + URL_CHECK=false + else + echo "URL not found: $i" + URL_FAILURE=true + fi + done +else + echo "No URL set" + URL_CHECK=false +fi + + +echo ">> Uptime" + +cd UptimeKuma + +UPTIME_CHECK=true +UPTIME_FAILURE=false + +TOKEN=$(curl -X 'POST' "${UPTIMEKUMA_URL}/login/access-token" -H 'accept: application/json' -H 'Content-Type: application/x-www-form-urlencoded' -d "grant_type=&username=${UPTIMEKUMA_NAME}&password=${UPTIMEKUMA_PASSWORD}&scope=&client_id=&client_secret=" | jq -r ".access_token") +MONITORS=$(curl -X 'GET' "${UPTIMEKUMA_URL}/monitors" -H 'Accept: application/json' -H "Authorization: Bearer ${TOKEN}" -s | jq --arg PACKAGE $PACKAGE '[ .monitors[] | select( .name | contains($PACKAGE))]') + +echo "Found the following monitors:" +echo "$MONITORS" | jq -r '.[].name' + +for file in *; do + IFS_HOLD=$IFS + IFS=$'\n' + + for type in $(echo "$MONITORS" | jq -r '.[].name'); do + MONITOR_NAME=$(cat $file | jq -r '.name') + + echo "Comparing '$MONITOR_NAME' and '$type'" + if [ "$MONITOR_NAME" == $type ]; then + echo "Found monitor for $file" + UPTIME_CHECK=false + continue 2 + fi + done + + IFS=$IFS_HOLD + + echo "Missing monitor for $file" + RESPONSE=$(curl -X POST "${UPTIMEKUMA_URL}/monitors" -H 'accept: application/json' -H "Authorization: Bearer ${TOKEN}" -H 'Content-Type: application/json' -d "$(cat $file)" -s) + RESPONSE_MESSAGE=$(echo $RESPONSE | jq -r '.msg') + + if [ "$RESPONSE_MESSAGE" == "Added Successfully." ]; then + echo "Created monitor for $file" + UPTIME_CHECK=false + else + echo "Failed creating monitor for $file: $RESPONSE_MESSAGE" + echo "$RESPONSE" + UPTIME_FAILURE=true + fi +done +cd $WORKINGDIR + + +echo ">>> Exit" + +if $URL_CHECK || $URL_FAILURE || $UPTIME_CHECK || $UPTIME_FAILURE; then + echo "Exiting with Errors" + echo "URL_CHECK: $URL_CHECK || URL_FAILURE: $URL_FAILURE || UPTIME_CHECK: $UPTIME_CHECK || UPTIME_FAILURE: $UPTIME_FAILURE" +fi \ No newline at end of file diff --git a/DeploymentScripts/deploy.sh b/DeploymentScripts/deploy.sh new file mode 100644 index 0000000..31533ea --- /dev/null +++ b/DeploymentScripts/deploy.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +set -e +sleep 5 + + +echo ">>>> Deploy" +WORKINGDIR=$(pwd) + +echo ">>> Files" + +if test -d "Files"; then + echo "Found files to copy" + cd Files + + for dir in *; do + echo "Copying files for $dir" + FILE_PATH="/var/lib/docker/volumes/partition/" + + echo "Copying directory '$dir' to $FILE_PATH" + rsync --rsync-path="sudo rsync" --progress -aiv $dir drone@$HOST_IP:$FILE_PATH + + ssh drone@$HOST_IP "sudo chown -R alexlebens:alexlebens $FILE_PATH/$dir" + # ssh drone@$HOST_IP "sudo chmod -R 600 $FILE_PATH/$dir" + done + + echo "Finished copying files" + cd $WORKINGDIR +else + echo "No files to copy" +fi + + +echo ">>> Compose" + +if ! test -f "./docker-compose.yml" +then + echo ">> ERROR: No docker-compose.yml in directory" + continue +fi + +echo ">> Deploy" + +docker compose --project-name $(echo $PACKAGE | tr "[:upper:]" "[:lower:]") stop +sleep 10 +docker compose --project-name $(echo $PACKAGE | tr "[:upper:]" "[:lower:]") up --wait +sleep 1 \ No newline at end of file diff --git a/DeploymentScripts/tests.sh b/DeploymentScripts/tests.sh new file mode 100644 index 0000000..c9b0d72 --- /dev/null +++ b/DeploymentScripts/tests.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +set -e +sleep 5 + + +echo ">>>> Tests" + +echo ">>> Syntax Check" + +if ! test -f "./docker-compose.yml" +then + echo ">> ERROR: No docker-compose.yml in directory" + continue +fi + +echo ">> Syntax check" + +docker compose convert -q + +echo "Passed syntax check" diff --git a/DockerRegistry/.drone.yml b/DockerRegistry/.drone.yml new file mode 100644 index 0000000..081bd92 --- /dev/null +++ b/DockerRegistry/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: DockerRegistry + URL: "" + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for DockerRegistry failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for DockerRegistry failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for DockerRegistry succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for DockerRegistry failed. + when: + status: + - failure diff --git a/DockerRegistry/.env b/DockerRegistry/.env new file mode 100644 index 0000000..848f214 --- /dev/null +++ b/DockerRegistry/.env @@ -0,0 +1,5 @@ +# REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt +# REGISTRY_HTTP_TLS_KEY=/certs/registry.key +# REGISTRY_AUTH=htpasswd +# REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd +# REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm \ No newline at end of file diff --git a/DockerRegistry/README.md b/DockerRegistry/README.md new file mode 100644 index 0000000..84acc57 --- /dev/null +++ b/DockerRegistry/README.md @@ -0,0 +1,3 @@ +# DockerRegistry + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/DockerRegistry/status.svg)](https://drone.alexlebens.net/alexlebens/DockerRegistry) \ No newline at end of file diff --git a/DockerRegistry/UptimeKuma/docker-1.json b/DockerRegistry/UptimeKuma/docker-1.json new file mode 100644 index 0000000..562680d --- /dev/null +++ b/DockerRegistry/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Docker Registry - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://ps03fd.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "docker_registry", + "docker_host": 1 +} \ No newline at end of file diff --git a/DockerRegistry/docker-compose.yml b/DockerRegistry/docker-compose.yml new file mode 100644 index 0000000..f52be12 --- /dev/null +++ b/DockerRegistry/docker-compose.yml @@ -0,0 +1,33 @@ +services: + registry: + container_name: docker_registry + env_file: + - .env + image: registry:2 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + ports: + - 5000:5000 + restart: always + privileged: true + user: root + volumes: + - registry:/var/lib/registry + +networks: + traefik: + name: traefik + external: true + +volumes: + registry: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/docker_registry diff --git a/DroneCI/.drone.yml b/DroneCI/.drone.yml new file mode 100644 index 0000000..d5f5639 --- /dev/null +++ b/DroneCI/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: DroneCI + URL: drone.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for DroneCI failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for DroneCI failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for DroneCI succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for DroneCI failed. + when: + status: + - failure diff --git a/DroneCI/.env b/DroneCI/.env new file mode 100644 index 0000000..0cb0024 --- /dev/null +++ b/DroneCI/.env @@ -0,0 +1,7 @@ +DRONE_GITEA_SERVER=https://gitea.alexlebens.net +DRONE_GITEA_CLIENT_ID=7c34bd96-3dd6-4d29-aef8-193df1fc9d71 +DRONE_GITEA_CLIENT_SECRET=gto_ylpzlyzggy3cd6lrynbmcyzy6mgevruulaktwckyvxq3q5i37xea +DRONE_RPC_SECRET=c4060eb0bb4e7ab9f5cdeb5fa87698f7 +DRONE_SERVER_HOST=https://drone.alexlebens.net +DRONE_SERVER_PROTO=https +DRONE_USER_CREATE=username:alexlebens,admin:true \ No newline at end of file diff --git a/DroneCI/.run.env b/DroneCI/.run.env new file mode 100644 index 0000000..3519938 --- /dev/null +++ b/DroneCI/.run.env @@ -0,0 +1,4 @@ +DRONE_RPC_PROTO: http +DRONE_RPC_HOST: 172.22.0.11 +DRONE_RPC_SECRET: c4060eb0bb4e7ab9f5cdeb5fa87698f7 +DRONE_RUNNER_CAPACITY: 2 \ No newline at end of file diff --git a/DroneCI/README.md b/DroneCI/README.md new file mode 100644 index 0000000..9301600 --- /dev/null +++ b/DroneCI/README.md @@ -0,0 +1,3 @@ +# DroneCI + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/DroneCI/status.svg)](https://drone.alexlebens.net/alexlebens/DroneCI) \ No newline at end of file diff --git a/DroneCI/UptimeKuma/docker-1.json b/DroneCI/UptimeKuma/docker-1.json new file mode 100644 index 0000000..9c4811f --- /dev/null +++ b/DroneCI/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "DroneCI - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://drone.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "drone", + "docker_host": 1 +} \ No newline at end of file diff --git a/DroneCI/UptimeKuma/docker-2.json b/DroneCI/UptimeKuma/docker-2.json new file mode 100644 index 0000000..2f19824 --- /dev/null +++ b/DroneCI/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "DroneCI Runner 1 - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://drone.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "drone_runner_1", + "docker_host": 1 +} \ No newline at end of file diff --git a/DroneCI/UptimeKuma/docker-3.json b/DroneCI/UptimeKuma/docker-3.json new file mode 100644 index 0000000..83c086f --- /dev/null +++ b/DroneCI/UptimeKuma/docker-3.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "DroneCI Runner 2 - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://drone.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "drone_runner_2", + "docker_host": 1 +} \ No newline at end of file diff --git a/DroneCI/UptimeKuma/http-1.json b/DroneCI/UptimeKuma/http-1.json new file mode 100644 index 0000000..5e61462 --- /dev/null +++ b/DroneCI/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "DroneCI - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://drone.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/DroneCI/docker-compose.yml b/DroneCI/docker-compose.yml new file mode 100644 index 0000000..93bef27 --- /dev/null +++ b/DroneCI/docker-compose.yml @@ -0,0 +1,91 @@ +services: + drone: + container_name: drone + env_file: + - .env + image: drone/drone:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.drone.entrypoints: websecure + traefik.http.routers.drone.rule: Host(`drone.alexlebens.net`) + traefik.http.routers.drone.service: drone + traefik.http.services.drone.loadbalancer.server.port: 80 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + drone: + ipv4_address: 172.22.0.11 + traefik: null + restart: always + volumes: + - drone_data:/data + + drone_runner_1: + container_name: drone_runner_1 + depends_on: + - drone + env_file: + - .run.env + environment: + DRONE_RUNNER_NAME: drone_runner_1 + DRONE_RUNNER_NETWORKS: traefik + image: drone/drone-runner-docker:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + drone: + ipv4_address: 172.22.0.12 + privileged: true + restart: always + volumes: + - /var/run/docker.sock:/var/run/docker.sock + + drone_runner_2: + container_name: drone_runner_2 + depends_on: + - drone + env_file: + - .run.env + environment: + DRONE_RUNNER_NAME: drone_runner_2 + DRONE_RUNNER_NETWORKS: traefik + image: drone/drone-runner-docker:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + drone: + ipv4_address: 172.22.0.13 + privileged: true + restart: always + volumes: + - /var/run/docker.sock:/var/run/docker.sock + +networks: + traefik: + name: traefik + external: true + + drone: + name: drone + external: false + ipam: + config: + - subnet: 172.22.0.0/16 + +volumes: + drone_data: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/drone_data diff --git a/DroneImage/.drone.yml b/DroneImage/.drone.yml new file mode 100644 index 0000000..28229f2 --- /dev/null +++ b/DroneImage/.drone.yml @@ -0,0 +1,63 @@ +--- +kind: pipeline +type: docker +name: deploy_image + +steps: + - name: pull-scripts + image: alpine/git + commands: + - git clone https://gitea.alexlebens.net/alexlebens/DeploymentScripts.git + + - name: docker-cron + image: plugins/docker + settings: + repo: ps03fd.alexlebens.net:5000/droneimage + registry: ps03fd.alexlebens.net:5000 + insecure: true + dockerfile: ./Dockerfile + tags: latest + when: + event: + - cron + cron: + include: + - nightly + + - name: docker-main + image: plugins/docker + settings: + repo: ps03fd.alexlebens.net:5000/droneimage + registry: ps03fd.alexlebens.net:5000 + insecure: true + dockerfile: ./Dockerfile + tags: latest + when: + branch: + - main + + - name: Nofification > Discord | Build - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Succeeded building Drone Image + when: + status: + - sucess + + - name: Nofification > Discord | Build - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Failed building Drone Image + when: + status: + - failure diff --git a/DroneImage/Dockerfile b/DroneImage/Dockerfile new file mode 100644 index 0000000..71d73c9 --- /dev/null +++ b/DroneImage/Dockerfile @@ -0,0 +1,20 @@ +FROM alpine:latest + +# Install base packages +RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories +RUN apk add --update --no-cache \ + bash \ + git \ + openssh \ + curl \ + docker \ + docker-cli \ + docker-cli-compose \ + bind-tools \ + yq \ + jq \ + rsync + +# Install deployment scripts +COPY ./DeploymentScripts /scripts +RUN chmod -R +x /scripts \ No newline at end of file diff --git a/DroneImage/README.md b/DroneImage/README.md new file mode 100644 index 0000000..2ea6b7c --- /dev/null +++ b/DroneImage/README.md @@ -0,0 +1,3 @@ +# DroneImage + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/DroneImage/status.svg)](https://drone.alexlebens.net/alexlebens/DroneImage) \ No newline at end of file diff --git a/Firefly/.drone.yml b/Firefly/.drone.yml new file mode 100644 index 0000000..895c920 --- /dev/null +++ b/Firefly/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Firefly + URL: firefly.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Firefly failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Firefly failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Firefly succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Firefly failed. + when: + status: + - failure diff --git a/Firefly/.env b/Firefly/.env new file mode 100644 index 0000000..3d76bfb --- /dev/null +++ b/Firefly/.env @@ -0,0 +1,142 @@ +TZ=America/Denver + +# App settings +SITE_OWNER=alexanderlebens@gmail.com +APP_ENV=local +APP_DEBUG=false +APP_KEY=SomeRandomStringOf32CharsExactly +APP_URL=https://firefly.alexlebens.net +APP_LOG_LEVEL=notice +AUDIT_LOG_LEVEL=info + +DEFAULT_LANGUAGE=en_US +DEFAULT_LOCALE=equal +TRUSTED_PROXIES=** +LOG_CHANNEL=stack + +# Used when logging to papertrail: +PAPERTRAIL_HOST= +PAPERTRAIL_PORT= + +# Database credentials +DB_CONNECTION=mysql +DB_HOST=172.27.1.55 +DB_PORT=3306 +DB_DATABASE=firefly +DB_USERNAME=firefly +DB_PASSWORD=secret_firefly_password + +MYSQL_RANDOM_ROOT_PASSWORD=yes +MYSQL_USER=firefly +MYSQL_PASSWORD=secret_firefly_password +MYSQL_DATABASE=firefly + +MYSQL_USE_SSL=false +MYSQL_SSL_VERIFY_SERVER_CERT=true +MYSQL_SSL_CAPATH=/etc/ssl/certs/ +MYSQL_SSL_CA= +MYSQL_SSL_CERT= +MYSQL_SSL_KEY= +MYSQL_SSL_CIPHER= + +# Cache +CACHE_DRIVER=file +SESSION_DRIVER=file + +REDIS_SCHEME=tcp +REDIS_PATH= +REDIS_HOST= +REDIS_PORT= +REDIS_USERNAME= +REDIS_PASSWORD=. +REDIS_DB="0" +REDIS_CACHE_DB="1" + +# Cookie settings +COOKIE_PATH="/" +COOKIE_DOMAIN= +COOKIE_SECURE=false +COOKIE_SAMESITE=lax + +# Mail +MAIL_MAILER=log +MAIL_HOST=null +MAIL_PORT=2525 +MAIL_FROM=changeme@example.com +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null + +# Other mail drivers: +MAILGUN_DOMAIN= +MAILGUN_SECRET= +MAILGUN_ENDPOINT=api.mailgun.net + +MANDRILL_SECRET= +SPARKPOST_SECRET= + +# Firefly III can send you the following messages. +SEND_REGISTRATION_MAIL=true +SEND_ERROR_MESSAGE=true +SEND_LOGIN_NEW_IP_WARNING=true + +# These messages contain (sensitive) transaction information: +SEND_REPORT_JOURNALS=true + +# Set this value to true if you want to set the location +ENABLE_EXTERNAL_MAP=false + +# The map will default to this location: +MAP_DEFAULT_LAT=51.983333 +MAP_DEFAULT_LONG=5.916667 +MAP_DEFAULT_ZOOM=6 + +# Firefly III authentication settings +# Firefly III supports a few authentication methods: +# - 'web' (default, uses built in DB) +# - 'remote_user_guard' for Authelia etc +# https://docs.firefly-iii.org/advanced-installation/authentication +AUTHENTICATION_GUARD=web +AUTHENTICATION_GUARD_HEADER=REMOTE_USER +AUTHENTICATION_GUARD_EMAIL= +CUSTOM_LOGOUT_URL= + +# You can disable the X-Frame-Options header if it interferes with tools like Organizr. +DISABLE_FRAME_HEADER=false + +# You can disable the Content Security Policy header when you're using an ancient browser +DISABLE_CSP_HEADER=false + +# If you wish to track your own behavior over Firefly III, set valid analytics tracker information here. +TRACKER_SITE_ID= +TRACKER_URL= + +# Firefly III supports webhooks. These are security sensitive and must be enabled manually first. +ALLOW_WEBHOOKS=false + +# The static cron job token can be useful when you use Docker and wish to manage cron jobs. +STATIC_CRON_TOKEN= + +# You can fine tune the start-up of a Docker container by editing these environment variables. +DKR_BUILD_LOCALE=false +DKR_CHECK_SQLITE=true +DKR_RUN_MIGRATION=true +DKR_RUN_UPGRADE=true +DKR_RUN_VERIFY=true +DKR_RUN_REPORT=true +DKR_RUN_PASSPORT_INSTALL=true + +# Leave the following configuration vars as is. +# Unless you like to tinker and know what you're doing. +APP_NAME=FireflyIII +BROADCAST_DRIVER=log +QUEUE_DRIVER=sync +CACHE_PREFIX=firefly +PUSHER_KEY= +IPINFO_TOKEN= +PUSHER_SECRET= +PUSHER_ID= +DEMO_USERNAME= +DEMO_PASSWORD= +IS_HEROKU=false +FIREFLY_III_LAYOUT=v1 diff --git a/Firefly/README.md b/Firefly/README.md new file mode 100644 index 0000000..70644e7 --- /dev/null +++ b/Firefly/README.md @@ -0,0 +1,3 @@ +# Firefly + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Firefly/status.svg)](https://drone.alexlebens.net/alexlebens/Firefly) \ No newline at end of file diff --git a/Firefly/UptimeKuma/docker-1.json b/Firefly/UptimeKuma/docker-1.json new file mode 100644 index 0000000..43373e1 --- /dev/null +++ b/Firefly/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Firefly MariaDB - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://firefly.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "firefly_mariadb", + "docker_host": 1 +} \ No newline at end of file diff --git a/Firefly/UptimeKuma/docker-2.json b/Firefly/UptimeKuma/docker-2.json new file mode 100644 index 0000000..ccdf6aa --- /dev/null +++ b/Firefly/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Firefly Server - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://firefly.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "firefly_server", + "docker_host": 1 +} \ No newline at end of file diff --git a/Firefly/UptimeKuma/docker-3.json b/Firefly/UptimeKuma/docker-3.json new file mode 100644 index 0000000..5c23833 --- /dev/null +++ b/Firefly/UptimeKuma/docker-3.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Firefly Plaid - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://firefly.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "firefly_plaid", + "docker_host": 1 +} \ No newline at end of file diff --git a/Firefly/UptimeKuma/http-1.json b/Firefly/UptimeKuma/http-1.json new file mode 100644 index 0000000..5d26f02 --- /dev/null +++ b/Firefly/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Firefly - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://firefly.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Firefly/docker-compose.yml b/Firefly/docker-compose.yml new file mode 100644 index 0000000..05ad167 --- /dev/null +++ b/Firefly/docker-compose.yml @@ -0,0 +1,87 @@ +services: + mariadb: + container_name: firefly_mariadb + env_file: + - .env + image: mariadb + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.55 + restart: always + volumes: + - db:/var/lib/mysql + + server: + container_name: firefly_server + depends_on: + - 'mariadb' + env_file: + - .env + image: fireflyiii/core:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.firefly.entrypoints: websecure + traefik.http.routers.firefly.rule: Host(`firefly.alexlebens.net`) + traefik.http.routers.firefly.service: firefly + traefik.http.services.firefly.loadbalancer.server.port: 8080 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.56 + restart: always + volumes: + - upload:/var/www/html/storage/upload + + plaid_connector: + container_name: firefly_plaid + depends_on: + - 'server' + image: registry.gitlab.com/georgehahn/firefly-plaid-connector:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.57 + restart: always + volumes: + - config:/config + +networks: + traefik: + name: traefik + external: true + +volumes: + db: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/firefly_db + + upload: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/firefly_upload + + config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/firefly_config diff --git a/Gitea/.drone.yml b/Gitea/.drone.yml new file mode 100644 index 0000000..891e2d5 --- /dev/null +++ b/Gitea/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Gitea + URL: gitea.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Gitea failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Gitea failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Gitea succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Gitea failed. + when: + status: + - failure diff --git a/Gitea/.env b/Gitea/.env new file mode 100644 index 0000000..42d27fe --- /dev/null +++ b/Gitea/.env @@ -0,0 +1,12 @@ +POSTGRES_USER=gitea +POSTGRES_PASSWORD=gitea +POSTGRES_DB=gitea + +USER_UID=1000 +USER_GID=1000 +GITEA__database__DB_TYPE=postgres +GITEA__database__HOST=gitea_postgres:5432 +GITEA__database__NAME=gitea +GITEA__database__USER=gitea +GITEA__database__PASSWD=gitea +GITEA__webhook__ALLOWED_HOST_LIST="*.alexlebens.net, 192.168.1.*, 172.27.*" \ No newline at end of file diff --git a/Gitea/README.md b/Gitea/README.md new file mode 100644 index 0000000..00d9a6c --- /dev/null +++ b/Gitea/README.md @@ -0,0 +1,3 @@ +# Gitea + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Gitea/status.svg)](https://drone.alexlebens.net/alexlebens/Gitea) \ No newline at end of file diff --git a/Gitea/UptimeKuma/docker-1.json b/Gitea/UptimeKuma/docker-1.json new file mode 100644 index 0000000..46cbc6d --- /dev/null +++ b/Gitea/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Gitea - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://gitea.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "gitea", + "docker_host": 1 +} \ No newline at end of file diff --git a/Gitea/UptimeKuma/docker-2.json b/Gitea/UptimeKuma/docker-2.json new file mode 100644 index 0000000..230b375 --- /dev/null +++ b/Gitea/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Gitea Postgres - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://gitea.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "gitea_postgres", + "docker_host": 1 +} \ No newline at end of file diff --git a/Gitea/UptimeKuma/http-1.json b/Gitea/UptimeKuma/http-1.json new file mode 100644 index 0000000..8f8efc9 --- /dev/null +++ b/Gitea/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Gitea - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://gitea.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Gitea/docker-compose.yml b/Gitea/docker-compose.yml new file mode 100644 index 0000000..340813f --- /dev/null +++ b/Gitea/docker-compose.yml @@ -0,0 +1,65 @@ +services: + postgres: + container_name: gitea_postgres + env_file: + - .env + image: postgres:14 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + volumes: + - postgressql:/var/lib/postgresql/data + + gitea: + container_name: gitea + depends_on: + - postgres + env_file: + - .env + extra_hosts: + - keycloak.alexlebens.net:192.168.1.15 + image: gitea/gitea:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.gitea.entrypoints: websecure + traefik.http.routers.gitea.rule: Host(`gitea-old.alexlebens.net`) + traefik.http.routers.gitea.service: gitea + traefik.http.services.gitea.loadbalancer.server.port: 3000 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + volumes: + - gitea_data:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + +networks: + traefik: + name: traefik + external: true + +volumes: + postgressql: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/gitea_postgressql + + gitea_data: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/gitea_data diff --git a/Grafana/.drone.yml b/Grafana/.drone.yml new file mode 100644 index 0000000..855c126 --- /dev/null +++ b/Grafana/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Grafana + URL: grafana.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Grafana failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Grafana failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Grafana succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Grafana failed. + when: + status: + - failure diff --git a/Grafana/.env b/Grafana/.env new file mode 100644 index 0000000..324ebf8 --- /dev/null +++ b/Grafana/.env @@ -0,0 +1,31 @@ +PATH='/usr/share/grafana/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' + +GF_PATHS_DATA='/var/lib/grafana' +GF_PATHS_LOGS='/var/log/grafana' +GF_PATHS_PLUGINS='/var/lib/grafana/plugins' +GF_PATHS_PROVISIONING='/etc/grafana/provisioning' + +GF_SERVER_ROOT_URL='alexlebens.net' +GF_SERVER_ROOT_URL='https://grafana.alexlebens.net' + +GF_USERS_AUTO_ASSIGN_ORG='true' +GF_USERS_AUTO_ASSIGN_ORG_ID='1' + +GF_AUTH_LOGIN_COOKIE_NAME='grafana_session' +GF_AUTH_DISABLE_LOGIN_FORM='true' +GF_AUTH_OAUTH_AUTO_LOGIN='false' +GF_AUTH_OAUTH_ALLOW_INSECURE_EMAIL_LOOKUP='true' + +GF_AUTH_GENERIC_OAUTH_ENABLED='true' +GF_AUTH_GENERIC_OAUTH_NAME='Authentik' +GF_AUTH_GENERIC_OAUTH_CLIENT_ID='7811f038dc09d084b36c253d92d4164d1b9a2096' +GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET='dbcef3c8baaf0fb038e2780ccbb2fc606d9a4f3ac5d55877b6d22d608ec995d300d5c269c51398063babdf226437caf87e345da87bc22f7cbc3d1d5c4f573b67' +GF_AUTH_GENERIC_OAUTH_SCOPES='openid email profile' +GF_AUTH_GENERIC_OAUTH_AUTH_URL='https://authentik.alexlebens.net/application/o/authorize/' +GF_AUTH_GENERIC_OAUTH_TOKEN_URL='https://authentik.alexlebens.net/application/o/token/' +GF_AUTH_GENERIC_OAUTH_API_URL='https://authentik.alexlebens.net/application/o/userinfo/' +GF_AUTH_SIGNOUT_REDIRECT_URL='https://authentik.alexlebens.net/application/o/grafana/end-session/' +GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_PATH="contains(realm_access.roles[*], 'Grafana Admins') && 'Admin' || contains(realm_access.roles[*], 'Grafana Editors') && 'Editor' || 'Viewer'" + + +GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS='grafana-clock-panel,grafana-worldmap-panel,grafana-simple-json-datasource,grafana-piechart-panel' \ No newline at end of file diff --git a/Grafana/README.md b/Grafana/README.md new file mode 100644 index 0000000..94cfd64 --- /dev/null +++ b/Grafana/README.md @@ -0,0 +1,3 @@ +# Grafana + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Grafana/status.svg)](https://drone.alexlebens.net/alexlebens/Grafana) \ No newline at end of file diff --git a/Grafana/UptimeKuma/docker-1.json b/Grafana/UptimeKuma/docker-1.json new file mode 100644 index 0000000..537825e --- /dev/null +++ b/Grafana/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Grafana - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://grafana.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "grafana", + "docker_host": 1 +} \ No newline at end of file diff --git a/Grafana/UptimeKuma/http-1.json b/Grafana/UptimeKuma/http-1.json new file mode 100644 index 0000000..ad25635 --- /dev/null +++ b/Grafana/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Grafana - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://grafana.alexlebens.net/login", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Grafana/docker-compose.yml b/Grafana/docker-compose.yml new file mode 100644 index 0000000..83f5401 --- /dev/null +++ b/Grafana/docker-compose.yml @@ -0,0 +1,36 @@ +services: + grafana: + container_name: grafana + env_file: + - .env + image: grafana/grafana-oss:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.grafana.entrypoints: websecure + traefik.http.routers.grafana.rule: Host(`grafana.alexlebens.net`) + traefik.http.routers.grafana.service: grafana + traefik.http.services.grafana.loadbalancer.server.port: 3000 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + volumes: + - lib:/var/lib/grafana + +networks: + traefik: + name: traefik + external: true + +volumes: + lib: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/grafana_lib diff --git a/HomeAssistant/.drone.yml b/HomeAssistant/.drone.yml new file mode 100644 index 0000000..70772ec --- /dev/null +++ b/HomeAssistant/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: HomeAssistant + URL: homeassistant.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for HomeAssistant failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for HomeAssistant failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for HomeAssistant succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for HomeAssistant failed. + when: + status: + - failure diff --git a/HomeAssistant/Files/homeassistant_config/automations.yaml b/HomeAssistant/Files/homeassistant_config/automations.yaml new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/HomeAssistant/Files/homeassistant_config/automations.yaml @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/HomeAssistant/Files/homeassistant_config/configuration.yaml b/HomeAssistant/Files/homeassistant_config/configuration.yaml new file mode 100644 index 0000000..be24896 --- /dev/null +++ b/HomeAssistant/Files/homeassistant_config/configuration.yaml @@ -0,0 +1,18 @@ +# Loads default set of integrations. Do not remove. +default_config: + +# Text to speech +tts: + - platform: google_translate + +automation: !include automations.yaml +script: !include scripts.yaml +scene: !include scenes.yaml + +http: + server_port: 8123 + use_x_forwarded_for: true + trusted_proxies: + - 172.27.0.0/16 + ip_ban_enabled: false + login_attempts_threshold: 5 \ No newline at end of file diff --git a/HomeAssistant/Files/homeassistant_config/scenes.yaml b/HomeAssistant/Files/homeassistant_config/scenes.yaml new file mode 100644 index 0000000..e69de29 diff --git a/HomeAssistant/Files/homeassistant_config/scripts.yaml b/HomeAssistant/Files/homeassistant_config/scripts.yaml new file mode 100644 index 0000000..e69de29 diff --git a/HomeAssistant/Files/homeassistant_config/secrets.yaml b/HomeAssistant/Files/homeassistant_config/secrets.yaml new file mode 100644 index 0000000..c5b900c --- /dev/null +++ b/HomeAssistant/Files/homeassistant_config/secrets.yaml @@ -0,0 +1,4 @@ + +# Use this file to store secrets like usernames and passwords. +# Learn more at https://www.home-assistant.io/docs/configuration/secrets/ +some_password: welcome diff --git a/HomeAssistant/README.md b/HomeAssistant/README.md new file mode 100644 index 0000000..a018882 --- /dev/null +++ b/HomeAssistant/README.md @@ -0,0 +1,3 @@ +# HomeAssistant + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/HomeAssistant/status.svg)](https://drone.alexlebens.net/alexlebens/HomeAssistant) \ No newline at end of file diff --git a/HomeAssistant/UptimeKuma/docker-1.json b/HomeAssistant/UptimeKuma/docker-1.json new file mode 100644 index 0000000..39cf268 --- /dev/null +++ b/HomeAssistant/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "HomeAssistant - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://homeassistant.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "homeassistant", + "docker_host": 1 +} \ No newline at end of file diff --git a/HomeAssistant/UptimeKuma/http-1.json b/HomeAssistant/UptimeKuma/http-1.json new file mode 100644 index 0000000..2fbb5f6 --- /dev/null +++ b/HomeAssistant/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "HomeAssistant - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://homeassistant.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/HomeAssistant/docker-compose.yml b/HomeAssistant/docker-compose.yml new file mode 100644 index 0000000..625631e --- /dev/null +++ b/HomeAssistant/docker-compose.yml @@ -0,0 +1,40 @@ +services: + homeassistant: + container_name: homeassistant + environment: + PUID: 1000 + PGID: 1000 + TZ: America/Denver + UMASK_SET: 22 + image: ghcr.io/home-assistant/home-assistant:stable + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.homeassistant.entrypoints: websecure + traefik.http.routers.homeassistant.rule: Host(`homeassistant.alexlebens.net`) + traefik.http.routers.homeassistant.service: homeassistant + traefik.http.services.homeassistant.loadbalancer.server.port: 8123 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: unless-stopped + volumes: + - config:/config + - /etc/localtime:/etc/localtime:ro + +networks: + traefik: + name: traefik + external: true + +volumes: + config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/homeassistant_config \ No newline at end of file diff --git a/Homepage/.drone.yml b/Homepage/.drone.yml new file mode 100644 index 0000000..12370b9 --- /dev/null +++ b/Homepage/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Homepage + URL: homepage.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Homepage failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Homepage failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Homepage succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Homepage failed. + when: + status: + - failure diff --git a/Homepage/Files/homepage_config/bookmarks.yaml b/Homepage/Files/homepage_config/bookmarks.yaml new file mode 100644 index 0000000..ac08f2e --- /dev/null +++ b/Homepage/Files/homepage_config/bookmarks.yaml @@ -0,0 +1,40 @@ +--- +# For configuration options and examples, please see: +# https://gethomepage.dev/en/configs/bookmarks + +- External Services: + - Digital Ocean: + - abbr: DO + href: https://cloud.digitalocean.com/projects/4c2f0ee4-0845-46f0-83a7-ec1646813cbf/resources?i=b869cc + - Cloudflare: + - abbr: CF + href: https://dash.cloudflare.com/b76e303258b84076ee01fd0f515c0768 + - Pushover: + - abbr: PO + href: https://pushover.net + - Dashboard Icons: + - abbr: DI + href: https://github.com/walkxcode/dashboard-icons/tree/main/png + - Digital Ocean: + - abbr: DO + href: https://cloud.digitalocean.com/projects/4c2f0ee4-0845-46f0-83a7-ec1646813cbf/resources?i=b869cc + +- Trackers: + - Torrentleech: + - abbr: TL + href: https://www.torrentleech.org + - Avistaz: + - abbr: AV + href: https://avistaz.to + - Cinemaz: + - abbr: CM + href: https://cinemaz.to + - Cathode Ray Tube: + - abbr: CRT + href: https://www.cathode-ray.tube + - Alpha Ratio: + - abbr: AL + href: https://alpharatio.cc/ + - MV Group: + - abbr: MV + href: https://forums.mvgroup.org diff --git a/Homepage/Files/homepage_config/docker.yaml b/Homepage/Files/homepage_config/docker.yaml new file mode 100644 index 0000000..a76b345 --- /dev/null +++ b/Homepage/Files/homepage_config/docker.yaml @@ -0,0 +1,7 @@ +--- +# For configuration options and examples, please see: +# https://gethomepage.dev/en/configs/docker/ + +ps03fd-docker: + host: homepage_dockerproxy + port: 2375 diff --git a/Homepage/Files/homepage_config/services.yaml b/Homepage/Files/homepage_config/services.yaml new file mode 100644 index 0000000..801d756 --- /dev/null +++ b/Homepage/Files/homepage_config/services.yaml @@ -0,0 +1,517 @@ +--- +# For configuration options and examples, please see: +# https://gethomepage.dev/en/configs/services + +- Media: + - Plex: + icon: plex.png + href: https://plex.alexlebens.net + ping: http://plex.alexlebens.net:32400/web/index.html + description: Media server + server: ps03fd-docker + container: plex + widget: + type: tautulli + url: https://tautulli.alexlebens.net + key: 41da8e4c507341ee90683fe5e815d85d + - Jellyfin: + icon: jellyfin.png + description: Media server + href: https://jellyvue.alexlebens.net/ + ping: http://jellyfin:8096 + server: ps03fd-docker + container: jellyfin + widget: + type: jellyfin + url: https://jellyfin.alexlebens.net + key: e157ea91a1c54b5794d375d2b740e3f7 + - TubeAchivist: + icon: tube-archivist.png + description: Youtube downloader + href: https://tubearchivist.alexlebens.net/login/ + ping: https://tubearchivist.alexlebens.net/login/ + server: ps03fd-docker + container: tube_archivist + - Navidrome: + icon: navidrome.png + description: Music streaming + href: https://navidrome.alexlebens.net + ping: http://navidrome:4533 + server: ps03fd-docker + container: navidrome + - Calibre Web: + icon: calibre-web.png + description: Books + href: https://calibre.alexlebens.net + ping: http://calibre_web:8083 + server: ps03fd-docker + container: calibre_web + - Audiobookshelf: + icon: audiobookshelf.png + description: Audio books and podcasts + href: https://audiobookshelf.alexlebens.net + ping: http://audiobookshelf:80 + server: ps03fd-docker + container: audiobookshelf + - Rss: + icon: /icons/rss.svg + description: Rss feed + href: https://rss.alexlebens.net + ping: http://rss:80 + server: ps03fd-docker + container: rss + +- Organization: + - NextCloud: + icon: nextcloud.png + description: Provides productivity apps + href: https://nextcloud.alexlebens.net + ping: https://nextcloud.alexlebens.net/login + server: ps03fd-docker + container: nextcloud_server + - Vikunja: + icon: vikunja.png + description: Notes + href: https://vikunja.alexlebens.net + ping: http://vikunja_frontend:80 + server: ps03fd-docker + container: vikunja_api + - Outline: + icon: outline.png + description: Wiki + href: https://outline.alexlebens.net + ping: http://outline_server:3000 + server: ps03fd-docker + container: outline_server + - Actual: + icon: actual.png + description: Budget software + href: https://actual.alexlebens.net + ping: http://actual:5006 + server: ps03fd-docker + container: actual + - Firefly: + icon: firefly.png + description: Budget software + href: https://firefly.alexlebens.net + ping: http://firefly_server:8080 + server: ps03fd-docker + container: firefly_server + - Reactive Resume: + icon: /icons/reactiveresume.svg + description: Resume builder + href: https://reactiveresume.alexlebens.net/dashboard + ping: http://reactiveresume_client:3000 + server: ps03fd-docker + container: reactiveresume_server + - Your Spotify: + icon: spotify.png + description: Statisics for Spotify + href: https://yourspotify.alexlebens.net + ping: http://yourspotify_web:3000 + server: ps03fd-docker + container: yourspotify_web + +- Automation: + - Code Server: + icon: code-server.png + description: VS Code in a browser + href: https://codeserver.alexlebens.net + ping: http://code_server:8080 + server: ps03fd-docker + container: code_server + - Gitea: + icon: gitea.png + description: Code repository + href: https://gitea.alexlebens.net + ping: http://gitea:3000 + server: ps03fd-docker + container: gitea + - Gitea - Pibox: + icon: gitea.png + description: Code repository + href: https://gitea.pibox.alebens.usw1.kubegateway.com + ping: https://gitea.pibox.alebens.usw1.kubegateway.com + - DroneCI: + icon: drone.png + description: CI/CD Pipeline + href: https://drone.alexlebens.net + ping: http://drone:80 + server: ps03fd-docker + container: drone + - n8n: + icon: n8n.png + description: Workflow automation tool + href: https://n8n.alexlebens.net + ping: https://n8n.alexlebens.net/workflows + server: ps03fd-docker + container: n8n + - Home Assistant: + icon: home-assistant.png + description: Home automation + href: https://homeassistant.alexlebens.net + ping: http://homeassistant:8123 + server: ps03fd-docker + container: homeassistant + +- Monitoring: + - Grafana: + icon: grafana.png + description: Dashboard for metrics + href: https://grafana.alexlebens.net + ping: https://grafana.alexlebens.net/index.html + server: ps03fd-docker + container: grafana + - Prometheus: + icon: prometheus.png + description: Metrics database + href: https://prometheus.alexlebens.net + ping: http://prometheus:9090 + server: ps03fd-docker + container: prometheus + - Alertmanager: + icon: alertmanager.png + description: Alerting and notification service + href: https://alertmanager.alexlebens.net + ping: http://alertmanager:9093 + server: ps03fd-docker + container: prometheus_alertmanager + - cAdvisor: + icon: cadvisor.png + description: Metrics exporter for containers + href: https://cadvisor.alexlebens.net + ping: http://cadvisor:8080 + server: ps03fd-docker + container: prometheus_cadvisor + - Promtail: + icon: loki.png + description: Logs exporter for Loki + href: https://promtail.alexlebens.net + ping: http://loki_promtail:9080 + server: ps03fd-docker + container: loki_promtail + - Uptime Kuma: + icon: uptime-kuma.png + description: Monitoring uptime of sites + href: https://uptimekuma.alexlebens.net + ping: http://uptimekuma:3001 + server: ps03fd-docker + container: uptimekuma + - Uptime Kuma API: + icon: uptime-kuma.png + description: REST API for Uptime Kuma + href: https://uptimekumaapi.alexlebens.net/ + ping: http://uptimekuma_api:8000 + server: ps03fd-docker + container: uptimekuma_api + +- Services: + - Authentik: + icon: authentik.png + description: Identity management and provider + href: https://authentik.alexlebens.net + ping: https://authentik.alexlebens.net + server: ps03fd-docker + container: authentik_server + - StepCA: + icon: /icons/smallstep.svg + description: Certificate authority + href: https://stepca.alexlebens.net + ping: https://stepca_server:9040/health + server: ps03fd-docker + container: stepca_server + - Pi-hole: + icon: pi-hole.png + description: DNS based ad blocker + href: https://pihole.alexlebens.net/admin + ping: https://pihole.alexlebens.net/admin + server: ps03fd-docker + container: pihole + widget: + type: pihole + url: https://pihole.alexlebens.net + key: 28ac460edf5a18ea7f69751d74b3e4959d310ffb56c6db8e9e99d1d8ef53b53f + - Traefik: + icon: traefik.png + description: Reverse proxy for containers + href: https://traefik.alexlebens.net/dashboard/# + ping: https://traefik.alexlebens.net/dashboard/# + server: ps03fd-docker + container: traefik + widget: + type: traefik + url: https://traefik.alexlebens.net + - Unifi: + icon: unifi.png + description: Manage physical network devices + href: https://unifi.alexlebens.net + ping: https://unifi.alexlebens.net + widget: + type: unifi + url: https://unifi.alexlebens.net + username: aurailious + password: F$M9Gk3TrG@ZfC8 + - Themepark: + icon: /icons/themepark.png + description: Theme various hosted sites + href: https://themepark.alexlebens.net + ping: http://theme_park:80 + server: ps03fd-docker + container: theme_park + - Calibre: + icon: calibre.png + description: Database for Calibre + href: https://calibredb.alexlebens.net + ping: http://calibre_database:8080 + server: ps03fd-docker + container: calibre_database + - Tautulli: + icon: tautulli.png + description: Monitor Plex server + href: https://tautulli.alexlebens.net + ping: http://tautulli:8181 + server: ps03fd-docker + container: plex_tautulli + +- Hardware: + - Portainer: + icon: portainer.png + description: Manager Docker containers + href: https://portainer.alexlebens.net/#!/3/docker/dashboard + ping: http://portainer:9000 + server: ps03fd-docker + container: portainer + widget: + type: portainer + url: https://portainer.alexlebens.net + env: 3 + key: ptr_/fUjlqaEjcsfY/DJmzdfHl37nK5WGfkBFuWqRde4gjw= + - Yacht: + icon: yacht.png + description: Manager Docker containers + href: https://yacht.alexlebens.net/ + ping: http://yacht:8000 + server: ps03fd-docker + container: yacht + - Cockpit - ps03fd: + icon: cockpit.png + description: Service to manage a host + href: https://ps03fd.alexlebens.net:9090 + ping: https://ps03fd.alexlebens.net:9090 + - Cockpit - ps05fd: + icon: cockpit.png + description: Service to manage a host + href: https://ps05fd.alexlebens.net:9090 + ping: https://ps05fd.alexlebens.net:9090 + - Kubesail: + icon: /icons/kubesail.png + description: Management for PiBox + href: https://kubesail.com/clusters + ping: https://kubesail.com/clusters + - Synology: + icon: synology.png + description: Network Attached Storage + href: https://synology.alexlebens.net + ping: https://synology.alexlebens.net + - HD Homerun Flex: + icon: hdhomerun.png + description: TV Tuner + href: http://hdhr.alexlebens.net + ping: http://hdhr.alexlebens.net + - Pi KVM: + icon: pikvm.png + description: IP KVM to access servers + href: https://pikvm.alexlebens.net + ping: https://pikvm.alexlebens.net + +- Storage: + - qBittorrent: + icon: qbittorrent.png + description: Peer to peer downloads + href: https://qbittorrent.alexlebens.net + ping: http://qbittorrent:8080 + server: ps03fd-docker + container: qbittorrent + widget: + type: qbittorrent + fields: ["leech", "seed", "download", "upload"] + url: http://qbittorrent:8080 + username: torrent + password: "24wrsfxv@$WRSFXV" + - Tdarr: + icon: tdarr.png + description: Media transcode and healthcheck + href: https://tdarr.alexlebens.net + ping: http://tdarr:8265 + server: ps03fd-docker + container: tdarr + - Minio: + icon: minio.png + description: Object storage + href: https://minioconsole.alexlebens.net + ping: http://minio_server:9001 + server: ps03fd-docker + container: minio_server + +- Servarr: + - Lidarr: + icon: lidarr.png + description: Music + href: https://lidarr.alexlebens.net + ping: http://lidarr:8686 + server: ps03fd-docker + container: lidarr + widget: + type: lidarr + fields: ["queued", "albums"] + url: https://lidarr.alexlebens.net + key: d25bd6d24f4e4b90a21fc5b70bcb9fd9 + - Readarr Books: + icon: readarr.png + description: Books + href: https://readarrbooks.alexlebens.net + ping: http://readarr_books:8787 + server: ps03fd-docker + container: readarr_books + widget: + type: readarr + fields: ["queued", "books"] + url: https://readarrbooks.alexlebens.net + key: 1c1b9d5e69ec4b2aa1a85301d48d1573 + - Readarr Audio: + icon: readarr.png + description: Audiobooks + href: https://readarraudio.alexlebens.net + ping: http://readarr_audio:8787 + server: ps03fd-docker + container: readarr_audio + widget: + type: readarr + fields: ["queued", "books"] + url: https://readarraudio.alexlebens.net + key: 3be1176f6e6b461fa4f5eab9d39fd29f + - Prowlarr: + icon: prowlarr.png + description: Indexers + href: https://prowlarr.alexlebens.net + ping: http://prowlarr:9696 + server: ps03fd-docker + container: prowlarr + - Checkrr: + icon: /icons/checkrr.svg + description: Media testing + href: https://checkrr.alexlebens.net + ping: http://checkrr:8585 + server: ps03fd-docker + container: checkrr + - Overseerr: + icon: overseerr.png + description: Requests + href: https://overseerr.alexlebens.net + ping: http://overseerr:5055 + server: ps03fd-docker + container: overseerr + widget: + type: overseerr + url: https://overseerr.alexlebens.net + key: MTY3ODYxMzI4MDQ5MTg5MzgxMTllLTRjMWItNDI5Zi1iNzgwLTA2MmVjYWI2YmYzMik= + +- Sonarr: + - Sonarr: + icon: sonarr.png + description: Shows, general + href: https://sonarr.alexlebens.net + ping: http://sonarr:8989 + server: ps03fd-docker + container: sonarr + widget: + type: sonarr + fields: ["queued", "series"] + url: https://sonarr.alexlebens.net + key: 7f0dfeea4b9f410d96b5ffa2f809d1e8 + - Sonarr Anime: + icon: sonarr.png + description: Shows, anime + href: https://sonarranime.alexlebens.net + ping: http://sonarr_anime:8989 + server: ps03fd-docker + container: sonarr_anime + widget: + type: sonarr + fields: ["queued", "series"] + url: https://sonarranime.alexlebens.net + key: a2f10e70559c4ee3b8ff1d6cdc5a41f1 + - Sonarr Documentaries: + icon: sonarr.png + description: Shows, documentary, travel, non fiction + href: https://sonarrdocumentaries.alexlebens.net + ping: http://sonarr_documentaries:8989 + server: ps03fd-docker + container: sonarr_documentaries + widget: + type: sonarr + fields: ["queued", "series"] + url: https://sonarrdocumentaries.alexlebens.net + key: 3ed988c3731b45ad8124b7d55b620d6b + +- Radarr: + - Radarr: + icon: radarr.png + description: Movies, general + href: https://radarr.alexlebens.net + ping: http://radarr:7878 + server: ps03fd-docker + container: radarr + widget: + type: radarr + fields: ["queued", "movies"] + url: https://radarr.alexlebens.net + key: e6e3d6f4aafe4e499d970cfcbf042db9 + - Radarr Anime: + icon: radarr.png + description: Movies, anime + href: https://radarranime.alexlebens.net + ping: http://radarr_anime:7878 + server: ps03fd-docker + container: radarr_anime + widget: + type: radarr + fields: ["queued", "movies"] + url: https://radarranime.alexlebens.net + key: fb126bad31d64d43bb669ad81329954d + - Radarr Art: + icon: radarr.png + description: Movies, foreign, classic + href: https://radarrart.alexlebens.net + ping: http://radarr_art:7878 + server: ps03fd-docker + container: radarr_art + widget: + type: radarr + fields: ["queued", "movies"] + url: https://radarrart.alexlebens.net + key: 32365893c4234f8a9ad96d68d6e7a520 + - Radarr Documentaries: + icon: radarr.png + description: Movies, documentaries + href: https://radarrdocumentaries.alexlebens.net + ping: http://radarr_documentaries:7878 + server: ps03fd-docker + container: radarr_documentaries + widget: + type: radarr + fields: ["queued", "movies"] + url: https://radarrdocumentaries.alexlebens.net + key: fd03f47363324096a56d0a453623420b + - Radarr Stand Up: + icon: radarr.png + description: Movies, stand up + href: https://radarrstandup.alexlebens.net + ping: http://radarr_standup:7878 + server: ps03fd-docker + container: radarr_standup + widget: + type: radarr + fields: ["queued", "movies"] + url: https://radarrstandup.alexlebens.net + key: c7c425b3fbcf4112895aceec7729f4d1 diff --git a/Homepage/Files/homepage_config/settings.yaml b/Homepage/Files/homepage_config/settings.yaml new file mode 100644 index 0000000..2db64ae --- /dev/null +++ b/Homepage/Files/homepage_config/settings.yaml @@ -0,0 +1,13 @@ +--- +# For configuration options and examples, please see: +# https://gethomepage.dev/en/configs/settings + +providers: + openweathermap: openweathermapapikey + weatherapi: weatherapiapikey + +background: /images/background.png +backgroundOpacity: .15 + +theme: dark +color: gray diff --git a/Homepage/Files/homepage_config/widgets.yaml b/Homepage/Files/homepage_config/widgets.yaml new file mode 100644 index 0000000..c56e11e --- /dev/null +++ b/Homepage/Files/homepage_config/widgets.yaml @@ -0,0 +1,21 @@ +--- +# For configuration options and examples, please see: +# https://gethomepage.dev/en/configs/widgets + +- resources: + cpu: true + memory: true + +- openmeteo: + label: Denver + latitude: 39.74 + longitude: -104.98 + timezone: America/Denver + units: metric + cache: 5 + +- datetime: + text_size: xl + format: + timeStyle: short + hour12: false diff --git a/Homepage/Files/homepage_icons/checkrr.svg b/Homepage/Files/homepage_icons/checkrr.svg new file mode 100644 index 0000000..fc1d4a2 --- /dev/null +++ b/Homepage/Files/homepage_icons/checkrr.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Homepage/Files/homepage_icons/kubesail.png b/Homepage/Files/homepage_icons/kubesail.png new file mode 100644 index 0000000..ab79697 Binary files /dev/null and b/Homepage/Files/homepage_icons/kubesail.png differ diff --git a/Homepage/Files/homepage_icons/openaudible.svg b/Homepage/Files/homepage_icons/openaudible.svg new file mode 100644 index 0000000..b1f567c --- /dev/null +++ b/Homepage/Files/homepage_icons/openaudible.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/Homepage/Files/homepage_icons/reactiveresume.svg b/Homepage/Files/homepage_icons/reactiveresume.svg new file mode 100644 index 0000000..fd548d2 --- /dev/null +++ b/Homepage/Files/homepage_icons/reactiveresume.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/Homepage/Files/homepage_icons/rss.svg b/Homepage/Files/homepage_icons/rss.svg new file mode 100644 index 0000000..a7f9cf1 --- /dev/null +++ b/Homepage/Files/homepage_icons/rss.svg @@ -0,0 +1,18 @@ + + + + RSS feed icon + + + + + + + + + \ No newline at end of file diff --git a/Homepage/Files/homepage_icons/smallstep.svg b/Homepage/Files/homepage_icons/smallstep.svg new file mode 100644 index 0000000..8da80f9 --- /dev/null +++ b/Homepage/Files/homepage_icons/smallstep.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Homepage/Files/homepage_icons/tekton.svg b/Homepage/Files/homepage_icons/tekton.svg new file mode 100644 index 0000000..37b27b3 --- /dev/null +++ b/Homepage/Files/homepage_icons/tekton.svg @@ -0,0 +1,7 @@ + + + + + Icon-Red_Hat-Tekton-100px-active-RGB + + \ No newline at end of file diff --git a/Homepage/Files/homepage_icons/themepark.png b/Homepage/Files/homepage_icons/themepark.png new file mode 100644 index 0000000..2b7d45a Binary files /dev/null and b/Homepage/Files/homepage_icons/themepark.png differ diff --git a/Homepage/Files/homepage_images/background.png b/Homepage/Files/homepage_images/background.png new file mode 100644 index 0000000..406bae8 Binary files /dev/null and b/Homepage/Files/homepage_images/background.png differ diff --git a/Homepage/README.md b/Homepage/README.md new file mode 100644 index 0000000..77f9114 --- /dev/null +++ b/Homepage/README.md @@ -0,0 +1,3 @@ +# Homepage + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Homepage/status.svg)](https://drone.alexlebens.net/alexlebens/Homepage) \ No newline at end of file diff --git a/Homepage/UptimeKuma/docker-1.json b/Homepage/UptimeKuma/docker-1.json new file mode 100644 index 0000000..12448d9 --- /dev/null +++ b/Homepage/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Homepage - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://homepage.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "homepage", + "docker_host": 1 +} \ No newline at end of file diff --git a/Homepage/UptimeKuma/docker-2.json b/Homepage/UptimeKuma/docker-2.json new file mode 100644 index 0000000..ca2ada5 --- /dev/null +++ b/Homepage/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Homepage DockerProxy - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://homepage.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "homepage_dockerproxy", + "docker_host": 1 +} \ No newline at end of file diff --git a/Homepage/UptimeKuma/http-1.json b/Homepage/UptimeKuma/http-1.json new file mode 100644 index 0000000..9f22686 --- /dev/null +++ b/Homepage/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Homepage - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://homepage.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Homepage/docker-compose.yml b/Homepage/docker-compose.yml new file mode 100644 index 0000000..adbe79c --- /dev/null +++ b/Homepage/docker-compose.yml @@ -0,0 +1,70 @@ +services: + homepage: + container_name: homepage + image: ghcr.io/benphelps/homepage:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.homepage.entrypoints: websecure + traefik.http.routers.homepage.rule: Host(`homepage.alexlebens.net`) + traefik.http.routers.homepage.service: homepage + traefik.http.routers.homepage.middlewares: authentik@file + traefik.http.services.homepage.loadbalancer.server.port: 3000 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + privileged: true + volumes: + - config:/app/config + - images:/app/public/images + - icons:/app/public/icons + + dockerproxy: + container_name: homepage_dockerproxy + environment: + - CONTAINERS=1 + - POST=0 + image: ghcr.io/tecnativa/docker-socket-proxy:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: unless-stopped + privileged: true + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + +networks: + traefik: + name: traefik + external: true + +volumes: + config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/homepage_config + + images: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/homepage_images + + icons: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/homepage_icons \ No newline at end of file diff --git a/Jellyfin/.drone.yml b/Jellyfin/.drone.yml new file mode 100644 index 0000000..ed55cc7 --- /dev/null +++ b/Jellyfin/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Jellyfin + URL: jellyfin.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Jellyfin failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Jellyfin failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Jellyfin succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Jellyfin failed. + when: + status: + - failure diff --git a/Jellyfin/README.md b/Jellyfin/README.md new file mode 100644 index 0000000..46cff41 --- /dev/null +++ b/Jellyfin/README.md @@ -0,0 +1,3 @@ +# Jellyfin + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Jellyfin/status.svg)](https://drone.alexlebens.net/alexlebens/Jellyfin) \ No newline at end of file diff --git a/Jellyfin/UptimeKuma/docker-1.json b/Jellyfin/UptimeKuma/docker-1.json new file mode 100644 index 0000000..e2600ff --- /dev/null +++ b/Jellyfin/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Jellyfin - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://jellyfin.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "jellyfin", + "docker_host": 1 +} \ No newline at end of file diff --git a/Jellyfin/UptimeKuma/docker-2.json b/Jellyfin/UptimeKuma/docker-2.json new file mode 100644 index 0000000..97ca6bb --- /dev/null +++ b/Jellyfin/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Jellyfin Vue - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://jellyfinvue.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "jellyfin_vue", + "docker_host": 1 +} \ No newline at end of file diff --git a/Jellyfin/UptimeKuma/http-1.json b/Jellyfin/UptimeKuma/http-1.json new file mode 100644 index 0000000..4a8d709 --- /dev/null +++ b/Jellyfin/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Jellyfin - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://jellyfin.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Jellyfin/UptimeKuma/http-2.json b/Jellyfin/UptimeKuma/http-2.json new file mode 100644 index 0000000..7893de5 --- /dev/null +++ b/Jellyfin/UptimeKuma/http-2.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Jellyfin Vue - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://jellyvue.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Jellyfin/docker-compose.yml b/Jellyfin/docker-compose.yml new file mode 100644 index 0000000..42427e7 --- /dev/null +++ b/Jellyfin/docker-compose.yml @@ -0,0 +1,169 @@ +services: + jellyfin: + container_name: jellyfin + devices: + - /dev/dri:/dev/dri + environment: + - PUID=1000 + - PGID=1000 + - TZ=America/Denver + - UMASK_SET=022 + group_add: + - '105' + image: jellyfin/jellyfin + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.jellyfin.entrypoints: websecure + traefik.http.routers.jellyfin.rule: Host(`jellyfin.alexlebens.net`) + traefik.http.routers.jellyfin.service: jellyfin + traefik.http.services.jellyfin.loadbalancer.server.port: 8096 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + privileged: true + ports: + - 7359:7359/udp + restart: unless-stopped + volumes: + - config:/config + - cache:/cache + - media:/media + - anime_nfs:/anime + - anime_movies_nfs:/anime_movies + - documentaries_nfs:/documentaries + - documentary_shows_nfs:/documentary_shows + - dvr_nfs:/dvr + - movies_nfs:/movies + - movies_classics_nfs:/movies_classics + - movies_foreign_nfs:/movies_foreign + - music_nfs:/music + - standup_nfs:/standup + - tvshows_nfs:/tvshows + + vue: + container_name: jellyfin_vue + image: ghcr.io/jellyfin/jellyfin-vue:unstable + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.jellyfin_vue.entrypoints: websecure + traefik.http.routers.jellyfin_vue.rule: Host(`jellyvue.alexlebens.net`) + traefik.http.routers.jellyfin_vue.service: jellyfin_vue + traefik.http.services.jellyfin_vue.loadbalancer.server.port: 80 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: unless-stopped + +networks: + traefik: + name: traefik + external: true + +volumes: + config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/jellyfin_config + + media: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/jellyfin_media + + cache: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/jellyfin_cache + + anime_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Anime" + + anime_movies_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Anime Movies" + + documentaries_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Documentaries" + + documentary_shows_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Documentary Shows" + + dvr_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/DVR" + + movies_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Movies" + + movies_classics_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Movies Classics" + + movies_foreign_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Movies Foreign" + + music_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Music" + + standup_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Stand Up" + + tvshows_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/TV Shows" diff --git a/K2D/.drone.yml b/K2D/.drone.yml new file mode 100644 index 0000000..6fe30a3 --- /dev/null +++ b/K2D/.drone.yml @@ -0,0 +1,109 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: K2D + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for K2D failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for K2D failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for K2D succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for K2D failed. + when: + status: + - failure diff --git a/K2D/.env b/K2D/.env new file mode 100644 index 0000000..e717b33 --- /dev/null +++ b/K2D/.env @@ -0,0 +1,2 @@ +K2D_ADVERTISE_ADDR=192.168.1.15 +K2D_SECRET=YOUR_OWN_SECRET \ No newline at end of file diff --git a/K2D/README.md b/K2D/README.md new file mode 100644 index 0000000..8ea446b --- /dev/null +++ b/K2D/README.md @@ -0,0 +1,3 @@ +# K2D + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/K2D/status.svg)](https://drone.alexlebens.net/alexlebens/K2D) \ No newline at end of file diff --git a/K2D/UptimeKuma/docker-1.json b/K2D/UptimeKuma/docker-1.json new file mode 100755 index 0000000..002ccb2 --- /dev/null +++ b/K2D/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "K2D - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://portainer.alexlebens.net/admin", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "k2d", + "docker_host": 1 +} \ No newline at end of file diff --git a/K2D/docker-compose.yml b/K2D/docker-compose.yml new file mode 100644 index 0000000..7d8df42 --- /dev/null +++ b/K2D/docker-compose.yml @@ -0,0 +1,33 @@ +services: + k2d: + container_name: k2d + env_file: + - .env + image: portainer/k2d:1.0.0-alpha + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + ports: + - 6443:6443 + restart: always + privileged: true + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - store:/var/lib/k2d + +networks: + traefik: + name: traefik + external: true + +volumes: + store: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/k2d_store diff --git a/Lidarr/.drone.yml b/Lidarr/.drone.yml new file mode 100644 index 0000000..2b1e7e8 --- /dev/null +++ b/Lidarr/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Lidarr + URL: lidarr.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Lidarr failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Lidarr failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Lidarr succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Lidarr failed. + when: + status: + - failure diff --git a/Lidarr/README.md b/Lidarr/README.md new file mode 100644 index 0000000..f8f3a3d --- /dev/null +++ b/Lidarr/README.md @@ -0,0 +1,3 @@ +# Lidarr + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Lidarr/status.svg)](https://drone.alexlebens.net/alexlebens/Lidarr) \ No newline at end of file diff --git a/Lidarr/UptimeKuma/docker-1.json b/Lidarr/UptimeKuma/docker-1.json new file mode 100644 index 0000000..bcd3cb7 --- /dev/null +++ b/Lidarr/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Lidarr - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://lidarr.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "lidarr", + "docker_host": 1 +} \ No newline at end of file diff --git a/Lidarr/UptimeKuma/docker-2.json b/Lidarr/UptimeKuma/docker-2.json new file mode 100644 index 0000000..eb0308e --- /dev/null +++ b/Lidarr/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Lidarr Exporter - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://lidarr.alexlebens.net:9000/metrics", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "lidarr", + "docker_host": 1 +} \ No newline at end of file diff --git a/Lidarr/UptimeKuma/http-1.json b/Lidarr/UptimeKuma/http-1.json new file mode 100644 index 0000000..fb98257 --- /dev/null +++ b/Lidarr/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Lidarr - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://lidarr.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Lidarr/UptimeKuma/http-2.json b/Lidarr/UptimeKuma/http-2.json new file mode 100644 index 0000000..881fa08 --- /dev/null +++ b/Lidarr/UptimeKuma/http-2.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Lidarr Exporter - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "http://lidarr_exporter:9709/metrics", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Lidarr/docker-compose.yml b/Lidarr/docker-compose.yml new file mode 100644 index 0000000..d68ad75 --- /dev/null +++ b/Lidarr/docker-compose.yml @@ -0,0 +1,77 @@ +services: + lidarr: + container_name: lidarr + environment: + - PUID=1000 + - PGID=1000 + - UMASK=022 + - TZ=America/Denver + image: hotio/lidarr:testing + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.lidarr.entrypoints: websecure + traefik.http.routers.lidarr.rule: Host(`lidarr.alexlebens.net`) + traefik.http.routers.lidarr.service: lidarr + traefik.http.routers.lidarr.middlewares: lidarr-theme@file + traefik.http.services.lidarr.loadbalancer.server.port: 8686 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.32 + restart: always + privileged: true + volumes: + - lidarr:/config + - storage_nfs:/mnt/store + + lidarr_exporter: + command: lidarr + container_name: lidarr_exporter + depends_on: + - lidarr + environment: + PORT: 9709 + URL: http://lidarr:8686 + APIKEY: d25bd6d24f4e4b90a21fc5b70bcb9fd9 + image: ghcr.io/onedr0p/exportarr:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.38 + restart: always + +networks: + traefik: + name: traefik + external: true + +volumes: + lidarr: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/servarr_lidarr + +# storage: +# driver: local +# driver_opts: +# type: cifs +# o: username=aurailious,password=24wrsfxv@$$WRSFXV,file_mode=0777,dir_mode=0777 +# device: "//192.168.1.194/Storage" + + storage_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: :/volume2/Storage diff --git a/Loki/.drone.yml b/Loki/.drone.yml new file mode 100644 index 0000000..b849814 --- /dev/null +++ b/Loki/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Loki + URL: logs.alexlebens.net promtail.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Loki failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Loki failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Loki succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Loki failed. + when: + status: + - failure diff --git a/Loki/Files/loki_config/config.yaml b/Loki/Files/loki_config/config.yaml new file mode 100644 index 0000000..7be0180 --- /dev/null +++ b/Loki/Files/loki_config/config.yaml @@ -0,0 +1,67 @@ +# (default configuration) +auth_enabled: false + +server: + http_listen_port: 3100 + +ingester: + lifecycler: + address: 127.0.0.1 + ring: + kvstore: + store: inmemory + replication_factor: 1 + final_sleep: 0s + chunk_idle_period: 1h # Any chunk not receiving new logs in this time will be flushed + max_chunk_age: 1h # All chunks will be flushed when they hit this age, default is 1h + chunk_target_size: 1048576 # Loki will attempt to build chunks up to 1.5MB, flushing first if chunk_idle_period or max_chunk_age is reached first + chunk_retain_period: 30s # Must be greater than index read cache TTL if using an index cache (Default index read cache TTL is 5m) + max_transfer_retries: 0 # Chunk transfers disabled + +schema_config: + configs: + - from: 2020-10-24 + store: boltdb-shipper + object_store: filesystem + schema: v11 + index: + prefix: index_ + period: 24h + +storage_config: + boltdb_shipper: + active_index_directory: /loki/boltdb-shipper-active + cache_location: /loki/boltdb-shipper-cache + cache_ttl: 24h # Can be increased for faster performance over longer query periods, uses more disk space + shared_store: filesystem + filesystem: + directory: /loki/chunks + +compactor: + working_directory: /loki/boltdb-shipper-compactor + shared_store: filesystem + +limits_config: + reject_old_samples: true + reject_old_samples_max_age: 168h + ingestion_burst_size_mb: 16 + ingestion_rate_mb: 16 + +chunk_store_config: + max_look_back_period: 0s + +table_manager: + retention_deletes_enabled: false + retention_period: 0s + +ruler: + storage: + type: local + local: + directory: /loki/rules + rule_path: /loki/rules-temp + alertmanager_url: localhost + ring: + kvstore: + store: inmemory + enable_api: true \ No newline at end of file diff --git a/Loki/Files/promtail_config/config.yml b/Loki/Files/promtail_config/config.yml new file mode 100644 index 0000000..b91cff0 --- /dev/null +++ b/Loki/Files/promtail_config/config.yml @@ -0,0 +1,30 @@ +server: + http_listen_port: 9080 + grpc_listen_port: 0 + +positions: + filename: /tmp/positions.yaml + +clients: + - url: http://loki:3100/loki/api/v1/push + +scrape_configs: + - job_name: system + static_configs: + - targets: + - localhost + labels: + job: varlogs + __path__: /var/log/*log + + - job_name: containers + docker_sd_configs: + - host: unix:///var/run/docker.sock + relabel_configs: + - source_labels: ["__meta_docker_container_name"] + regex: "/(.*)" + target_label: "container" + - source_labels: ["__meta_docker_container_log_stream"] + target_label: "logstream" + - source_labels: ["__meta_docker_container_label_logging_jobname"] + target_label: "job" diff --git a/Loki/README.md b/Loki/README.md new file mode 100644 index 0000000..85d6c5a --- /dev/null +++ b/Loki/README.md @@ -0,0 +1,3 @@ +# Loki + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Loki/status.svg)](https://drone.alexlebens.net/alexlebens/Loki) \ No newline at end of file diff --git a/Loki/UptimeKuma/docker-1.json b/Loki/UptimeKuma/docker-1.json new file mode 100644 index 0000000..a31b893 --- /dev/null +++ b/Loki/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Loki - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://logs.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "loki", + "docker_host": 1 +} \ No newline at end of file diff --git a/Loki/UptimeKuma/docker-2.json b/Loki/UptimeKuma/docker-2.json new file mode 100644 index 0000000..fce91fd --- /dev/null +++ b/Loki/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Loki Promtail - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://promtail.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "loki_promtail", + "docker_host": 1 +} \ No newline at end of file diff --git a/Loki/UptimeKuma/http-1.json b/Loki/UptimeKuma/http-1.json new file mode 100644 index 0000000..a176081 --- /dev/null +++ b/Loki/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Loki Promtail - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://promtail.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Loki/docker-compose.yml b/Loki/docker-compose.yml new file mode 100644 index 0000000..88796f6 --- /dev/null +++ b/Loki/docker-compose.yml @@ -0,0 +1,77 @@ +services: + loki: + command: + - -config.file=/etc/loki/config.yaml + container_name: loki + image: grafana/loki:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + privileged: true + user: root + volumes: + - db:/loki + - loki_config:/etc/loki + + promtail: + command: + - -config.file=/etc/promtail/config.yml + container_name: loki_promtail + depends_on: + - loki + image: grafana/promtail:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.promtail.entrypoints: websecure + traefik.http.routers.promtail.rule: Host(`promtail.alexlebens.net`) + traefik.http.routers.promtail.service: promtail + traefik.http.routers.promtail.middlewares: authentik@file + traefik.http.services.promtail.loadbalancer.server.port: 9080 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + privileged: true + user: root + volumes: + - /var/lib/docker/containers:/var/lib/docker/containers + - /var/run/docker.sock:/var/run/docker.sock + - /var/log:/var/log + - promtail_config:/etc/promtail + +networks: + traefik: + name: traefik + external: true + +volumes: + db: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/loki_db + + loki_config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/loki_config + + promtail_config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/promtail_config diff --git a/MinIO/.drone.yml b/MinIO/.drone.yml new file mode 100644 index 0000000..4115494 --- /dev/null +++ b/MinIO/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: MinIO + URL: minio.alexlebens.net minioconsole.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Outline failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Outline failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Outline succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Outline failed. + when: + status: + - failure diff --git a/MinIO/.env b/MinIO/.env new file mode 100644 index 0000000..fb1a7d3 --- /dev/null +++ b/MinIO/.env @@ -0,0 +1,4 @@ +MINIO_URL=minio.alexlebens.net +MINIO_CONSOLE_URL=minioconsole.alexlebens.net +MINIO_ROOT_USER=admin +MINIO_ROOT_PASSWORD='24wrsfxv@$WRSFXV' \ No newline at end of file diff --git a/MinIO/README.md b/MinIO/README.md new file mode 100644 index 0000000..f0ac554 --- /dev/null +++ b/MinIO/README.md @@ -0,0 +1,3 @@ +# MinIO + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/MinIO/status.svg)](https://drone.alexlebens.net/alexlebens/MinIO) \ No newline at end of file diff --git a/MinIO/UptimeKuma/docker-1.json b/MinIO/UptimeKuma/docker-1.json new file mode 100644 index 0000000..8c08d6c --- /dev/null +++ b/MinIO/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Minio - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://minio.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "minio_server", + "docker_host": 1 +} \ No newline at end of file diff --git a/MinIO/UptimeKuma/http-1.json b/MinIO/UptimeKuma/http-1.json new file mode 100644 index 0000000..fd23cde --- /dev/null +++ b/MinIO/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Minio Console - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://minioconsole.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/MinIO/docker-compose.yml b/MinIO/docker-compose.yml new file mode 100644 index 0000000..a6e2eeb --- /dev/null +++ b/MinIO/docker-compose.yml @@ -0,0 +1,57 @@ +services: + minio: + command: -c 'minio server /data --console-address ":9001"' + container_name: minio_server + deploy: + restart_policy: + condition: on-failure + entrypoint: sh + env_file: + - .env + healthcheck: + test: + [ + "CMD", + "curl", + "-f", + "http://localhost:9000/minio/health/live" + ] + interval: 30s + timeout: 20s + retries: 3 + image: minio/minio:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.minio.entrypoints: websecure + traefik.http.routers.minio.rule: Host(`minio.alexlebens.net`) + traefik.http.routers.minio.service: minio + traefik.http.services.minio.loadbalancer.server.port: 9000 + traefik.http.routers.minio-console.entrypoints: websecure + traefik.http.routers.minio-console.rule: Host(`minioconsole.alexlebens.net`) + traefik.http.routers.minio-console.service: minio-console + traefik.http.services.minio-console.loadbalancer.server.port: 9001 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: unless-stopped + privileged: true + volumes: + - storage:/data + +networks: + traefik: + name: traefik + external: true + +volumes: + storage: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/minio_storage diff --git a/Navidrome/.drone.yml b/Navidrome/.drone.yml new file mode 100644 index 0000000..4e29a12 --- /dev/null +++ b/Navidrome/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Navidrome + URL: navidrome.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Navidrome failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Navidrome failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Navidrome succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Navidrome failed. + when: + status: + - failure diff --git a/Navidrome/README.md b/Navidrome/README.md new file mode 100644 index 0000000..abc7d0f --- /dev/null +++ b/Navidrome/README.md @@ -0,0 +1,3 @@ +# Navidrome + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Navidrome/status.svg)](https://drone.alexlebens.net/alexlebens/Navidrome) \ No newline at end of file diff --git a/Navidrome/UptimeKuma/docker-1.json b/Navidrome/UptimeKuma/docker-1.json new file mode 100644 index 0000000..25bda15 --- /dev/null +++ b/Navidrome/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Navidrome - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://navidrome.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "navidrome", + "docker_host": 1 +} \ No newline at end of file diff --git a/Navidrome/UptimeKuma/http-1.json b/Navidrome/UptimeKuma/http-1.json new file mode 100644 index 0000000..948d24c --- /dev/null +++ b/Navidrome/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Navidrome - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://navidrome.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Navidrome/docker-compose.yml b/Navidrome/docker-compose.yml new file mode 100644 index 0000000..eb1ebff --- /dev/null +++ b/Navidrome/docker-compose.yml @@ -0,0 +1,50 @@ +services: + navidrome: + container_name: navidrome + image: deluan/navidrome:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.navidrome.entrypoints: websecure + traefik.http.routers.navidrome.rule: Host(`navidrome.alexlebens.net`) + traefik.http.routers.navidrome.service: navidrome + traefik.http.services.navidrome.loadbalancer.server.port: 4533 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + privileged: true + restart: always + volumes: + - data:/data + - storage_nfs:/music:ro + +networks: + traefik: + name: traefik + external: true + +volumes: + data: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/navidrome_data + +# storage: +# driver: local +# driver_opts: +# type: cifs +# o: username=aurailious,password=24wrsfxv@$$WRSFXV,file_mode=0777,dir_mode=0777 +# device: "//192.168.1.194/Storage" + + storage_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: :/volume2/Storage/Music diff --git a/NextCloud/.db.env b/NextCloud/.db.env new file mode 100644 index 0000000..a61f0e2 --- /dev/null +++ b/NextCloud/.db.env @@ -0,0 +1,5 @@ +TZ=America/Denver +MYSQL_ROOT_PASSWORD=SUPER_SECRET +MYSQL_DATABASE=nextcloud +MYSQL_USER=admin +MYSQL_PASSWORD=SUPER_SUPER_SECRET \ No newline at end of file diff --git a/NextCloud/.drone.yml b/NextCloud/.drone.yml new file mode 100644 index 0000000..92a51c4 --- /dev/null +++ b/NextCloud/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: NextCloud + URL: nextcloud.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for NextCloud failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for NextCloud failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for NextCloud succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for NextCloud failed. + when: + status: + - failure diff --git a/NextCloud/.env b/NextCloud/.env new file mode 100644 index 0000000..05cf425 --- /dev/null +++ b/NextCloud/.env @@ -0,0 +1,6 @@ +REDIS_HOST=nextcloud_redis +MYSQL_HOST=nextcloud_mariadb:3306 +MYSQL_DATABASE=nextcloud +MYSQL_USER=admin +MYSQL_PASSWORD=SUPER_SUPER_SECRET +TRUSTED_PROXIES=treafik \ No newline at end of file diff --git a/NextCloud/README.md b/NextCloud/README.md new file mode 100644 index 0000000..ef5851a --- /dev/null +++ b/NextCloud/README.md @@ -0,0 +1,3 @@ +# NextCloud + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/NextCloud/status.svg)](https://drone.alexlebens.net/alexlebens/NextCloud) \ No newline at end of file diff --git a/NextCloud/UptimeKuma/docker-1.json b/NextCloud/UptimeKuma/docker-1.json new file mode 100644 index 0000000..73c1b2a --- /dev/null +++ b/NextCloud/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "NextCloud MariaDB - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://nextcloud.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "nextcloud_mariadb", + "docker_host": 1 +} \ No newline at end of file diff --git a/NextCloud/UptimeKuma/docker-2.json b/NextCloud/UptimeKuma/docker-2.json new file mode 100644 index 0000000..9ee2837 --- /dev/null +++ b/NextCloud/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "NextCloud Redis - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://nextcloud.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "nextcloud_redis", + "docker_host": 1 +} \ No newline at end of file diff --git a/NextCloud/UptimeKuma/docker-3.json b/NextCloud/UptimeKuma/docker-3.json new file mode 100644 index 0000000..a3cf31e --- /dev/null +++ b/NextCloud/UptimeKuma/docker-3.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "NextCloud Server - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://nextcloud.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "nextcloud_server", + "docker_host": 1 +} \ No newline at end of file diff --git a/NextCloud/UptimeKuma/http-1.json b/NextCloud/UptimeKuma/http-1.json new file mode 100644 index 0000000..1f0f754 --- /dev/null +++ b/NextCloud/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "NextCloud - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://nextcloud.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/NextCloud/docker-compose.yml b/NextCloud/docker-compose.yml new file mode 100644 index 0000000..b0cd732 --- /dev/null +++ b/NextCloud/docker-compose.yml @@ -0,0 +1,101 @@ +services: + mariadb: + container_name: nextcloud_mariadb + env_file: + - .db.env + image: mariadb:10 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.91 + restart: always + volumes: + - db:/var/lib/mysql + + redis: + container_name: nextcloud_redis + image: redis:6 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + volumes: + - redis:/var/lib/redis + - redis_data:/data + + nextcloud: + container_name: nextcloud_server + depends_on: + - mariadb + - redis + env_file: + - .env + image: nextcloud:stable + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.nextcloud.entrypoints: websecure + traefik.http.routers.nextcloud.rule: Host(`nextcloud.alexlebens.net`) + traefik.http.routers.nextcloud.service: nextcloud-nextcloud + traefik.http.routers.nextcloud.middlewares: nextcloud,nextcloud_redirect + traefik.http.middlewares.nextcloud.headers.customFrameOptionsValue: ALLOW-FROM https://nextcloud.alexlebens.net + traefik.http.middlewares.nextcloud.headers.contentSecurityPolicy: frame-ancestors 'self' nextcloud.alexlebens.net *.nextcloud.alexlebens.net + traefik.http.middlewares.nextcloud.headers.stsSeconds: 155520011 + traefik.http.middlewares.nextcloud.headers.stsIncludeSubdomains: true + traefik.http.middlewares.nextcloud.headers.stsPreload: true + traefik.http.middlewares.nextcloud.headers.customresponseheaders.X-Frame-Options: SAMEORIGIN + traefik.http.middlewares.nextcloud_redirect.redirectregex.permanent: true + traefik.http.middlewares.nextcloud_redirect.redirectregex.regex: https://(.*)/.well-known/(card|cal)dav + traefik.http.middlewares.nextcloud_redirect.redirectregex.replacement: https://$${1}/remote.php/dav/ + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + volumes: + - data:/var/www/html + +networks: + traefik: + name: traefik + external: true + +volumes: + db: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/nextcloud_db + + redis: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/nextcloud_redis + + redis_data: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/nextcloud_redis_data + + data: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/nextcloud_data diff --git a/Outline/.drone.yml b/Outline/.drone.yml new file mode 100644 index 0000000..2070680 --- /dev/null +++ b/Outline/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Outline + URL: outline.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Outline failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Outline failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Outline succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Outline failed. + when: + status: + - failure diff --git a/Outline/.env b/Outline/.env new file mode 100644 index 0000000..b44ad80 --- /dev/null +++ b/Outline/.env @@ -0,0 +1,183 @@ +# –––––––––––––––– REQUIRED –––––––––––––––– + +NODE_ENV=production + +# Generate a hex-encoded 32-byte random key. You should use `openssl rand -hex 32` +# in your terminal to generate a random value. +SECRET_KEY=a470152d0041325cb329885e28d5b8e788e1abf5cca9359740f9d2ea25077d2c + +# Generate a unique random key. The format is not important but you could still use +# `openssl rand -hex 32` in your terminal to produce this. +UTILS_SECRET=6b0dbe1ebd481f2fc2b2778051e49837a8f3772d766dfcf2f8262ba2a31a5e8e + +# For production point these at your databases, in development the default +# should work out of the box. +POSTGRES_USER=user +POSTGRES_PASSWORD=pass +POSTGRES_DB=outline + +DATABASE_URL=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@outline_postgres:5432/${POSTGRES_DB} +DATABASE_URL_TEST=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@outline_postgres:5432/${POSTGRES_DB}-test +DATABASE_CONNECTION_POOL_MIN= +DATABASE_CONNECTION_POOL_MAX= +# Uncomment this to disable SSL for connecting to Postgres +PGSSLMODE=disable + +# For redis you can either specify an ioredis compatible url like this +REDIS_URL=redis://outline_redis:6379 +# or alternatively, if you would like to provide additional connection options, +# use a base64 encoded JSON connection option object. Refer to the ioredis documentation +# for a list of available options. +# Example: Use Redis Sentinel for high availability +# {"sentinels":[{"host":"sentinel-0","port":26379},{"host":"sentinel-1","port":26379}],"name":"mymaster"} +# REDIS_URL=ioredis://eyJzZW50aW5lbHMiOlt7Imhvc3QiOiJzZW50aW5lbC0wIiwicG9ydCI6MjYzNzl9LHsiaG9zdCI6InNlbnRpbmVsLTEiLCJwb3J0IjoyNjM3OX1dLCJuYW1lIjoibXltYXN0ZXIifQ== + +# URL should point to the fully qualified, publicly accessible URL. If using a +# proxy the port in URL and PORT may be different. +URL=https://outline.alexlebens.net +PORT=3000 + +# See [documentation](docs/SERVICES.md) on running a separate collaboration +# server, for normal operation this does not need to be set. +COLLABORATION_URL= + +# To support uploading of images for avatars and document attachments an +# s3-compatible storage must be provided. AWS S3 is recommended for redundancy +# however if you want to keep all file storage local an alternative such as +# minio (https://github.com/minio/minio) can be used. + +# A more detailed guide on setting up S3 is available here: +# => https://wiki.generaloutline.com/share/125de1cc-9ff6-424b-8415-0d58c809a40f +# +AWS_ACCESS_KEY_ID=ekL6GVURnEwXL61F +AWS_SECRET_ACCESS_KEY=inI3CtJHPqxP8WAIAp9rNhOVLdk8opLo +AWS_REGION=local +# AWS_S3_ACCELERATE_URL= +AWS_S3_UPLOAD_BUCKET_URL=https://minio.alexlebens.net +AWS_S3_UPLOAD_BUCKET_NAME=outline +AWS_S3_UPLOAD_MAX_SIZE=26214400 +# AWS_S3_FORCE_PATH_STYLE=true +# AWS_S3_ACL=private + + +# –––––––––––––– AUTHENTICATION –––––––––––––– + +# Third party signin credentials, at least ONE OF EITHER Google, Slack, +# or Microsoft is required for a working installation or you'll have no sign-in +# options. + +# To configure Slack auth, you'll need to create an Application at +# => https://api.slack.com/apps +# +# When configuring the Client ID, add a redirect URL under "OAuth & Permissions": +# https:///auth/slack.callback +SLACK_CLIENT_ID=get_a_key_from_slack +SLACK_CLIENT_SECRET=get_the_secret_of_above_key + +# To configure Google auth, you'll need to create an OAuth Client ID at +# => https://console.cloud.google.com/apis/credentials +# +# When configuring the Client ID, add an Authorized redirect URI: +# https:///auth/google.callback +GOOGLE_CLIENT_ID= +GOOGLE_CLIENT_SECRET= + +# To configure Microsoft/Azure auth, you'll need to create an OAuth Client. See +# the guide for details on setting up your Azure App: +# => https://wiki.generaloutline.com/share/dfa77e56-d4d2-4b51-8ff8-84ea6608faa4 +AZURE_CLIENT_ID= +AZURE_CLIENT_SECRET= +AZURE_RESOURCE_APP_ID= + +# To configure generic OIDC auth, you'll need some kind of identity provider. +# See documentation for whichever IdP you use to acquire the following info: +# Redirect URI is https:///auth/oidc.callback +OIDC_CLIENT_ID=36ee5cab035ef758def9fa77f8c67f3cc8e6d7f0 +OIDC_CLIENT_SECRET=dbf386e86a69c696950d8766e0f8ed5a231c3361a42f9a7c0e290efa9a3239bce503a1dea0c968f861a3eb0cd50c0544b4be71f356006d2c38b1450999f9b0a6 +OIDC_AUTH_URI=https://authentik.alexlebens.net/application/o/authorize/ +OIDC_TOKEN_URI=https://authentik.alexlebens.net/application/o/token/ +OIDC_USERINFO_URI=https://authentik.alexlebens.net/application/o/userinfo/ + +# Specify which claims to derive user information from +# Supports any valid JSON path with the JWT payload +OIDC_USERNAME_CLAIM=email + +# Display name for OIDC authentication +OIDC_DISPLAY_NAME=Authentik + +# Space separated auth scopes. +OIDC_SCOPES=openid profile email + + +# –––––––––––––––– OPTIONAL –––––––––––––––– + +# Base64 encoded private key and certificate for HTTPS termination. This is only +# required if you do not use an external reverse proxy. See documentation: +# https://wiki.generaloutline.com/share/1c922644-40d8-41fe-98f9-df2b67239d45 +SSL_KEY= +SSL_CERT= + +# If using a Cloudfront/Cloudflare distribution or similar it can be set below. +# This will cause paths to javascript, stylesheets, and images to be updated to +# the hostname defined in CDN_URL. In your CDN configuration the origin server +# should be set to the same as URL. +CDN_URL= + +# Auto-redirect to https in production. The default is true but you may set to +# false if you can be sure that SSL is terminated at an external loadbalancer. +FORCE_HTTPS=false + +# Have the installation check for updates by sending anonymized statistics to +# the maintainers +ENABLE_UPDATES=false + +# How many processes should be spawned. As a reasonable rule divide your servers +# available memory by 512 for a rough estimate +WEB_CONCURRENCY=1 + +# Override the maximum size of document imports, could be required if you have +# especially large Word documents with embedded imagery +MAXIMUM_IMPORT_SIZE=5120000 + +# You can remove this line if your reverse proxy already logs incoming http +# requests and this ends up being duplicative +DEBUG=http + +# For a complete Slack integration with search and posting to channels the +# following configs are also needed, some more details +# => https://wiki.generaloutline.com/share/be25efd1-b3ef-4450-b8e5-c4a4fc11e02a +# +SLACK_VERIFICATION_TOKEN=your_token +SLACK_APP_ID=A0XXXXXXX +SLACK_MESSAGE_ACTIONS=true + +# Optionally enable google analytics to track pageviews in the knowledge base +GOOGLE_ANALYTICS_ID= + +# Optionally enable Sentry (sentry.io) to track errors and performance, +# and optionally add a Sentry proxy tunnel for bypassing ad blockers in the UI: +# https://docs.sentry.io/platforms/javascript/troubleshooting/#using-the-tunnel-option) +SENTRY_DSN= +SENTRY_TUNNEL= + +# To support sending outgoing transactional emails such as "document updated" or +# "you've been invited" you'll need to provide authentication for an SMTP server +SMTP_HOST= +SMTP_PORT= +SMTP_USERNAME= +SMTP_PASSWORD= +SMTP_FROM_EMAIL= +SMTP_REPLY_EMAIL= +SMTP_TLS_CIPHERS= +SMTP_SECURE=true + +# The default interface language. See translate.getoutline.com for a list of +# available language codes and their rough percentage translated. +DEFAULT_LANGUAGE=en_US + +# Optionally enable rate limiter at application web server +RATE_LIMITER_ENABLED=true + +# Configure default throttling parameters for rate limiter +RATE_LIMITER_REQUESTS=1000 +RATE_LIMITER_DURATION_WINDOW=60 \ No newline at end of file diff --git a/Outline/README.md b/Outline/README.md new file mode 100644 index 0000000..6ee4a04 --- /dev/null +++ b/Outline/README.md @@ -0,0 +1,3 @@ +# Outline + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Outline/status.svg)](https://drone.alexlebens.net/alexlebens/Outline) \ No newline at end of file diff --git a/Outline/UptimeKuma/docker-1.json b/Outline/UptimeKuma/docker-1.json new file mode 100644 index 0000000..6c6fee1 --- /dev/null +++ b/Outline/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Outline Server - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://outline.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "outline_server", + "docker_host": 1 +} \ No newline at end of file diff --git a/Outline/UptimeKuma/docker-2.json b/Outline/UptimeKuma/docker-2.json new file mode 100644 index 0000000..d9ef0b1 --- /dev/null +++ b/Outline/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Outline Postgres - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://outline.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "outline_postgres", + "docker_host": 1 +} \ No newline at end of file diff --git a/Outline/UptimeKuma/docker-3.json b/Outline/UptimeKuma/docker-3.json new file mode 100644 index 0000000..70a0af0 --- /dev/null +++ b/Outline/UptimeKuma/docker-3.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Outline Redis - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://outline.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "outline_redis", + "docker_host": 1 +} \ No newline at end of file diff --git a/Outline/UptimeKuma/http-1.json b/Outline/UptimeKuma/http-1.json new file mode 100644 index 0000000..15b0be9 --- /dev/null +++ b/Outline/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Outline - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://outline.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Outline/docker-compose.yml b/Outline/docker-compose.yml new file mode 100644 index 0000000..7c8a3af --- /dev/null +++ b/Outline/docker-compose.yml @@ -0,0 +1,88 @@ +services: + postgres: + container_name: outline_postgres + env_file: + - .env + image: postgres:14 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: unless-stopped + volumes: + - postgres:/var/lib/postgresql/data + + redis: + container_name: outline_redis + env_file: + - .env + healthcheck: + test: [ "CMD", "redis-cli", "ping" ] + interval: 10s + timeout: 30s + retries: 3 + image: redis:7 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: unless-stopped + volumes: + - redis:/data + + outline: + container_name: outline_server + depends_on: + - postgres + - redis + env_file: + - .env + image: outlinewiki/outline:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.outline.entrypoints: websecure + traefik.http.routers.outline.rule: Host(`outline.alexlebens.net`) + traefik.http.routers.outline.service: outline + traefik.http.services.outline.loadbalancer.server.port: 3000 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + +networks: + traefik: + name: traefik + external: true + +volumes: + storage: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/outline_storage + + postgres: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/outline_postgres + + redis: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/outline_redis \ No newline at end of file diff --git a/Overseerr/.drone.yml b/Overseerr/.drone.yml new file mode 100644 index 0000000..a17582d --- /dev/null +++ b/Overseerr/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Overseerr + URL: overseerr.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Overseerr failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Overseerr failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Overseerr succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Overseerr failed. + when: + status: + - failure diff --git a/Overseerr/README.md b/Overseerr/README.md new file mode 100644 index 0000000..5700352 --- /dev/null +++ b/Overseerr/README.md @@ -0,0 +1,3 @@ +# Overseerr + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Overseerr/status.svg)](https://drone.alexlebens.net/alexlebens/Overseerr) \ No newline at end of file diff --git a/Overseerr/UptimeKuma/docker-1.json b/Overseerr/UptimeKuma/docker-1.json new file mode 100644 index 0000000..923f0d2 --- /dev/null +++ b/Overseerr/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Overseerr - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://overseerr.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "overseerr", + "docker_host": 1 +} \ No newline at end of file diff --git a/Overseerr/UptimeKuma/http-1.json b/Overseerr/UptimeKuma/http-1.json new file mode 100644 index 0000000..cd34aa7 --- /dev/null +++ b/Overseerr/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Overseerr - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://overseerr.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Overseerr/docker-compose.yml b/Overseerr/docker-compose.yml new file mode 100644 index 0000000..25a8b9e --- /dev/null +++ b/Overseerr/docker-compose.yml @@ -0,0 +1,38 @@ +services: + overseerr: + container_name: overseerr + environment: + - LOG_LEVEL=debug + - TZ=America/Denver + image: sctx/overseerr:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.overseerr.entrypoints: websecure + traefik.http.routers.overseerr.rule: Host(`overseerr.alexlebens.net`) + traefik.http.routers.overseerr.service: overseerr + traefik.http.services.overseerr.loadbalancer.server.port: 5055 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.35 + restart: always + volumes: + - overseerr:/app/config + +networks: + traefik: + name: traefik + external: true + +volumes: + overseerr: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/servarr_overseerr diff --git a/Pihole/.drone.yml b/Pihole/.drone.yml new file mode 100644 index 0000000..57110d3 --- /dev/null +++ b/Pihole/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Pihole + URL: pihole.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Pihole failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Pihole failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Pihole succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Pihole failed. + when: + status: + - failure diff --git a/Pihole/.env b/Pihole/.env new file mode 100644 index 0000000..3a0defd --- /dev/null +++ b/Pihole/.env @@ -0,0 +1,10 @@ +TZ='America/Denver' +WEBPASSWORD=gladisent +RATE_LIMIT=0/0 +FTLCONF_MAXDBDAYS=14 +PIHOLE_HOSTNAME=172.27.1.3 +PIHOLE_API_TOKEN='28ac460edf5a18ea7f69751d74b3e4959d310ffb56c6db8e9e99d1d8ef53b53f' +PIHOLE_PROTOCOL=http +PIHOLE_PORT=80 +INTERVAL=30s +PORT=9617 \ No newline at end of file diff --git a/Pihole/README.md b/Pihole/README.md new file mode 100644 index 0000000..91fabfd --- /dev/null +++ b/Pihole/README.md @@ -0,0 +1,3 @@ +# Pihole + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Pihole/status.svg)](https://drone.alexlebens.net/alexlebens/Pihole) \ No newline at end of file diff --git a/Pihole/UptimeKuma/docker-1.json b/Pihole/UptimeKuma/docker-1.json new file mode 100644 index 0000000..4a736ba --- /dev/null +++ b/Pihole/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Pihole - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://pihole.alexlebens.net/admin", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "pihole", + "docker_host": 1 +} \ No newline at end of file diff --git a/Pihole/UptimeKuma/docker-2.json b/Pihole/UptimeKuma/docker-2.json new file mode 100644 index 0000000..c996471 --- /dev/null +++ b/Pihole/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Pihole Exporter - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "http://pihole_exporter:9617/metrics", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "pihole_exporter", + "docker_host": 1 +} \ No newline at end of file diff --git a/Pihole/UptimeKuma/http-1.json b/Pihole/UptimeKuma/http-1.json new file mode 100644 index 0000000..be4e508 --- /dev/null +++ b/Pihole/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Pihole - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://pihole.alexlebens.net/admin", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Pihole/UptimeKuma/http-2.json b/Pihole/UptimeKuma/http-2.json new file mode 100644 index 0000000..50bab54 --- /dev/null +++ b/Pihole/UptimeKuma/http-2.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Pihole Exporter - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "http://pihole_exporter:9617/metrics", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Pihole/docker-compose.yml b/Pihole/docker-compose.yml new file mode 100644 index 0000000..25969ca --- /dev/null +++ b/Pihole/docker-compose.yml @@ -0,0 +1,71 @@ +services: + pihole: + container_name: pihole + env_file: + - .env + image: pihole/pihole:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.pihole.entrypoints: websecure + traefik.http.routers.pihole.rule: Host(`pihole.alexlebens.net`) + traefik.http.routers.pihole.service: pihole + traefik.http.services.pihole.loadbalancer.server.port: 80 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.3 + restart: always + privileged: true + volumes: + - config:/etc/pihole + - dnsmasq:/etc/dnsmasq.d + - logs:/var/log + + pihole_exporter: + container_name: pihole_exporter + depends_on: + - pihole + env_file: + - .env + image: ekofr/pihole-exporter:v0.3.0 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.4 + restart: unless-stopped + +networks: + traefik: + name: traefik + external: true + +volumes: + config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/pihole_config + + dnsmasq: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/pihole_dnsmasq + + logs: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/pihole_logs \ No newline at end of file diff --git a/Piped/.drone.yml b/Piped/.drone.yml new file mode 100644 index 0000000..91fd951 --- /dev/null +++ b/Piped/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Piped + URL: piped.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Piped failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Piped failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Piped succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Piped failed. + when: + status: + - failure diff --git a/Piped/.pgs.env b/Piped/.pgs.env new file mode 100644 index 0000000..619f165 --- /dev/null +++ b/Piped/.pgs.env @@ -0,0 +1,3 @@ +POSTGRES_DB=piped +POSTGRES_USER=piped +POSTGRES_PASSWORD=13qeadzc24wrsfxv \ No newline at end of file diff --git a/Piped/Files/piped_config/config.properties b/Piped/Files/piped_config/config.properties new file mode 100644 index 0000000..71d8c59 --- /dev/null +++ b/Piped/Files/piped_config/config.properties @@ -0,0 +1,81 @@ +# The port to Listen on. +PORT:8080 +# The number of workers to use for the server +HTTP_WORKERS:2 + +# Proxy +PROXY_PART:https://piped.alexlebens.net + +# Outgoing HTTP Proxy - eg: 127.0.0.1:8118 +#HTTP_PROXY: 127.0.0.1:8118 + +# Captcha Parameters +CAPTCHA_BASE_URL:https://api.capmonster.cloud/ +CAPTCHA_API_KEY:INSERT_HERE + +# Public API URL +API_URL:https://piped.alexlebens.net + +# Public Frontend URL +FRONTEND_URL:https://piped.alexlebens.net + +# Enable haveibeenpwned compromised password API +COMPROMISED_PASSWORD_CHECK:true + +# Disable Registration +DISABLE_REGISTRATION:false + +# Feed Retention Time in Days +FEED_RETENTION:30 + +# Disable CPU expensive timers (for nodes with low CPU, at least one node should have this disabled) +DISABLE_TIMERS:false + +# RYD Proxy URL (see https://github.com/TeamPiped/RYD-Proxy) +# RYD_PROXY_URL:https://ryd-proxy.kavin.rocks + +# SponsorBlock Servers(s) +# Comma separated list of SponsorBlock Servers to use +SPONSORBLOCK_SERVERS:https://sponsor.ajay.app,https://sponsorblock.kavin.rocks + +# Disable the usage of RYD +DISABLE_RYD:false + +# Disable API server (node just runs timers if enabled) +DISABLE_SERVER:false + +# Disable the inclusion of LBRY streams +DISABLE_LBRY:false + +# How long should unauthenticated subscriptions last for +SUBSCRIPTIONS_EXPIRY:30 + +# Sentry DSN +# Use Sentry to log errors and trace performance +#SENTRY_DSN:INSERT_HERE + +# Matrix Client Server URL +# MATRIX_SERVER:https://matrix-client.matrix.org +# Matrix Access Token +# If not present, will work in anon mode +#MATRIX_TOKEN:INSERT_HERE + +# Geo Restriction Checker for federated bypassing of Geo Restrictions +#GEO_RESTRICTION_CHECKER_URL:INSERT_HERE + +# S3 Configuration Data (compatible with any provider that offers an S3 compatible API) +#S3_ENDPOINT:INSERT_HERE +#S3_ACCESS_KEY:INSERT_HERE +#S3_SECRET_KEY:INSERT_HERE +#S3_BUCKET:INSERT_HERE + +# Hibernate properties +hibernate.connection.url:jdbc:postgresql://piped_postgres:5432/piped +hibernate.connection.driver_class:org.postgresql.Driver +hibernate.dialect:org.hibernate.dialect.PostgreSQLDialect +hibernate.connection.username:piped +hibernate.connection.password:13qeadzc24wrsfxv + +# Frontend configuration +#frontend.statusPageUrl:https://kavin.rocks +#frontend.donationUrl:https://kavin.rocks \ No newline at end of file diff --git a/Piped/README.md b/Piped/README.md new file mode 100644 index 0000000..a068304 --- /dev/null +++ b/Piped/README.md @@ -0,0 +1,3 @@ +# Piped + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Piped/status.svg)](https://drone.alexlebens.net/alexlebens/Piped) \ No newline at end of file diff --git a/Piped/UptimeKuma/docker-1.json b/Piped/UptimeKuma/docker-1.json new file mode 100644 index 0000000..ebde530 --- /dev/null +++ b/Piped/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Piped - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://piped.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "piped", + "docker_host": 1 +} \ No newline at end of file diff --git a/Piped/UptimeKuma/docker-2.json b/Piped/UptimeKuma/docker-2.json new file mode 100644 index 0000000..af1d4ac --- /dev/null +++ b/Piped/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Piped Postgres - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://piped.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "piped_postgres", + "docker_host": 1 +} \ No newline at end of file diff --git a/Piped/UptimeKuma/http-1.json b/Piped/UptimeKuma/http-1.json new file mode 100644 index 0000000..29aa29c --- /dev/null +++ b/Piped/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Piped - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://piped.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Piped/docker-compose.yml b/Piped/docker-compose.yml new file mode 100644 index 0000000..bf413aa --- /dev/null +++ b/Piped/docker-compose.yml @@ -0,0 +1,61 @@ +services: + postgres: + container_name: piped_postgres + env_file: + - .pgs.env + image: postgres:15-alpine + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + privileged: true + volumes: + - data:/var/lib/postgresql/data + + piped: + container_name: piped + depends_on: + - postgres + image: 1337kavin/piped:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.piped.entrypoints: websecure + traefik.http.routers.piped.rule: Host(`piped.alexlebens.net`) + traefik.http.routers.piped.service: piped + traefik.http.services.piped.loadbalancer.server.port: 8080 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + privileged: true + volumes: + - /var/lib/docker/volumes/partition/piped_config/config.properties:/app/config.properties + +networks: + traefik: + name: traefik + external: true + +volumes: + data: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/piped_data + + config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/piped_config \ No newline at end of file diff --git a/Plex/.drone.yml b/Plex/.drone.yml new file mode 100644 index 0000000..3eee5fa --- /dev/null +++ b/Plex/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Plex + URL: plex.alexlebens.net tautulli.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Plex failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Plex failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Plex succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Plex failed. + when: + status: + - failure diff --git a/Plex/.env b/Plex/.env new file mode 100644 index 0000000..54883f2 --- /dev/null +++ b/Plex/.env @@ -0,0 +1,9 @@ +PUID=1000 +PGID=1000 +TZ=America/Denver + +ADVERTISE_IP=https://plex.alexlebens.net:443 +HOSTNAME=plex.alexlebens.net +PLEX_CLAIM=claim-qtyC1fQVn6C7Cd4-jfBo +PLEX_UID=1000 +PLEX_GID=1000 \ No newline at end of file diff --git a/Plex/Files/plex_meta_manager/Anime/Top.yml b/Plex/Files/plex_meta_manager/Anime/Top.yml new file mode 100644 index 0000000..2f96df4 --- /dev/null +++ b/Plex/Files/plex_meta_manager/Anime/Top.yml @@ -0,0 +1,19 @@ +templates: + collection_tvtop: + sync_mode: sync + smart_label: originally_available.desc + sonarr_add_missing: false + sonarr_tag: pmm_tvtop + +collections: + Trending: + template: { name: collection_tvtop } + trakt_trending: 40 + summary: Shows Trending across the internet + + Popular: + template: { name: collection_tvtop } + imdb_list: + url: https://www.imdb.com/search/title/?title_type=tv_series,tv_miniseries + limit: 40 + summary: Popular Shows across the internet diff --git a/Plex/Files/plex_meta_manager/AnimeMovies/Awards.yml b/Plex/Files/plex_meta_manager/AnimeMovies/Awards.yml new file mode 100644 index 0000000..8670eb1 --- /dev/null +++ b/Plex/Files/plex_meta_manager/AnimeMovies/Awards.yml @@ -0,0 +1,60 @@ +templates: + collection_alpha: + sync_mode: sync + collection_order: alpha + radarr_add_missing: false + radarr_tag: pmm_awards + + collection_release: + sync_mode: sync + collection_order: release + radarr_add_missing: false + radarr_tag: pmm_awards + +collections: + Academy Awards: + template: { name: collection_release } + imdb_list: https://www.imdb.com/search/title/?title_type=feature,documentary&groups=oscar_winner + summary: Oscar Winning Movies + + Razzie Award: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls066716172/ + summary: The Razzies are an awards banquet that honors the worst in films from a year. They are the opposite to the Oscars. This list will reflect on the films that have won the Worst Picture award from the beginning in 1980 to present day. Here are the films that "won" Worst Picture. + + César Award: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls024896765/ + summary: The César Award is the national film award of France. It is delivered in the Nuit des César ceremony and was first awarded in 1976. + + Annie Awards: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls086556605/ + summary: The Annie Awards are accolades which the Los Angeles branch of the International Animated Film Association, ASIFA-Hollywood, has presented each year since 1972 to recognize excellence in animation shown in cinema and television. + + Sundance Film Festival: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls033136048/ + summary: A comprehensive list of all of the full length films that have screened at the Sundance Film Festival. + + Cinefest: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls095591734/ + summary: Cinéfest Sudbury International Film Festival, also known as Cinéfest and Cinéfest Sudbury is an annual film festival in Greater Sudbury, Ontario, Canada, held over nine days each September. It is one of the largest film festivals in Canada. + + Berlin International Film Festival: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls076602311/ + summary: The Berlin International Film Festival, usually called the Berlinale, is a film festival held annually in Berlin, Germany. + + Palme d'Or Winners: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls066281181/ + summary: The Palme d'Or (Golden Palm) is the highest prize awarded at the Cannes Film Festival. It was introduced in 1955 by the organising committee. From 1939 to 1954, the highest prize was the Grand Prix du Festival International du Film. + + American Film Institute: + template: { name: collection_alpha } + imdb_list: https://www.imdb.com/list/ls062266402/ + summary: American Film Institute "100 Greatest American Movies" + radarr_add_missing: false + radarr_tag: pmm_awards diff --git a/Plex/Files/plex_meta_manager/AnimeMovies/Collections.yml b/Plex/Files/plex_meta_manager/AnimeMovies/Collections.yml new file mode 100644 index 0000000..bfe4b46 --- /dev/null +++ b/Plex/Files/plex_meta_manager/AnimeMovies/Collections.yml @@ -0,0 +1,72 @@ +templates: + collection: + optional: + - collection + - movie + tmdb_collection_details: <> + tmdb_movie: <> + sync_mode: sync + radarr_add_missing: false + radarr_tag: pmm_collections + +collections: + Appleseed: + template: { name: collection, collection: "87800, 371526" } + + Berserk Golden Age Arc: + template: { name: collection, collection: 118415 } + + Evangelion: + template: { name: collection, collection: 96850, 210303 } + + Final Fantasy: + template: { name: collection } + imdb_list: https://www.imdb.com/list/ls022264056/ + summary: A collection of films based off or closely associated with the Final Fantasy video games. + + Ghost in the Shell: + template: { name: collection, collection: "23026, 443996, 196753" } + + Godzilla (Anime): + template: { name: collection, collection: 535790 } + sort_title: Godzilla 04 (Anime) + + Made in Abyss: + template: { name: collection, collection: 688209 } + + Megazone 23: + template: { name: collection, collection: 452942 } + + My Hero Academia: + template: { name: collection, collection: 662002 } + + Patlabor: + template: { name: collection, collection: 98435 } + + Pokémon: + template: { name: collection } + imdb_list: https://www.imdb.com/list/ls062687939/ + summary: Pokémon is a media franchise created by video game designer Satoshi Tajiri that centers on fictional creatures called Pokémon. As of 2020, there have been 23 animated films and one live action film. The first nineteen animated films are based on the anime television series of the same name, with the original film being remade into the 22nd. The 20th, 21st and 23rd animated films are set in an alternate continuity to the anime. + + Godzilla (Showa): + template: { name: collection, collection: 374509, movie: 18983 } + sort_title: Godzilla 01 (Showa) + + Godzilla (Heisei): + template: { name: collection, collection: 374511, movie: 39256 } + sort_title: Godzilla 02 (Heisei) + + Godzilla (Millennium): + template: { name: collection, collection: 374512 } + sort_title: Godzilla 03 (Millennium) + + Godzilla (MonsterVerse): + template: { name: collection, collection: 535313, movie: 293167 } + sort_title: Godzilla 04 (MonsterVerse) + + Mobile Suit Gundam: + template: + { + name: collection, + collection: "143302, 213276, 468692, 525348, 143152, 376552, 802636, 802649", + } diff --git a/Plex/Files/plex_meta_manager/AnimeMovies/Top.yml b/Plex/Files/plex_meta_manager/AnimeMovies/Top.yml new file mode 100644 index 0000000..de26f1d --- /dev/null +++ b/Plex/Files/plex_meta_manager/AnimeMovies/Top.yml @@ -0,0 +1,45 @@ +templates: + collection_top: + sort_title: +++++++++++++++++++_<> + sync_mode: sync + radarr_add_missing: false + radarr_tag: pmm_top + +collections: + Trending: + template: { name: collection_top, sort: 1Trending } + trakt_trending: 40 + tmdb_trending_daily: 40 + tmdb_trending_weekly: 40 + smart_label: year.desc + summary: Movies Trending across the internet + url_background: https://i.imgur.com/SOVfrIq.png + url_poster: https://i.imgur.com/4vpMZoA.png + + Popular: + template: { name: collection_top, sort: 2Popular } + tmdb_popular: 40 + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,documentary,short + limit: 40 + smart_label: year.desc + summary: Popular Movies across the internet + url_background: https://i.imgur.com/SOVfrIq.png + url_poster: https://i.imgur.com/4cI2Jg4.png + + Top Rated: + template: { name: collection_top, sort: 3Top Rated } + imdb_list: https://www.imdb.com/search/title/?groups=top_250&count=250 + tmdb_top_rated: 250 + smart_label: critic_rating.desc + summary: Top Rated Movies + url_background: https://i.imgur.com/b26VZ9y.jpg + url_poster: https://i.imgur.com/x7BhedD.png + + Newly Released Movies: + template: { name: collection_top, sort: 4Newly Released } + smart_label: added.desc + trakt_list: https://trakt.tv/users/giladg/lists/latest-releases + summary: A collection of newly-released movies in cinema and on streaming services + url_poster: https://i.imgur.com/D62EdJd.jpg + url_background: https://wallpaperbat.com/img/23094-cinema-hd-wallpaper-top-free-cinema-hd-background.jpg diff --git a/Plex/Files/plex_meta_manager/Documentaries/Awards.yml b/Plex/Files/plex_meta_manager/Documentaries/Awards.yml new file mode 100644 index 0000000..8670eb1 --- /dev/null +++ b/Plex/Files/plex_meta_manager/Documentaries/Awards.yml @@ -0,0 +1,60 @@ +templates: + collection_alpha: + sync_mode: sync + collection_order: alpha + radarr_add_missing: false + radarr_tag: pmm_awards + + collection_release: + sync_mode: sync + collection_order: release + radarr_add_missing: false + radarr_tag: pmm_awards + +collections: + Academy Awards: + template: { name: collection_release } + imdb_list: https://www.imdb.com/search/title/?title_type=feature,documentary&groups=oscar_winner + summary: Oscar Winning Movies + + Razzie Award: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls066716172/ + summary: The Razzies are an awards banquet that honors the worst in films from a year. They are the opposite to the Oscars. This list will reflect on the films that have won the Worst Picture award from the beginning in 1980 to present day. Here are the films that "won" Worst Picture. + + César Award: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls024896765/ + summary: The César Award is the national film award of France. It is delivered in the Nuit des César ceremony and was first awarded in 1976. + + Annie Awards: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls086556605/ + summary: The Annie Awards are accolades which the Los Angeles branch of the International Animated Film Association, ASIFA-Hollywood, has presented each year since 1972 to recognize excellence in animation shown in cinema and television. + + Sundance Film Festival: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls033136048/ + summary: A comprehensive list of all of the full length films that have screened at the Sundance Film Festival. + + Cinefest: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls095591734/ + summary: Cinéfest Sudbury International Film Festival, also known as Cinéfest and Cinéfest Sudbury is an annual film festival in Greater Sudbury, Ontario, Canada, held over nine days each September. It is one of the largest film festivals in Canada. + + Berlin International Film Festival: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls076602311/ + summary: The Berlin International Film Festival, usually called the Berlinale, is a film festival held annually in Berlin, Germany. + + Palme d'Or Winners: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls066281181/ + summary: The Palme d'Or (Golden Palm) is the highest prize awarded at the Cannes Film Festival. It was introduced in 1955 by the organising committee. From 1939 to 1954, the highest prize was the Grand Prix du Festival International du Film. + + American Film Institute: + template: { name: collection_alpha } + imdb_list: https://www.imdb.com/list/ls062266402/ + summary: American Film Institute "100 Greatest American Movies" + radarr_add_missing: false + radarr_tag: pmm_awards diff --git a/Plex/Files/plex_meta_manager/Documentaries/Top.yml b/Plex/Files/plex_meta_manager/Documentaries/Top.yml new file mode 100644 index 0000000..de26f1d --- /dev/null +++ b/Plex/Files/plex_meta_manager/Documentaries/Top.yml @@ -0,0 +1,45 @@ +templates: + collection_top: + sort_title: +++++++++++++++++++_<> + sync_mode: sync + radarr_add_missing: false + radarr_tag: pmm_top + +collections: + Trending: + template: { name: collection_top, sort: 1Trending } + trakt_trending: 40 + tmdb_trending_daily: 40 + tmdb_trending_weekly: 40 + smart_label: year.desc + summary: Movies Trending across the internet + url_background: https://i.imgur.com/SOVfrIq.png + url_poster: https://i.imgur.com/4vpMZoA.png + + Popular: + template: { name: collection_top, sort: 2Popular } + tmdb_popular: 40 + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,documentary,short + limit: 40 + smart_label: year.desc + summary: Popular Movies across the internet + url_background: https://i.imgur.com/SOVfrIq.png + url_poster: https://i.imgur.com/4cI2Jg4.png + + Top Rated: + template: { name: collection_top, sort: 3Top Rated } + imdb_list: https://www.imdb.com/search/title/?groups=top_250&count=250 + tmdb_top_rated: 250 + smart_label: critic_rating.desc + summary: Top Rated Movies + url_background: https://i.imgur.com/b26VZ9y.jpg + url_poster: https://i.imgur.com/x7BhedD.png + + Newly Released Movies: + template: { name: collection_top, sort: 4Newly Released } + smart_label: added.desc + trakt_list: https://trakt.tv/users/giladg/lists/latest-releases + summary: A collection of newly-released movies in cinema and on streaming services + url_poster: https://i.imgur.com/D62EdJd.jpg + url_background: https://wallpaperbat.com/img/23094-cinema-hd-wallpaper-top-free-cinema-hd-background.jpg diff --git a/Plex/Files/plex_meta_manager/DocumentaryShows/Channels.yml b/Plex/Files/plex_meta_manager/DocumentaryShows/Channels.yml new file mode 100644 index 0000000..d44bc43 --- /dev/null +++ b/Plex/Files/plex_meta_manager/DocumentaryShows/Channels.yml @@ -0,0 +1,63 @@ +templates: + collection_tvchannels: + smart_label: originally_available.desc + sync_mode: sync + url_poster: <> + sort_title: +++++++++++++++++++++_ <> + sonarr_add_missing: false + sonarr_tag: pmm_tvchannels + +collections: + ABC: + template: + { name: Studio, poster: https://theposterdb.com/api/assets/113115 } + tmdb_network: 2 + summary: Shows Aired on ABC + + AMC: + template: + { name: Studio, poster: https://theposterdb.com/api/assets/113118 } + tmdb_network: 174 + summary: Shows Aired on AMC + + BBC: + template: + { name: Studio, poster: https://theposterdb.com/api/assets/113123 } + tmdb_network: 4 + summary: Shows Aired on BBC One + + CBS: + template: + { name: Studio, poster: https://theposterdb.com/api/assets/113138 } + tmdb_network: 16 + summary: Shows Aired on CBS + + FOX: + template: + { name: Studio, poster: https://theposterdb.com/api/assets/113173 } + tmdb_network: 19 + summary: Shows Aired on FOX + + NBC: + template: + { name: Studio, poster: https://theposterdb.com/api/assets/113217 } + tmdb_network: 6 + summary: Shows Aired on NBC + + Showtime: + template: + { name: Studio, poster: https://theposterdb.com/api/assets/113257 } + tmdb_network: 67 + summary: Showtime Orginal Shows + + Starz: + template: + { name: Studio, poster: https://theposterdb.com/api/assets/113265 } + tmdb_network: 318 + summary: Starz Orginal Shows + + SyFy: + template: + { name: Studio, poster: https://theposterdb.com/api/assets/113267 } + tmdb_network: 77 + summary: Shows Aired on SYFY diff --git a/Plex/Files/plex_meta_manager/DocumentaryShows/Studios.yml b/Plex/Files/plex_meta_manager/DocumentaryShows/Studios.yml new file mode 100644 index 0000000..ab01925 --- /dev/null +++ b/Plex/Files/plex_meta_manager/DocumentaryShows/Studios.yml @@ -0,0 +1,48 @@ +templates: + collection_tvstudios: + smart_label: originally_available.desc + sort_title: +++++++++++++++++++++_ <> + sync_mode: sync + sonarr_add_missing: false + sonarr_tag: pmm_tvstudios + +collections: + Apple Original Series 2000-2025: + template: { name: collection_tvstudios, sort: 1APPLE } + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,tv_series,tv_special,tv_miniseries,documentary,video,tv_short&release_date=2000-01-01,2025-12-31&genres=!animation&countries=us&languages=en&sort=release_date,desc&count=250&companies=co0546168 + summary: All Apple TV Original Series/Shows From 2000-2025 + url_poster: https://i.imgur.com/O9iWork.png + url_background: https://wallpaper-house.com/data/out/8/wallpaper2you_228774.png + + Amazon Original Series 2000-2025: + template: { name: collection_tvstudios, sort: 2AMAZON } + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,tv_series,tv_special,tv_miniseries,documentary,video,tv_short&release_date=2000-01-01,2025-12-31&genres=!animation&countries=us&languages=en&sort=release_date,desc&count=250&companies=co0319272 + summary: All Apple TV Original Series/Shows From 2000-2025 + url_poster: https://i.imgur.com/nU3gqqB.png + url_background: https://i.imgur.com/2jfs7oS.png + + Netflix Original Series 2000-2025: + template: { name: collection_tvstudios, sort: 3NETFLIX } + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,tv_series,tv_special,tv_miniseries,documentary,video,tv_short&release_date=2000-01-01,2025-12-31&genres=!animation&countries=us&languages=en&sort=release_date,desc&count=250&companies=co0144901 + summary: All Netflix Original Series/Shows From 2000-2025 + url_poster: https://i.imgur.com/7kiE1MU.png + url_background: https://img5.goodfon.com/original/1920x1080/1/61/fon-netflix-logo-raduga-tsvet-fon-background-skachat-oboi-sk.jpg + + HBO Max Original Series 2000-2025: + template: { name: collection_tvstudios, sort: 4HBO } + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,tv_series,tv_special,tv_miniseries,documentary,video,tv_short&release_date=2000-01-01,2025-12-31&genres=!animation&countries=us&languages=en&sort=release_date,desc&count=250&companies=co0754095 + summary: All HBO Max Series/Shows From 2000-2025 + url_poster: https://i.redd.it/zxdvw3tk3f151.jpg + url_background: https://wallpapercave.com/wp/wp6402755.png + + HULU Original Series 2000-2025: + template: { name: collection_tvstudios, sort: 5HULU } + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,tv_series,tv_special,tv_miniseries,documentary,video,tv_short&release_date=2000-01-01,2025-12-31&genres=!animation&countries=us&languages=en&sort=release_date,desc&count=250&companies=co0218858 + summary: All HULU Original Series/Shows From 2000-2025 + url_poster: https://plexcollectionposters.com/images/2019/05/26/Hulu6ddad752a5ce9bac.jpg + url_background: https://cdn.vox-cdn.com/thumbor/oR4hqrmTxbX_O4gdJ6np8h-PxFk=/0x439:750x861/1600x900/cdn.vox-cdn.com/uploads/chorus_image/image/56311701/Image_uploaded_from_iOS__8_.1503433270.jpg diff --git a/Plex/Files/plex_meta_manager/DocumentaryShows/Top.yml b/Plex/Files/plex_meta_manager/DocumentaryShows/Top.yml new file mode 100644 index 0000000..2f96df4 --- /dev/null +++ b/Plex/Files/plex_meta_manager/DocumentaryShows/Top.yml @@ -0,0 +1,19 @@ +templates: + collection_tvtop: + sync_mode: sync + smart_label: originally_available.desc + sonarr_add_missing: false + sonarr_tag: pmm_tvtop + +collections: + Trending: + template: { name: collection_tvtop } + trakt_trending: 40 + summary: Shows Trending across the internet + + Popular: + template: { name: collection_tvtop } + imdb_list: + url: https://www.imdb.com/search/title/?title_type=tv_series,tv_miniseries + limit: 40 + summary: Popular Shows across the internet diff --git a/Plex/Files/plex_meta_manager/Movies/Awards.yml b/Plex/Files/plex_meta_manager/Movies/Awards.yml new file mode 100644 index 0000000..8670eb1 --- /dev/null +++ b/Plex/Files/plex_meta_manager/Movies/Awards.yml @@ -0,0 +1,60 @@ +templates: + collection_alpha: + sync_mode: sync + collection_order: alpha + radarr_add_missing: false + radarr_tag: pmm_awards + + collection_release: + sync_mode: sync + collection_order: release + radarr_add_missing: false + radarr_tag: pmm_awards + +collections: + Academy Awards: + template: { name: collection_release } + imdb_list: https://www.imdb.com/search/title/?title_type=feature,documentary&groups=oscar_winner + summary: Oscar Winning Movies + + Razzie Award: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls066716172/ + summary: The Razzies are an awards banquet that honors the worst in films from a year. They are the opposite to the Oscars. This list will reflect on the films that have won the Worst Picture award from the beginning in 1980 to present day. Here are the films that "won" Worst Picture. + + César Award: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls024896765/ + summary: The César Award is the national film award of France. It is delivered in the Nuit des César ceremony and was first awarded in 1976. + + Annie Awards: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls086556605/ + summary: The Annie Awards are accolades which the Los Angeles branch of the International Animated Film Association, ASIFA-Hollywood, has presented each year since 1972 to recognize excellence in animation shown in cinema and television. + + Sundance Film Festival: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls033136048/ + summary: A comprehensive list of all of the full length films that have screened at the Sundance Film Festival. + + Cinefest: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls095591734/ + summary: Cinéfest Sudbury International Film Festival, also known as Cinéfest and Cinéfest Sudbury is an annual film festival in Greater Sudbury, Ontario, Canada, held over nine days each September. It is one of the largest film festivals in Canada. + + Berlin International Film Festival: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls076602311/ + summary: The Berlin International Film Festival, usually called the Berlinale, is a film festival held annually in Berlin, Germany. + + Palme d'Or Winners: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls066281181/ + summary: The Palme d'Or (Golden Palm) is the highest prize awarded at the Cannes Film Festival. It was introduced in 1955 by the organising committee. From 1939 to 1954, the highest prize was the Grand Prix du Festival International du Film. + + American Film Institute: + template: { name: collection_alpha } + imdb_list: https://www.imdb.com/list/ls062266402/ + summary: American Film Institute "100 Greatest American Movies" + radarr_add_missing: false + radarr_tag: pmm_awards diff --git a/Plex/Files/plex_meta_manager/Movies/Collections.yml b/Plex/Files/plex_meta_manager/Movies/Collections.yml new file mode 100644 index 0000000..dc2beb7 --- /dev/null +++ b/Plex/Files/plex_meta_manager/Movies/Collections.yml @@ -0,0 +1,732 @@ +templates: + collection: + optional: + - collection + - movie + tmdb_collection_details: <> + tmdb_movie: <> + sync_mode: sync + radarr_add_missing: false + radarr_tag: pmm_collections + +collections: + DC Comics Universe: + template: { name: collection } + tmdb_list_details: 3 + url_poster: https://i.imgur.com/TJr35Au.jpeg + url_background: https://wallpaper.dog/large/17164614.jpg + + Fast and the Furious: + template: { name: collection } + trakt_list: https://trakt.tv/users/ireallylovevids/lists/fast-and-furious + url_poster: https://i.imgur.com/dPnWh1B.jpeg + url_background: https://images5.alphacoders.com/811/thumb-1920-811727.jpg + radarr_add_missing: true + + James Bond: + template: { name: collection } + trakt_list: https://trakt.tv/users/any/lists/james-bond + url_poster: https://i.imgur.com/DO6IDWi.jpeg + url_background: https://www.pixel4k.com/wp-content/uploads/2018/09/james-bond-007_1536401470.jpg + radarr_add_missing: true + + Jurassic Park: + template: { name: collection } + trakt_list: https://trakt.tv/users/darkman1498/lists/jurassic-park + url_poster: https://i.imgur.com/dj3gain.jpeg + url_background: https://www.teahub.io/photos/full/54-546246_2500x1200-jurassic-world-wallpapers-jurassic-park-wallpaper-4k.jpg + radarr_add_missing: true + + Lord of the Rings: + template: { name: collection } + trakt_list: https://trakt.tv/users/lutgnature/lists/lord-of-the-rings-hobbit + url_poster: https://i.imgur.com/xFbp0IR.jpeg + url_background: https://wallpaperaccess.com/full/838293.jpg + + Marvel Cinematic Universe: + template: { name: collection } + trakt_list: https://trakt.tv/users/jawann2002/lists/marvel-cinematic-universe-movies?sort=rank,asc + url_poster: https://i.imgur.com/iDi8DBe.jpeg + url_background: https://images.hdqwalls.com/download/marvel-cinematic-universe-jm-3840x2400.jpg + radarr_add_missing: true + + Spider-man Universe: + template: { name: collection } + trakt_list: https://trakt.tv/users/james_97/lists/spider-verse + url_poster: https://i.imgur.com/keYWzrL.jpeg + url_background: https://i.ibb.co/P59wtVs/download.jpg + radarr_add_missing: true + + Star Wars: + template: { name: collection } + trakt_list: https://trakt.tv/users/draackje/lists/star-wars + url_poster: https://i.imgur.com/jlLZuOr.jpeg + url_background: https://wallpaperaccess.com/full/1101749.jpg + radarr_add_missing: true + + Wizarding World of Harry Potter: + template: { name: collection } + tmdb_list_details: 63607 + url_poster: https://i.imgur.com/qjNHdhY.jpeg + url_background: https://wallpaperaccess.com/full/562430.jpg + sort_title: +09_Harry Potter + radarr_add_missing: true + + X-Men: + template: { name: collection } + trakt_list: https://trakt.tv/users/bertjj/lists/x-men + url_poster: https://i.imgur.com/GFamrIY.jpeg + url_background: https://s2.best-wallpaper.net/wallpaper/3840x2160/1607/X-Men-Days-of-Future-Past-Ultra-HD_3840x2160.jpg + radarr_add_missing: true + + Cornetto Trilogy: + template: { name: collection } + imdb_list: https://www.imdb.com/list/ls068623110/ + url_poster: https://theposterdb.com/api/assets/234 + url_background: https://imgur.com/k50sjBc + summary: An anthology series of British comedic genre films directed by Edgar Wright, written by Wright and Simon Pegg, produced by Nira Park, and starring Pegg and Nick Frost. The trilogy consists of Shaun of the Dead (2004), Hot Fuzz (2007), and The World's End (2013). + + The Angry Birds: + template: { name: collection, collection: 531315 } + + Charlie Brown: + template: { name: collection } + imdb_list: https://www.imdb.com/list/ls054850259/ + summary: Collection of Movies and TV Specials with the beloved Peanuts characters. + + Dead Space: + template: { name: collection, collection: 56005 } + + The Death of Superman: + template: { name: collection, collection: 593251 } + + Despicable Me: + template: { name: collection, collection: "86066, 544669" } + radarr_add_missing: true + + Fantasia: + template: { name: collection, collection: 55427 } + + Happy Feet: + template: { name: collection, collection: 92012 } + + Hotel Transylvania: + template: { name: collection, collection: 185103 } + + How to Train Your Dragon: + template: { name: collection, collection: 89137 } + radarr_add_missing: true + + Ice Age: + template: + { name: collection, collection: 8354, movie: "79218, 717095, 387893" } + + Inspector Gadget: + template: { name: collection, collection: 237445 } + + Justice League (Animated): + template: { name: collection, collection: 256287 } + + Justice League Dark: + template: { name: collection, collection: 702342 } + + Kung Fu Panda: + template: { name: collection, collection: 77816 } + radarr_add_missing: true + + The Lego Movies: + template: { name: collection, collection: "325470, 696630", movie: 274862 } + + Madagascar: + template: + { name: collection, collection: 14740, movie: "161143, 25472, 270946" } + + Paddington: + template: { name: collection, collection: 488924 } + radarr_add_missing: true + + The Rescuers: + template: { name: collection, collection: 57971 } + + Rio: + template: { name: collection, collection: 229932 } + + The Secret Life of Pets: + template: { name: collection, collection: 427084 } + + Shrek: + template: { name: collection, collection: 2150 } + + Teen Titans: + template: { name: collection, collection: 466894 } + + Teenage Mutant Ninja Turtles: + template: { name: collection, collection: "1582, 401562", movie: 1273 } + + Trolls: + template: { name: collection, collection: 489724 } + + Wreck-It Ralph: + template: { name: collection, collection: 404825 } + + 28 Days/Weeks Later: + template: { name: collection, collection: 1565 } + name_mapping: 28 Days-Weeks Later + + Ace Ventura: + template: { name: collection, collection: 3167 } + + Air Bud: + template: { name: collection, collection: 97445 } + + Airplane: + template: { name: collection, collection: 91663 } + + Alien: + template: { name: collection, collection: "8091, 135416, 115762" } + radarr_add_missing: true + + Anchorman: + template: { name: collection, collection: 93791 } + radarr_add_missing: true + + The Amazing Spider-Man: + template: { name: collection, collection: 125574 } + radarr_add_missing: true + + American Pie: + template: { name: collection, collection: "2806, 298820" } + + Austin Powers: + template: { name: collection, collection: 1006 } + radarr_add_missing: true + + Back to the Future: + template: { name: collection, collection: 264 } + radarr_add_missing: true + + Batman: + template: { name: collection, collection: 120794 } + + Battlestar Galactica: + template: { name: collection, collection: 91697 } + radarr_add_missing: true + + Before...: + template: { name: collection, collection: 123800 } + name_mapping: Before + radarr_add_missing: true + + Bill & Ted's Most Excellent: + template: { name: collection, collection: 91746 } + + The Black Stallion: + template: { name: collection, collection: 405393 } + + Blade Runner: + template: { name: collection, collection: 422837 } + radarr_add_missing: true + + Borat Moviefilms: + template: { name: collection, collection: 747168 } + radarr_add_missing: true + + The Bourne: + template: { name: collection, collection: 31562 } + radarr_add_missing: true + + The Chronicles of Narnia: + template: { name: collection, collection: 420 } + + The Chronicles of Riddick: + template: { name: collection, collection: 2794 } + + Clerks: + template: { name: collection, collection: 182813 } + + Cloverfield: + template: { name: collection } + imdb_list: https://www.imdb.com/list/ls021933730/ + summary: Cloverfield is an American science fiction anthology film series and media franchise created and produced by J. J. Abrams consisting of three films, viral marketing websites linking the films together, and a tie-in manga to the first film titled Cloverfield/Kishin (2008), all set in a shared fictional universe referred to as the "Cloververse". The franchise as a whole deals with creatures from other dimensions attacking Earth throughout various decades, all as a repercussion of an experiment by an astronaut team aboard the Cloverfield Station in outer-space. Each film depicts the reality-altering effects of their study, which was meant to find a new energy source replacing the planet's depleted resources, only to open portals for assault from various beasts from deep space. + + The Conjuring: + template: + { + name: collection, + collection: "313086, 402074", + movie: "439079, 480414", + } + + Crouching Tiger, Hidden Dragon: + template: { name: collection, collection: 290973 } + + The Dark Knight: + template: { name: collection, collection: 263 } + radarr_add_missing: true + + DC Extended Universe: + template: { name: collection } + imdb_list: https://www.imdb.com/list/ls047446610/ + summary: A series of live action movies based on the DC comic books, begining with Man of Steel in 2013. + radarr_add_missing: true + + Descendants: + template: { name: collection, collection: 466463 } + + Die Hard: + template: { name: collection, collection: 1570 } + + Dirty Harry: + template: { name: collection, collection: 10456 } + + Disney Buddies: + template: { name: collection, collection: 91657 } + + Divergent: + template: { name: collection, collection: 283579 } + + A Dog's Purpose: + template: { name: collection, collection: 591028 } + + Evil Dead: + template: { name: collection, collection: 1960 } + + Fantastic Four: + template: { name: collection, collection: 9744 } + + Fifty Shades: + template: { name: collection, collection: 344830 } + + Final Destination: + template: { name: collection, collection: 8864 } + + Friday the 13th: + template: { name: collection, collection: 9735, movie: "6466, 222724" } + + Ghostbusters: + template: { name: collection, collection: 2980, movie: 43074 } + + The Girl - Millennium: + template: { name: collection, collection: 575987 } + + The Godfather: + template: { name: collection, collection: 230 } + + Godzilla (Showa): + template: { name: collection, collection: 374509, movie: 18983 } + sort_title: Godzilla 01 (Showa) + + Godzilla (Heisei): + template: { name: collection, collection: 374511, movie: 39256 } + sort_title: Godzilla 02 (Heisei) + + Godzilla (Millennium): + template: { name: collection, collection: 374512 } + sort_title: Godzilla 03 (Millennium) + + Godzilla (MonsterVerse): + template: { name: collection, collection: 535313, movie: 293167 } + sort_title: Godzilla 04 (MonsterVerse) + + Halloween: + template: { name: collection, collection: "91361, 126209" } + + Halloweentown: + template: { name: collection, collection: 87252 } + + Halo: + template: { name: collection, collection: 606301 } + + The Hangover: + template: { name: collection, collection: 86119 } + radarr_add_missing: true + + Hannibal Lecter: + template: { name: collection, collection: 9743, movie: 11454 } + + ... Has Fallen: + template: { name: collection, collection: 386534 } + name_mapping: Has Fallen + + Hellboy: + template: { name: collection, collection: 17235, 123203 } + + High School Musical: + template: { name: collection, collection: 87253 } + + Hitman: + template: { name: collection, collection: 737031 } + + Home Alone: + template: { name: collection, collection: 9888 } + + Homeward Bound: + template: { name: collection, collection: 43058 } + + Honey, I Shrunk the Kids: + template: { name: collection, collection: 72119 } + + Horrible Bosses: + template: { name: collection, collection: 280588 } + + Hot Tub Time Machine: + template: { name: collection, collection: 313576 } + + The Hunger Games: + template: { name: collection, collection: 131635 } + radarr_add_missing: true + + An Inconvenient Truth: + template: { name: collection, collection: 539554 } + radarr_add_missing: true + + Independence Day: + template: { name: collection, collection: 304378 } + + Indiana Jones: + template: { name: collection, collection: 84 } + radarr_add_missing: true + + Insidious: + template: { name: collection, collection: 228446 } + + Ip Man: + template: + { + name: collection, + collection: 70068, + movie: "658009, 643413, 450001, 751391, 44249, 182127, 44865", + } + + It: + template: { name: collection, collection: 477962 } + + Jackass: + template: { name: collection, collection: 17178 } + radarr_add_missing: true + + Jaws: + template: { name: collection, collection: 2366 } + radarr_add_missing: true + + Jay and Silent Bob: + template: { name: collection, collection: 726870 } + + Jeremy Jones: + template: { name: collection, collection: 170474 } + radarr_add_missing: true + + John Wick: + template: { name: collection, collection: 404609 } + radarr_add_missing: true + + Johnny Tsunami: + template: { name: collection, collection: 394316 } + + Jumanji: + template: { name: collection, collection: 495527 } + + Jump Street: + template: { name: collection, collection: 212562 } + radarr_add_missing: true + + The Karate Kid: + template: { name: collection, collection: 8580, movie: 38575 } + + Kick-Ass: + template: { name: collection, collection: 179892 } + + Kill Bill: + template: { name: collection, collection: 2883 } + + Kingsman: + template: { name: collection, collection: 391860 } + + The Legend: + template: { name: collection, collection: 122945 } + + Lethal Weapon: + template: { name: collection, collection: 945 } + + Living Dead: + template: { name: collection, collection: 261590 } + + Mad Max: + template: { name: collection, collection: 8945 } + radarr_add_missing: true + + The Man with No Name: + template: { name: collection } + imdb_list: https://www.imdb.com/list/ls023916334/ + summary: An Italian film series consisting of three Spaghetti Western films directed by Sergio Leone. The films are titled A Fistful of Dollars (1964), For a Few Dollars More (1965) and The Good, the Bad and the Ugly (1966). The series has become known for establishing the Spaghetti Western genre, and inspiring the creation of many more Spaghetti Western films. The three films are consistently listed among the best rated Western films in history. + radarr_add_missing: true + + The Mask: + template: { name: collection, collection: 43072 } + + The Matrix: + template: { name: collection, collection: 2344 } + radarr_add_missing: true + + The Maze Runner: + template: { name: collection, collection: 295130 } + + Meet the Parents: + template: { name: collection, collection: 51509 } + + Men In Black: + template: { name: collection, collection: 86055 } + radarr_add_missing: true + + The Mighty Ducks: + template: { name: collection, collection: 10709 } + + "Mission: Impossible": + template: { name: collection, collection: 87359 } + name_mapping: Mission Impossible + radarr_add_missing: true + + Mortal Kombat: + template: + { name: collection, collection: 9818, movie: "664767, 460465, 40170" } + + The Mummy: + template: { name: collection, collection: 1733 } + radarr_add_missing: true + + The Muppets: + template: + { + name: collection, + collection: 256377, + movie: "10437, 10874, 14900, 11899, 11176, 20910, 13352", + } + + National Lampoon's Vacation: + template: { name: collection, collection: 108693 } + radarr_add_missing: true + + National Lampoon's Van Wilder: + template: { name: collection, collection: 43220 } + + National Treasure: + template: { name: collection, collection: 52984 } + radarr_add_missing: true + + Neighbors: + template: { name: collection, collection: 400700 } + + Night at the Museum: + template: { name: collection, collection: 85943 } + radarr_add_missing: true + + A Nightmare on Elm Street: + template: { name: collection, collection: 8581, movie: "6466, 23437" } + + Now You See Me: + template: { name: collection, collection: 382685 } + radarr_add_missing: true + + Ocean's: + template: { name: collection, collection: 304 } + radarr_add_missing: true + + Once Upon a Time in China: + template: { name: collection, collection: 10457 } + + Pacific Rim: + template: { name: collection, collection: 363369 } + + Paranormal Activity: + template: { name: collection, collection: 41437 } + + Pirates of the Caribbean: + template: { name: collection, collection: 295 } + radarr_add_missing: true + + Pitch Perfect: + template: { name: collection, collection: 306031 } + + Planet of the Apes: + template: { name: collection, collection: "1709, 173710, 522562" } + + Predator: + template: { name: collection, collection: 399 } + + The Princess Diaries: + template: { name: collection, collection: 107674 } + + The Purge: + template: { name: collection, collection: 256322 } + + The Raid: + template: { name: collection, collection: 257960 } + + Rambo: + template: { name: collection, collection: 5039 } + + RED: + template: { name: collection, collection: 163902 } + + Resident Evil: + template: { name: collection, collection: "17255, 133352" } + + The Ring: + template: { name: collection, collection: 14563 } + + Robert Langdon: + template: { name: collection, collection: 115776 } + radarr_add_missing: true + + RoboCop: + template: { name: collection, collection: 5547 } + + Rocky: + template: { name: collection, collection: 1575 } + + Rush Hour: + template: { name: collection, collection: 90863 } + + Samurai: + template: { name: collection, collection: 102452 } + + Samurai Trilogy: + template: { name: collection, collection: 377545 } + + The Santa Clause: + template: { name: collection, collection: 53159 } + + Santa Paws: + template: { name: collection, collection: 469648 } + + Saw: + template: { name: collection, collection: 656 } + + Scary Movie: + template: { name: collection, collection: 4246 } + + The Scorpion King: + template: { name: collection, collection: 116669 } + + Scream: + template: { name: collection, collection: 2602 } + + The Shaggy Dog: + template: { name: collection, collection: 294519 } + + Sharknado: + template: { name: collection, collection: 286023 } + + Shaolin Temple: + template: { name: collection, collection: 184977 } + + Sherlock Holmes: + template: { name: collection, collection: 102322 } + + The Shining: + template: { name: collection, collection: 530064 } + + Sin City: + template: { name: collection, collection: 135179 } + + The Space Odyssey: + template: { name: collection, collection: 4438 } + radarr_add_missing: true + + Spy Kids: + template: { name: collection, collection: 86486 } + + Star Trek: + template: { name: collection, collection: "115575, 115570, 115570" } + radarr_add_missing: true + + Stargate: + template: { name: collection, collection: 44215 } + radarr_add_missing: true + + Starship Troopers: + template: { name: collection, collection: 10522 } + + Super Troopers: + template: { name: collection, collection: 449462 } + + Superman (Original): + template: { name: collection, collection: 8537 } + + Taken: + template: { name: collection, collection: 135483 } + + Ted: + template: { name: collection, collection: 266672 } + + The Terminator: + template: { name: collection, collection: 528 } + + Texas Chainsaw Massacre: + template: { name: collection, collection: "111751, 425175" } + + The Thing: + template: { name: collection, collection: 479888 } + + Tomb Raider: + template: { name: collection, collection: "2467, 621142" } + + Trainspotting: + template: { name: collection, collection: 424202 } + + Transformers: + template: { name: collection, collection: 8650 } + radarr_add_missing: true + + The Transporter: + template: { name: collection, collection: 9518 } + + Tremors: + template: { name: collection, collection: 91799 } + + TRON: + template: { name: collection, collection: 63043, movie: 73362 } + radarr_add_missing: true + + Unbreakable: + template: { name: collection } + imdb_list: https://www.imdb.com/list/ls022101006/ + summary: The Unbreakable trilogy, officially known as the Eastrail 177 Trilogy, is an American superhero thriller and psychological horror film series. The films were written, produced, and directed by M. Night Shyamalan. The trilogy consists of Unbreakable (2000), Split (2016), and Glass (2019). + radarr_add_missing: true + + Underworld: + template: { name: collection, collection: 2326 } + + Vacancy: + template: { name: collection, collection: 86112 } + + Wallace & Gromit: + template: { name: collection, collection: 529 } + + Wayne's World: + template: { name: collection, collection: 8979 } + + White Fang: + template: { name: collection, collection: 178654 } + + Witch Mountain: + template: { name: collection, collection: 90348 } + + The X Files: + template: { name: collection, collection: 19387 } + radarr_add_missing: true + + xXx: + template: { name: collection, collection: 52785 } + + Zenon: + template: { name: collection, collection: 321148 } + + Zombieland: + template: { name: collection, collection: 537982 } + + Zoolander: + template: { name: collection, collection: 352789 } + + Up: + template: { name: collection, collection: 95051 } diff --git a/Plex/Files/plex_meta_manager/Movies/Genre.yml b/Plex/Files/plex_meta_manager/Movies/Genre.yml new file mode 100644 index 0000000..56c73e4 --- /dev/null +++ b/Plex/Files/plex_meta_manager/Movies/Genre.yml @@ -0,0 +1,128 @@ +templates: + collection_genre: + plex_search: + genre: <> + collection_order: alpha + radarr_add_missing: false + radarr_tag: pmm_genre + +collections: + Action: + template: { name: collection_genre, genre: Action } + summary: Action film is a genre wherein physical action takes precedence in the storytelling. The film will often have continuous motion and action including physical stunts, chases, fights, battles, and races. The story usually revolves around a hero that has a goal, but is facing incredible odds to obtain it. + url_poster: https://theposterdb.com/api/assets/52018 + + Adventure: + template: { name: collection_genre, genre: Adventure } + summary: Adventure film is a genre that revolves around the conquests and explorations of a protagonist. The purpose of the conquest can be to retrieve a person or treasure, but often the main focus is simply the pursuit of the unknown. These films generally take place in exotic locations and play on historical myths. Adventure films incorporate suspenseful puzzles and intricate obstacles that the protagonist must overcome in order to achieve the end goal. + url_poster: https://theposterdb.com/api/assets/52218 + + Animation: + template: { name: collection_genre, genre: Animation } + summary: Animated film is a collection of illustrations that are photographed frame-by-frame and then played in a quick succession. Since its inception, animation has had a creative and imaginative tendency. Being able to bring animals and objects to life, this genre has catered towards fairy tales and children’s stories. However, animation has long been a genre enjoyed by all ages. As of recent, there has even been an influx of animation geared towards adults. Animation is commonly thought of as a technique, thus it’s ability to span over many different genres. + url_poster: https://theposterdb.com/api/assets/120090 + + Anime: + template: { name: collection_genre, genre: Anime } + summary: A collection of Anime movies + url_poster: https://theposterdb.com/api/assets/126743 + + Biography: + template: { name: collection_genre, genre: Biography } + summary: A collection of Biography movies + url_poster: https://theposterdb.com/api/assets/60369 + + Comedy: + template: { name: collection_genre, genre: Comedy } + summary: Comedy is a genre of film that uses humor as a driving force. The aim of a comedy film is to illicit laughter from the audience through entertaining stories and characters. Although the comedy film may take on some serious material, most have a happy ending. Comedy film has the tendency to become a hybrid sub-genre because humor can be incorporated into many other genres. Comedies are more likely than other films to fall back on the success and popularity of an individual star. + url_poster: https://theposterdb.com/api/assets/51397 + + Crime: + template: { name: collection_genre, genre: Crime } + summary: Crime film is a genre that revolves around the action of a criminal mastermind. A Crime film will often revolve around the criminal himself, chronicling his rise and fall. Some Crime films will have a storyline that follows the criminal's victim, yet others follow the person in pursuit of the criminal. This genre tends to be fast paced with an air of mystery – this mystery can come from the plot or from the characters themselves. + url_poster: https://theposterdb.com/api/assets/53057 + + Documentary: + template: { name: collection_genre, genre: Documentary } + summary: Documentary film is a non-fiction genre intended to document reality primarily for the purposes of instruction, education, or maintaining a historical record. + url_poster: https://theposterdb.com/api/assets/51430 + + Drama: + template: { name: collection_genre, genre: Drama } + summary: Drama film is a genre that relies on the emotional and relational development of realistic characters. While Drama film relies heavily on this kind of development, dramatic themes play a large role in the plot as well. Often, these dramatic themes are taken from intense, real life issues. Whether heroes or heroines are facing a conflict from the outside or a conflict within themselves, Drama film aims to tell an honest story of human struggles. + url_poster: https://theposterdb.com/api/assets/52016 + + Family: + template: { name: collection_genre, genre: Family } + summary: Fantasy film is a genre that incorporates imaginative and fantastic themes. These themes usually involve magic, supernatural events, or fantasy worlds. Although it is its own distinct genre, these films can overlap into the horror and science fiction genres. Unlike science fiction, a fantasy film does not need to be rooted in fact. This element allows the audience to be transported into a new and unique world. Often, these films center on an ordinary hero in an extraordinary situation. + url_poster: https://theposterdb.com/api/assets/53059 + + Fantasy: + template: { name: collection_genre, genre: Animation } + imdb_list: + - url: https://www.imdb.com/search/title/?title_type=feature&release_date=1990-01-01,&user_rating=5.0,10.0&num_votes=100000,&genres=fantasy + limit: 100 + - url: https://www.imdb.com/search/title/?title_type=feature&release_date=1990-01-01,&user_rating=5.0,10.0&num_votes=100000,&genres=fantasy&sort=user_rating,desc + limit: 100 + summary: Fantasy film is a genre that incorporates imaginative and fantastic themes. These themes usually involve magic, supernatural events, or fantasy worlds. Although it is its own distinct genre, these films can overlap into the horror and science fiction genres. Unlike science fiction, a fantasy film does not need to be rooted in fact. This element allows the audience to be transported into a new and unique world. Often, these films center on an ordinary hero in an extraordinary situation. + url_poster: https://theposterdb.com/api/assets/51476 + + History: + template: { name: collection_genre, genre: History } + summary: History film is a genre that takes historical events and people and interprets them in a larger scale. Historical accuracy is not the main focus, but rather the telling of a grandiose story. The drama of an History film is often accentuated by a sweeping musical score, lavish costumes, and high production value. + url_poster: https://theposterdb.com/api/assets/58022 + + Horror: + template: { name: collection_genre, genre: Horror } + summary: Horror film is a genre that aims to create a sense of fear, panic, alarm, and dread for the audience. These films are often unsettling and rely on scaring the audience through a portrayal of their worst fears and nightmares. Horror films usually center on the arrival of an evil force, person, or event. Many Horror films include mythical creatures such as ghosts, vampires, and zombies. Traditionally, Horror films incorporate a large amount of violence and gore into the plot. Though it has its own style, Horror film often overlaps into Fantasy, Thriller, and Science-Fiction genres. + url_poster: https://theposterdb.com/api/assets/51475 + + Musical: + template: { name: collection_genre, genre: Musical } + summary: A Musical interweaves vocal and dance performances into the narrative of the film. The songs of a film can either be used to further the story or simply enhance the experience of the audience. These films are often done on a grand scale and incorporate lavish costumes and sets. Traditional musicals center on a well-known star, famous for their dancing or singing skills (i.e. Fred Astaire, Gene Kelly, Judy Garland). These films explore concepts such are love and success, allowing the audience to escape from reality. + url_poster: https://theposterdb.com/api/assets/51427 + + Mystery: + template: { name: collection_genre, genre: Mystery } + summary: A Mystery film centers on a person of authority, usually a detective, that is trying to solve a mysterious crime. The main protagonist uses clues, investigation, and logical reasoning. The biggest element in these films is a sense of “whodunit” suspense, usually created through visual cues and unusual plot twists. + url_poster: https://theposterdb.com/api/assets/53060 + + Romance: + template: { name: collection_genre, genre: Romance } + summary: "Romance film can be defined as a genre wherein the plot revolves around the love between two protagonists. This genre usually has a theme that explores an issue within love, including but not limited to: love at first sight, forbidden love, love triangles, and sacrificial love. The tone of Romance film can vary greatly. Whether the end is happy or tragic, Romance film aims to evoke strong emotions in the audience." + url_poster: https://theposterdb.com/api/assets/53062 + + Science Fiction: + template: { name: collection_genre, genre: Science Fiction } + summary: Science Fiction (Sci-Fi) film is a genre that incorporates hypothetical, science-based themes into the plot of the film. Often, this genre incorporates futuristic elements and technologies to explore social, political, and philosophical issues. The film itself is usually set in the future, either on earth or in space. Traditionally, a Science Fiction film will incorporate heroes, villains, unexplored locations, fantastical quests, and advanced technology. + url_poster: https://theposterdb.com/api/assets/51772 + + Short: + template: { name: collection_genre, genre: Short } + summary: A collection of Short movies + url_poster: https://theposterdb.com/api/assets/53063 + + Sports: + template: { name: collection_genre, genre: Sport } + imdb_list: + - url: https://www.imdb.com/search/title/?title_type=feature&release_date=1990-01-01,&user_rating=5.0,10.0&num_votes=100000,&genres=sport + limit: 200 + - url: https://www.imdb.com/search/title/?title_type=feature&release_date=1990-01-01,&user_rating=5.0,10.0&num_votes=100000,&genres=sport&sort=user_rating,desc + limit: 200 + summary: A Sport Film revolves around a sport setting, event, or an athlete. Often, these films will center on a single sporting event that carries significant importance. Sports films traditionally have a simple plot that builds up to the significant sporting event. This genre is known for incorporating film techniques to build anticipation and intensity. Sport films have a large range of sub-genres, from comedies to dramas, and are more likely than other genres to be based true-life events. + url_poster: https://theposterdb.com/api/assets/60371 + + Thriller: + template: { name: collection_genre, genre: Thriller } + summary: Thriller Film is a genre that revolves around anticipation and suspense. The aim for Thrillers is to keep the audience alert and on the edge of their seats. The protagonist in these films is set against a problem – an escape, a mission, or a mystery. No matter what sub-genre a Thriller film falls into, it will emphasize the danger that the protagonist faces. The tension with the main problem is built on throughout the film and leads to a highly stressful climax. + url_poster: https://theposterdb.com/api/assets/52019 + + War: + template: { name: collection_genre, genre: War } + summary: War Film is a genre that looks at the reality of war on a grand scale. They often focus on landmark battles as well as political issues within war. This genre usually focuses on a main character and his team of support, giving the audience an inside look into the gritty reality of war. + url_poster: https://theposterdb.com/api/assets/51477 + + Western: + template: { name: collection_genre, genre: Western } + summary: "Western Film is a genre that revolves around stories primarily set in the late 19th century in the American Old West. Most Westerns are set between the American Civil War (1865) and the early 1900s. Common themes within Western Film include: the conquest of the wild west, the cultural separation of the East and the West, the West’s resistance to modern change, the conflict between Cowboys and Indians, outlaws, and treasure/gold hunting. American Western Film usually revolves around a stoic hero and emphasizes the importance of honor and sacrifice." + url_poster: https://theposterdb.com/api/assets/51774 diff --git a/Plex/Files/plex_meta_manager/Movies/Person.yml b/Plex/Files/plex_meta_manager/Movies/Person.yml new file mode 100644 index 0000000..243558b --- /dev/null +++ b/Plex/Files/plex_meta_manager/Movies/Person.yml @@ -0,0 +1,507 @@ +templates: + collection_person: + smart_filter: + sort_by: release.desc + validate: false + any: + actor: <> + director: <> + writer: <> + producer: <> + +collections: + Adam Sandler: + template: { name: collection_person, person: "Adam Sandler" } + + Al Pacino: + template: { name: collection_person, person: "Al Pacino" } + + Alfred Hitchcock: + template: { name: collection_person, person: "Alfred Hitchcock" } + + Amy Adams: + template: { name: collection_person, person: "Amy Adams" } + + Angelina Jolie: + template: { name: collection_person, person: "Angelina Jolie" } + + Anne Hathaway: + template: { name: collection_person, person: "Anne Hathaway" } + + Anthony Hopkins: + template: { name: collection_person, person: "Anthony Hopkins" } + + Antonio Banderas: + template: { name: collection_person, person: "Antonio Banderas" } + + Arnold Schwarzenegger: + template: { name: collection_person, person: "Arnold Schwarzenegger" } + + Ben Affleck: + template: { name: collection_person, person: "Ben Affleck" } + + Ben Stiller: + template: { name: collection_person, person: "Ben Stiller" } + + Bill Murray: + template: { name: collection_person, person: "Bill Murray" } + + Brad Pitt: + template: { name: collection_person, person: "Brad Pitt" } + + Bradley Cooper: + template: { name: collection_person, person: "Bradley Cooper" } + + Brendan Fraser: + template: { name: collection_person, person: "Brendan Fraser" } + + Bruce Lee: + template: { name: collection_person, person: "Bruce Lee" } + + Bruce Willis: + template: { name: collection_person, person: "Bruce Willis" } + + Cameron Diaz: + template: { name: collection_person, person: "Cameron Diaz" } + + Carrie Fisher: + template: { name: collection_person, person: "Carrie Fisher" } + + Cate Blanchett: + template: { name: collection_person, person: "Cate Blanchett" } + + Catherine Zeta-Jones: + template: { name: collection_person, person: "Catherine Zeta-Jones" } + + Channing Tatum: + template: { name: collection_person, person: "Channing Tatum" } + + Charlie Chaplin: + template: { name: collection_person, person: "Charlie Chaplin" } + + Charlize Theron: + template: { name: collection_person, person: "Charlize Theron" } + + Chris Evans: + template: { name: collection_person, person: "Chris Evans" } + + Chris Hemsworth: + template: { name: collection_person, person: "Chris Hemsworth" } + + Chris Pratt: + template: { name: collection_person, person: "Chris Pratt" } + + Chris Rock: + template: { name: collection_person, person: "Chris Rock" } + + Christian Bale: + template: { name: collection_person, person: "Christian Bale" } + + Christopher Nolan: + template: { name: collection_person, person: "Christopher Nolan" } + + Christopher Walken: + template: { name: collection_person, person: "Christopher Walken" } + + Chuck Norris: + template: { name: collection_person, person: "Chuck Norris" } + + Clint Eastwood: + template: { name: collection_person, person: "Clint Eastwood" } + + Daniel Craig: + template: { name: collection_person, person: "Daniel Craig" } + + Daniel Radcliffe: + template: { name: collection_person, person: "Daniel Radcliffe" } + + Dave Bautista: + template: { name: collection_person, person: "Dave Bautista" } + + Dave Chappelle: + template: { name: collection_person, person: "Dave Chappelle" } + + Denzel Washington: + template: { name: collection_person, person: "Denzel Washington" } + + Diane Keaton: + template: { name: collection_person, person: "Diane Keaton" } + + Don Cheadle: + template: { name: collection_person, person: "Don Cheadle" } + + Dustin Hoffman: + template: { name: collection_person, person: "Dustin Hoffman" } + + Dwayne Johnson: + template: { name: collection_person, person: "Dwayne Johnson" } + + Eddie Murphy: + template: { name: collection_person, person: "Eddie Murphy" } + + Edward Norton: + template: { name: collection_person, person: "Edward Norton" } + + Elliot Page: + template: { name: collection_person, person: "Elliot Page" } + + Emma Stone: + template: { name: collection_person, person: "Emma Stone" } + + Emma Watson: + template: { name: collection_person, person: "Emma Watson" } + + Ewan McGregor: + template: { name: collection_person, person: "Ewan McGregor" } + + George Clooney: + template: { name: collection_person, person: "George Clooney" } + + Gerard Butler: + template: { name: collection_person, person: "Gerard Butler" } + + Gwyneth Paltrow: + template: { name: collection_person, person: "Gwyneth Paltrow" } + + Harrison Ford: + template: { name: collection_person, person: "Harrison Ford" } + + Hayao Miyazaki: + template: { name: collection_person, person: "Hayao Miyazaki" } + + Hugh Jackman: + template: { name: collection_person, person: "Hugh Jackman" } + + Ian McKellen: + template: { name: collection_person, person: "Ian McKellen" } + + Idris Elba: + template: { name: collection_person, person: "Idris Elba" } + + J.J. Abrams: + template: { name: collection_person, person: "J.J. Abrams" } + + Jack Black: + template: { name: collection_person, person: "Jack Black" } + + Jackie Chan: + template: { name: collection_person, person: "Jackie Chan" } + + James Cameron: + template: { name: collection_person, person: "James Cameron" } + + James Franco: + template: { name: collection_person, person: "James Franco" } + + Jamie Foxx: + template: { name: collection_person, person: "Jamie Foxx" } + + Jason Bateman: + template: { name: collection_person, person: "Jason Bateman" } + + Jason Statham: + template: { name: collection_person, person: "Jason Statham" } + + Jeff Bridges: + template: { name: collection_person, person: "Jeff Bridges" } + + Jeff Goldblum: + template: { name: collection_person, person: "Jeff Goldblum" } + + Jennifer Aniston: + template: { name: collection_person, person: "Jennifer Aniston" } + + Jennifer Lawrence: + template: { name: collection_person, person: "Jennifer Lawrence" } + + Jesse Eisenberg: + template: { name: collection_person, person: "Jesse Eisenberg" } + + Jessica Alba: + template: { name: collection_person, person: "Jessica Alba" } + + Jet Li: + template: { name: collection_person, person: "Jet Li" } + + Jim Carrey: + template: { name: collection_person, person: "Jim Carrey" } + + John Candy: + template: { name: collection_person, person: "John Candy" } + + John Travolta: + template: { name: collection_person, person: "John Travolta" } + + John Wayne: + template: { name: collection_person, person: "John Wayne" } + + Johnny Depp: + template: { name: collection_person, person: "Johnny Depp" } + + Josh Brolin: + template: { name: collection_person, person: "Josh Brolin" } + + Julia Roberts: + template: { name: collection_person, person: "Julia Roberts" } + + Keanu Reeves: + template: { name: collection_person, person: "Keanu Reeves" } + + Kevin Bacon: + template: { name: collection_person, person: "Kevin Bacon" } + + Kevin Costner: + template: { name: collection_person, person: "Kevin Costner" } + + Kevin Hart: + template: { name: collection_person, person: "Kevin Hart" } + + Kevin Smith: + template: { name: collection_person, person: "Kevin Smith" } + + Kristen Stewart: + template: { name: collection_person, person: "Kristen Stewart" } + + Leonardo DiCaprio: + template: { name: collection_person, person: "Leonardo DiCaprio" } + + Liam Neeson: + template: { name: collection_person, person: "Liam Neeson" } + + Lucy Liu: + template: { name: collection_person, person: "Lucy Liu" } + + M. Night Shyamalan: + template: { name: collection_person, person: "M. Night Shyamalan" } + + Mark Ruffalo: + template: { name: collection_person, person: "Mark Ruffalo" } + + Mark Wahlberg: + template: { name: collection_person, person: "Mark Wahlberg" } + + Matt Damon: + template: { name: collection_person, person: "Matt Damon" } + + Matthew McConaughey: + template: { name: collection_person, person: "Matthew McConaughey" } + + Megan Fox: + template: { name: collection_person, person: "Megan Fox" } + + Mel Brooks: + template: { name: collection_person, person: "Mel Brooks" } + + Mel Gibson: + template: { name: collection_person, person: "Mel Gibson" } + + Melissa McCarthy: + template: { name: collection_person, person: "Melissa McCarthy" } + + Meryl Streep: + template: { name: collection_person, person: "Meryl Streep" } + + Michael Bay: + template: { name: collection_person, person: "Michael Bay" } + + Michael Caine: + template: { name: collection_person, person: "Michael Caine" } + + Michael Douglas: + template: { name: collection_person, person: "Michael Douglas" } + + Michael Keaton: + template: { name: collection_person, person: "Michael Keaton" } + + Michelle Pfeiffer: + template: { name: collection_person, person: "Michelle Pfeiffer" } + + Mike Myers: + template: { name: collection_person, person: "Mike Myers" } + + Mila Kunis: + template: { name: collection_person, person: "Mila Kunis" } + + Milla Jovovich: + template: { name: collection_person, person: "Milla Jovovich" } + + Morgan Freeman: + template: { name: collection_person, person: "Morgan Freeman" } + + Natalie Portman: + template: { name: collection_person, person: "Natalie Portman" } + + Nicolas Cage: + template: { name: collection_person, person: "Nicolas Cage" } + + Nicole Kidman: + template: { name: collection_person, person: "Nicole Kidman" } + + Orlando Bloom: + template: { name: collection_person, person: "Orlando Bloom" } + + Owen Wilson: + template: { name: collection_person, person: "Owen Wilson" } + + Patrick Stewart: + template: { name: collection_person, person: "Patrick Stewart" } + + Paul Rudd: + template: { name: collection_person, person: "Paul Rudd" } + + Quentin Tarantino: + template: { name: collection_person, person: "Quentin Tarantino" } + + Reese Witherspoon: + template: { name: collection_person, person: "Reese Witherspoon" } + + Ridley Scott: + template: { name: collection_person, person: "Ridley Scott" } + + Robert De Niro: + template: { name: collection_person, person: "Robert De Niro" } + + Robert Downey Jr: + template: { name: collection_person, person: "Robert Downey Jr" } + + Robin Williams: + template: { name: collection_person, person: "Robin Williams" } + + Rosario Dawson: + template: { name: collection_person, person: "Rosario Dawson" } + + Ryan Reynolds: + template: { name: collection_person, person: "Ryan Reynolds" } + + Sacha Baron Cohen: + template: { name: collection_person, person: "Sacha Baron Cohen" } + + Samuel L. Jackson: + template: { name: collection_person, person: "Samuel L. Jackson" } + + Sandra Bullock: + template: { name: collection_person, person: "Sandra Bullock" } + + Scarlett Johansson: + template: { name: collection_person, person: "Scarlett Johansson" } + + Sean Connery: + template: { name: collection_person, person: "Sean Connery" } + + Seth Rogen: + template: { name: collection_person, person: "Seth Rogen" } + + Shia LaBeouf: + template: { name: collection_person, person: "Shia LaBeouf" } + + Steve Buscemi: + template: { name: collection_person, person: "Steve Buscemi" } + + Steve Carell: + template: { name: collection_person, person: "Steve Carell" } + + Steve Martin: + template: { name: collection_person, person: "Steve Martin" } + + Steven Seagal: + template: { name: collection_person, person: "Steven Seagal" } + + Steven Spielberg: + template: { name: collection_person, person: "Steven Spielberg" } + + Sylvester Stallone: + template: { name: collection_person, person: "Sylvester Stallone" } + + Tim Allen: + template: { name: collection_person, person: "Tim Allen" } + + Tim Burton: + template: { name: collection_person, person: "Tim Burton" } + + Tom Cruise: + template: { name: collection_person, person: "Tom Cruise" } + + Tom Hanks: + template: { name: collection_person, person: "Tom Hanks" } + + Tommy Lee-Jones: + template: { name: collection_person, person: "Tommy Lee-Jones" } + + Vin Diesel: + template: { name: collection_person, person: "Vin Diesel" } + + Vince Vaughn: + template: { name: collection_person, person: "Vince Vaughn" } + + Wesley Snipes: + template: { name: collection_person, person: "Wesley Snipes" } + + Will Ferrell: + template: { name: collection_person, person: "Will Ferrell" } + + Will Smith: + template: { name: collection_person, person: "Will Smith" } + + Woody Harrelson: + template: { name: collection_person, person: "Woody Harrelson" } + + Zack Snyder: + template: { name: collection_person, person: "Zack Snyder" } + + Zoe Saldana: + template: { name: collection_person, person: "Zoe Saldana" } + + Alejandro González Iñárritu: + template: { name: collection_person, person: 223 } + + Alex Garland: + template: { name: collection_person, person: 2036 } + + Alfonso Cuarón: + template: { name: collection_person, person: 11218 } + + Akira Kurosawa: + template: { name: collection_person, person: 5026 } + + Coen Brothers: + template: { name: collection_person, person: "1223, 1224" } + summary: "Joel Coen and Ethan Coen, collectively referred to as the Coen Brothers, are American film directors, producers, screenwriters, and editors. Their films span many genres and styles, which they frequently subvert or parody. Their most acclaimed works include: Raising Arizona (1987), Miller's Crossing (1990), Fargo (1996), The Big Lebowski (1998), O Brother, Where Art Thou? (2000), No Country for Old Men (2007), Burn After Reading (2008), A Serious Man (2009), True Grit (2010), Inside Llewyn Davis (2013), and The Ballad of Buster Scruggs (2018)." + + Darren Aronofsky: + template: { name: collection_person, person: 6431 } + + David Fincher: + template: { name: collection_person, person: 7467 } + + David Lean: + template: { name: collection_person, person: 12238 } + + David Lynch: + template: { name: collection_person, person: 5602 } + + Denis Villeneuve: + template: { name: collection_person, person: 137427 } + + Francis Ford Coppola: + template: { name: collection_person, person: 1776 } + + Kathryn Bigelow: + template: { name: collection_person, person: 14392 } + + Paul Thomas Anderson: + template: { name: collection_person, person: 4762 } + + Spike Lee: + template: { name: collection_person, person: 5281 } + + Stanley Kubrick: + template: { name: collection_person, person: 240 } + + Terrence Malick: + template: { name: collection_person, person: 30715 } + + Terry Gilliam: + template: { name: collection_person, person: 280 } + + Wes Anderson: + template: { name: collection_person, person: 5655 } diff --git a/Plex/Files/plex_meta_manager/Movies/Studios.yml b/Plex/Files/plex_meta_manager/Movies/Studios.yml new file mode 100644 index 0000000..93ab22d --- /dev/null +++ b/Plex/Files/plex_meta_manager/Movies/Studios.yml @@ -0,0 +1,96 @@ +templates: + collection_studio: + optional: + - company + tmdb_company: <> + sync_mode: sync + smart_label: originally_available.desc + radarr_add_missing: false + radarr_tag: pmm_studio + +collections: + Apple Originals: + template: { name: collection_studio } + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,tv_series,tv_special,tv_miniseries,documentary,video,tv_short&release_date=2000-01-01,2025-12-31&genres=!animation&countries=us&languages=en&sort=release_date,desc&count=250&companies=co0546168 + summary: All Apple TV Originals From 2000-2025 + url_poster: https://i.imgur.com/O9iWork.png + url_background: https://wallpaper-house.com/data/out/8/wallpaper2you_228774.png + + Amazon Originals: + template: { name: collection_studio } + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,tv_series,tv_special,tv_miniseries,documentary,video,tv_short&release_date=2000-01-01,2025-12-31&genres=!animation&countries=us&languages=en&sort=release_date,desc&count=250&companies=co0319272 + summary: All Amazon Originals From 2000-2025 + url_poster: https://i.imgur.com/nU3gqqB.png + url_background: https://i.imgur.com/2jfs7oS.png + + Netflix Originals: + template: { name: collection_studio } + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,tv_series,tv_special,tv_miniseries,documentary,video,tv_short&release_date=2000-01-01,2025-12-31&genres=!animation&countries=us&languages=en&sort=release_date,desc&count=250&companies=co0144901 + summary: All Netflix Originals From 2000-2025 + url_poster: https://i.imgur.com/7kiE1MU.png + url_background: https://img5.goodfon.com/original/1920x1080/1/61/fon-netflix-logo-raduga-tsvet-fon-background-skachat-oboi-sk.jpg + + HBO Max Originals: + template: { name: collection_studio } + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,tv_series,tv_special,tv_miniseries,documentary,video,tv_short&release_date=2000-01-01,2025-12-31&genres=!animation&countries=us&languages=en&sort=release_date,desc&count=250&companies=co0754095 + summary: All HBO Max Originals From 2000-2025 + url_poster: https://i.redd.it/zxdvw3tk3f151.jpg + url_background: https://wallpapercave.com/wp/wp6402755.png + + HULU Originals: + template: { name: collection_studio } + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,tv_series,tv_special,tv_miniseries,documentary,video,tv_short&release_date=2000-01-01,2025-12-31&genres=!animation&countries=us&languages=en&sort=release_date,desc&count=250&companies=co0218858 + summary: All HULU Originals From 2000-2025 + url_poster: https://plexcollectionposters.com/images/2019/05/26/Hulu6ddad752a5ce9bac.jpg + url_background: https://cdn.vox-cdn.com/thumbor/oR4hqrmTxbX_O4gdJ6np8h-PxFk=/0x439:750x861/1600x900/cdn.vox-cdn.com/uploads/chorus_image/image/56311701/Image_uploaded_from_iOS__8_.1503433270.jpg + + Aardman: + template: { name: collection_studio, company: 297 } + summary: Aardman Animations, Ltd. is a British animation studio based in Bristol, England. Aardman is known for films made using stop-motion clay animation techniques, particularly those featuring Plasticine characters Wallace and Gromit. + + Blue Sky: + template: { name: collection_studio, company: 9383 } + summary: Blue Sky Studios, Inc. is an American computer animation film studio based in Greenwich, Connecticut. It is a subsidiary of 20th Century Animation, a division of Disney Studios Content. + + DreamWorks: + template: { name: collection_studio, company: 521 } + filters: + collection.not: Aardman + summary: DreamWorks Animation LLC (also simply known as DreamWorks) is an American animation studio and a subsidiary of Universal Pictures, itself a subsidiary of Comcast's NBCUniversal. It is based in Glendale, California, and produces animated feature films, television programs, and online virtual games. + + Illumination Entertainment: + template: { name: collection_studio, company: 6704 } + summary: Illumination is an American film and animation studio founded by Chris Meledandri in 2007 and owned by Universal Pictures, a division of NBCUniversal, which is itself a division of Comcast. Meledandri produces the films, while Universal finances and distributes all the films. The studio is responsible for the Despicable Me and The Secret Life of Pets franchises and the film adaptations of Dr. Seuss’ books The Lorax and How the Grinch Stole Christmas. The Minions, characters from the Despicable Me series, are the studio's mascots. + + Pixar: + template: { name: collection_studio, company: 3 } + summary: Pixar Animation Studios, commonly known as Pixar, is an American computer animation studio based in Emeryville, California, a subsidiary of Disney Studios Content owned by The Walt Disney Company. Pixar began in 1979 as part of the Lucasfilm computer division, known as the Graphics Group, before its spin-off as a corporation on February 3, 1986, with funding from Apple co-founder Steve Jobs, who became its majority shareholder. Disney purchased Pixar in 2006 at a valuation of $7.4 billion by converting each share of Pixar stock to 2.3 shares of Disney stock, a transaction that resulted in Jobs becoming Disney's largest single shareholder at the time. Pixar is best known for its feature films technologically powered by RenderMan, the company's own implementation of the industry-standard RenderMan Interface Specification image-rendering application programming interface. Luxo Jr., a desk lamp from the studio's 1986 short film of the same name, is the studio's mascot. + radarr_tag: pmm_studio + + Studio Ghibli: + template: { name: collection_studio, company: 10342 } + summary: Studio Ghibli Inc. is a Japanese animation film studio headquartered in Koganei, Tokyo. The studio is best known for its animated feature films, and has also produced several short films, television commercials, and one television film. The studio’s mascot and most recognizable symbol is the character, Totoro, a giant cat-like spirit from the 1988 classic, My Neighbor Totoro. + radarr_tag: pmm_studio + + Sony Pictures Animation: + template: { name: collection_studio, company: 2251 } + summary: Sony Pictures Animation Inc. is an American animation studio owned by Sony Entertainment's Sony Pictures Entertainment through their Motion Picture Group division and founded on May 9, 2002. The studio's films are distributed worldwide by Sony Pictures Releasing under their Columbia Pictures label, while all direct-to-video releases are released by Sony Pictures Home Entertainment. + + Warner Animation Group: + template: { name: collection_studio, company: 25120 } + summary: The Warner Animation Group (WAG) is an American animation studio that is the feature animation division of Warner Bros. Entertainment. Established on January 7, 2013, the studio is the successor to the dissolved 2D traditional hand-drawn animation studio Warner Bros. Feature Animation, which shut down in 2003 and the dissolved family film division Warner Bros. Family Entertainment, which shut down in 2009. The entity is also a sister animation studio of the regular animation studio Warner Bros. Animation + + Walt Disney Animation Studios: + template: { name: collection_studio } + imdb_list: https://www.imdb.com/list/ls059383351/ + summary: Walt Disney Animation Studios (WDAS), sometimes shortened to Disney Animation, is an American animation studio that creates animated features and short films for The Walt Disney Company. Founded on October 16, 1923 by brothers Walt Disney and Roy O. Disney, it is one of the oldest-running animation studios in the world. It is currently organized as a division of Walt Disney Studios and is headquartered at the Roy E. Disney Animation Building at the Walt Disney Studios lot in Burbank, California. + + Walt Disney Pictures: + template: { name: collection_studio } + imdb_list: https://www.imdb.com/list/ls077114097/ + summary: Walt Disney Pictures is an American film production studio of The Walt Disney Studios, which is owned by The Walt Disney Company. The studio is the flagship producer of live-action feature films within the Walt Disney Studios unit, and is based at the Walt Disney Studios in Burbank, California. Animated films produced by Walt Disney Animation Studios and Pixar Animation Studios are also released under this brand. Walt Disney Studios Motion Pictures distributes and markets the films produced by Walt Disney Pictures. diff --git a/Plex/Files/plex_meta_manager/Movies/Top.yml b/Plex/Files/plex_meta_manager/Movies/Top.yml new file mode 100644 index 0000000..de26f1d --- /dev/null +++ b/Plex/Files/plex_meta_manager/Movies/Top.yml @@ -0,0 +1,45 @@ +templates: + collection_top: + sort_title: +++++++++++++++++++_<> + sync_mode: sync + radarr_add_missing: false + radarr_tag: pmm_top + +collections: + Trending: + template: { name: collection_top, sort: 1Trending } + trakt_trending: 40 + tmdb_trending_daily: 40 + tmdb_trending_weekly: 40 + smart_label: year.desc + summary: Movies Trending across the internet + url_background: https://i.imgur.com/SOVfrIq.png + url_poster: https://i.imgur.com/4vpMZoA.png + + Popular: + template: { name: collection_top, sort: 2Popular } + tmdb_popular: 40 + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,documentary,short + limit: 40 + smart_label: year.desc + summary: Popular Movies across the internet + url_background: https://i.imgur.com/SOVfrIq.png + url_poster: https://i.imgur.com/4cI2Jg4.png + + Top Rated: + template: { name: collection_top, sort: 3Top Rated } + imdb_list: https://www.imdb.com/search/title/?groups=top_250&count=250 + tmdb_top_rated: 250 + smart_label: critic_rating.desc + summary: Top Rated Movies + url_background: https://i.imgur.com/b26VZ9y.jpg + url_poster: https://i.imgur.com/x7BhedD.png + + Newly Released Movies: + template: { name: collection_top, sort: 4Newly Released } + smart_label: added.desc + trakt_list: https://trakt.tv/users/giladg/lists/latest-releases + summary: A collection of newly-released movies in cinema and on streaming services + url_poster: https://i.imgur.com/D62EdJd.jpg + url_background: https://wallpaperbat.com/img/23094-cinema-hd-wallpaper-top-free-cinema-hd-background.jpg diff --git a/Plex/Files/plex_meta_manager/MoviesArt/Awards.yml b/Plex/Files/plex_meta_manager/MoviesArt/Awards.yml new file mode 100644 index 0000000..8670eb1 --- /dev/null +++ b/Plex/Files/plex_meta_manager/MoviesArt/Awards.yml @@ -0,0 +1,60 @@ +templates: + collection_alpha: + sync_mode: sync + collection_order: alpha + radarr_add_missing: false + radarr_tag: pmm_awards + + collection_release: + sync_mode: sync + collection_order: release + radarr_add_missing: false + radarr_tag: pmm_awards + +collections: + Academy Awards: + template: { name: collection_release } + imdb_list: https://www.imdb.com/search/title/?title_type=feature,documentary&groups=oscar_winner + summary: Oscar Winning Movies + + Razzie Award: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls066716172/ + summary: The Razzies are an awards banquet that honors the worst in films from a year. They are the opposite to the Oscars. This list will reflect on the films that have won the Worst Picture award from the beginning in 1980 to present day. Here are the films that "won" Worst Picture. + + César Award: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls024896765/ + summary: The César Award is the national film award of France. It is delivered in the Nuit des César ceremony and was first awarded in 1976. + + Annie Awards: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls086556605/ + summary: The Annie Awards are accolades which the Los Angeles branch of the International Animated Film Association, ASIFA-Hollywood, has presented each year since 1972 to recognize excellence in animation shown in cinema and television. + + Sundance Film Festival: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls033136048/ + summary: A comprehensive list of all of the full length films that have screened at the Sundance Film Festival. + + Cinefest: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls095591734/ + summary: Cinéfest Sudbury International Film Festival, also known as Cinéfest and Cinéfest Sudbury is an annual film festival in Greater Sudbury, Ontario, Canada, held over nine days each September. It is one of the largest film festivals in Canada. + + Berlin International Film Festival: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls076602311/ + summary: The Berlin International Film Festival, usually called the Berlinale, is a film festival held annually in Berlin, Germany. + + Palme d'Or Winners: + template: { name: collection_release } + imdb_list: https://www.imdb.com/list/ls066281181/ + summary: The Palme d'Or (Golden Palm) is the highest prize awarded at the Cannes Film Festival. It was introduced in 1955 by the organising committee. From 1939 to 1954, the highest prize was the Grand Prix du Festival International du Film. + + American Film Institute: + template: { name: collection_alpha } + imdb_list: https://www.imdb.com/list/ls062266402/ + summary: American Film Institute "100 Greatest American Movies" + radarr_add_missing: false + radarr_tag: pmm_awards diff --git a/Plex/Files/plex_meta_manager/MoviesArt/Genre.yml b/Plex/Files/plex_meta_manager/MoviesArt/Genre.yml new file mode 100644 index 0000000..56c73e4 --- /dev/null +++ b/Plex/Files/plex_meta_manager/MoviesArt/Genre.yml @@ -0,0 +1,128 @@ +templates: + collection_genre: + plex_search: + genre: <> + collection_order: alpha + radarr_add_missing: false + radarr_tag: pmm_genre + +collections: + Action: + template: { name: collection_genre, genre: Action } + summary: Action film is a genre wherein physical action takes precedence in the storytelling. The film will often have continuous motion and action including physical stunts, chases, fights, battles, and races. The story usually revolves around a hero that has a goal, but is facing incredible odds to obtain it. + url_poster: https://theposterdb.com/api/assets/52018 + + Adventure: + template: { name: collection_genre, genre: Adventure } + summary: Adventure film is a genre that revolves around the conquests and explorations of a protagonist. The purpose of the conquest can be to retrieve a person or treasure, but often the main focus is simply the pursuit of the unknown. These films generally take place in exotic locations and play on historical myths. Adventure films incorporate suspenseful puzzles and intricate obstacles that the protagonist must overcome in order to achieve the end goal. + url_poster: https://theposterdb.com/api/assets/52218 + + Animation: + template: { name: collection_genre, genre: Animation } + summary: Animated film is a collection of illustrations that are photographed frame-by-frame and then played in a quick succession. Since its inception, animation has had a creative and imaginative tendency. Being able to bring animals and objects to life, this genre has catered towards fairy tales and children’s stories. However, animation has long been a genre enjoyed by all ages. As of recent, there has even been an influx of animation geared towards adults. Animation is commonly thought of as a technique, thus it’s ability to span over many different genres. + url_poster: https://theposterdb.com/api/assets/120090 + + Anime: + template: { name: collection_genre, genre: Anime } + summary: A collection of Anime movies + url_poster: https://theposterdb.com/api/assets/126743 + + Biography: + template: { name: collection_genre, genre: Biography } + summary: A collection of Biography movies + url_poster: https://theposterdb.com/api/assets/60369 + + Comedy: + template: { name: collection_genre, genre: Comedy } + summary: Comedy is a genre of film that uses humor as a driving force. The aim of a comedy film is to illicit laughter from the audience through entertaining stories and characters. Although the comedy film may take on some serious material, most have a happy ending. Comedy film has the tendency to become a hybrid sub-genre because humor can be incorporated into many other genres. Comedies are more likely than other films to fall back on the success and popularity of an individual star. + url_poster: https://theposterdb.com/api/assets/51397 + + Crime: + template: { name: collection_genre, genre: Crime } + summary: Crime film is a genre that revolves around the action of a criminal mastermind. A Crime film will often revolve around the criminal himself, chronicling his rise and fall. Some Crime films will have a storyline that follows the criminal's victim, yet others follow the person in pursuit of the criminal. This genre tends to be fast paced with an air of mystery – this mystery can come from the plot or from the characters themselves. + url_poster: https://theposterdb.com/api/assets/53057 + + Documentary: + template: { name: collection_genre, genre: Documentary } + summary: Documentary film is a non-fiction genre intended to document reality primarily for the purposes of instruction, education, or maintaining a historical record. + url_poster: https://theposterdb.com/api/assets/51430 + + Drama: + template: { name: collection_genre, genre: Drama } + summary: Drama film is a genre that relies on the emotional and relational development of realistic characters. While Drama film relies heavily on this kind of development, dramatic themes play a large role in the plot as well. Often, these dramatic themes are taken from intense, real life issues. Whether heroes or heroines are facing a conflict from the outside or a conflict within themselves, Drama film aims to tell an honest story of human struggles. + url_poster: https://theposterdb.com/api/assets/52016 + + Family: + template: { name: collection_genre, genre: Family } + summary: Fantasy film is a genre that incorporates imaginative and fantastic themes. These themes usually involve magic, supernatural events, or fantasy worlds. Although it is its own distinct genre, these films can overlap into the horror and science fiction genres. Unlike science fiction, a fantasy film does not need to be rooted in fact. This element allows the audience to be transported into a new and unique world. Often, these films center on an ordinary hero in an extraordinary situation. + url_poster: https://theposterdb.com/api/assets/53059 + + Fantasy: + template: { name: collection_genre, genre: Animation } + imdb_list: + - url: https://www.imdb.com/search/title/?title_type=feature&release_date=1990-01-01,&user_rating=5.0,10.0&num_votes=100000,&genres=fantasy + limit: 100 + - url: https://www.imdb.com/search/title/?title_type=feature&release_date=1990-01-01,&user_rating=5.0,10.0&num_votes=100000,&genres=fantasy&sort=user_rating,desc + limit: 100 + summary: Fantasy film is a genre that incorporates imaginative and fantastic themes. These themes usually involve magic, supernatural events, or fantasy worlds. Although it is its own distinct genre, these films can overlap into the horror and science fiction genres. Unlike science fiction, a fantasy film does not need to be rooted in fact. This element allows the audience to be transported into a new and unique world. Often, these films center on an ordinary hero in an extraordinary situation. + url_poster: https://theposterdb.com/api/assets/51476 + + History: + template: { name: collection_genre, genre: History } + summary: History film is a genre that takes historical events and people and interprets them in a larger scale. Historical accuracy is not the main focus, but rather the telling of a grandiose story. The drama of an History film is often accentuated by a sweeping musical score, lavish costumes, and high production value. + url_poster: https://theposterdb.com/api/assets/58022 + + Horror: + template: { name: collection_genre, genre: Horror } + summary: Horror film is a genre that aims to create a sense of fear, panic, alarm, and dread for the audience. These films are often unsettling and rely on scaring the audience through a portrayal of their worst fears and nightmares. Horror films usually center on the arrival of an evil force, person, or event. Many Horror films include mythical creatures such as ghosts, vampires, and zombies. Traditionally, Horror films incorporate a large amount of violence and gore into the plot. Though it has its own style, Horror film often overlaps into Fantasy, Thriller, and Science-Fiction genres. + url_poster: https://theposterdb.com/api/assets/51475 + + Musical: + template: { name: collection_genre, genre: Musical } + summary: A Musical interweaves vocal and dance performances into the narrative of the film. The songs of a film can either be used to further the story or simply enhance the experience of the audience. These films are often done on a grand scale and incorporate lavish costumes and sets. Traditional musicals center on a well-known star, famous for their dancing or singing skills (i.e. Fred Astaire, Gene Kelly, Judy Garland). These films explore concepts such are love and success, allowing the audience to escape from reality. + url_poster: https://theposterdb.com/api/assets/51427 + + Mystery: + template: { name: collection_genre, genre: Mystery } + summary: A Mystery film centers on a person of authority, usually a detective, that is trying to solve a mysterious crime. The main protagonist uses clues, investigation, and logical reasoning. The biggest element in these films is a sense of “whodunit” suspense, usually created through visual cues and unusual plot twists. + url_poster: https://theposterdb.com/api/assets/53060 + + Romance: + template: { name: collection_genre, genre: Romance } + summary: "Romance film can be defined as a genre wherein the plot revolves around the love between two protagonists. This genre usually has a theme that explores an issue within love, including but not limited to: love at first sight, forbidden love, love triangles, and sacrificial love. The tone of Romance film can vary greatly. Whether the end is happy or tragic, Romance film aims to evoke strong emotions in the audience." + url_poster: https://theposterdb.com/api/assets/53062 + + Science Fiction: + template: { name: collection_genre, genre: Science Fiction } + summary: Science Fiction (Sci-Fi) film is a genre that incorporates hypothetical, science-based themes into the plot of the film. Often, this genre incorporates futuristic elements and technologies to explore social, political, and philosophical issues. The film itself is usually set in the future, either on earth or in space. Traditionally, a Science Fiction film will incorporate heroes, villains, unexplored locations, fantastical quests, and advanced technology. + url_poster: https://theposterdb.com/api/assets/51772 + + Short: + template: { name: collection_genre, genre: Short } + summary: A collection of Short movies + url_poster: https://theposterdb.com/api/assets/53063 + + Sports: + template: { name: collection_genre, genre: Sport } + imdb_list: + - url: https://www.imdb.com/search/title/?title_type=feature&release_date=1990-01-01,&user_rating=5.0,10.0&num_votes=100000,&genres=sport + limit: 200 + - url: https://www.imdb.com/search/title/?title_type=feature&release_date=1990-01-01,&user_rating=5.0,10.0&num_votes=100000,&genres=sport&sort=user_rating,desc + limit: 200 + summary: A Sport Film revolves around a sport setting, event, or an athlete. Often, these films will center on a single sporting event that carries significant importance. Sports films traditionally have a simple plot that builds up to the significant sporting event. This genre is known for incorporating film techniques to build anticipation and intensity. Sport films have a large range of sub-genres, from comedies to dramas, and are more likely than other genres to be based true-life events. + url_poster: https://theposterdb.com/api/assets/60371 + + Thriller: + template: { name: collection_genre, genre: Thriller } + summary: Thriller Film is a genre that revolves around anticipation and suspense. The aim for Thrillers is to keep the audience alert and on the edge of their seats. The protagonist in these films is set against a problem – an escape, a mission, or a mystery. No matter what sub-genre a Thriller film falls into, it will emphasize the danger that the protagonist faces. The tension with the main problem is built on throughout the film and leads to a highly stressful climax. + url_poster: https://theposterdb.com/api/assets/52019 + + War: + template: { name: collection_genre, genre: War } + summary: War Film is a genre that looks at the reality of war on a grand scale. They often focus on landmark battles as well as political issues within war. This genre usually focuses on a main character and his team of support, giving the audience an inside look into the gritty reality of war. + url_poster: https://theposterdb.com/api/assets/51477 + + Western: + template: { name: collection_genre, genre: Western } + summary: "Western Film is a genre that revolves around stories primarily set in the late 19th century in the American Old West. Most Westerns are set between the American Civil War (1865) and the early 1900s. Common themes within Western Film include: the conquest of the wild west, the cultural separation of the East and the West, the West’s resistance to modern change, the conflict between Cowboys and Indians, outlaws, and treasure/gold hunting. American Western Film usually revolves around a stoic hero and emphasizes the importance of honor and sacrifice." + url_poster: https://theposterdb.com/api/assets/51774 diff --git a/Plex/Files/plex_meta_manager/MoviesArt/Person.yml b/Plex/Files/plex_meta_manager/MoviesArt/Person.yml new file mode 100644 index 0000000..243558b --- /dev/null +++ b/Plex/Files/plex_meta_manager/MoviesArt/Person.yml @@ -0,0 +1,507 @@ +templates: + collection_person: + smart_filter: + sort_by: release.desc + validate: false + any: + actor: <> + director: <> + writer: <> + producer: <> + +collections: + Adam Sandler: + template: { name: collection_person, person: "Adam Sandler" } + + Al Pacino: + template: { name: collection_person, person: "Al Pacino" } + + Alfred Hitchcock: + template: { name: collection_person, person: "Alfred Hitchcock" } + + Amy Adams: + template: { name: collection_person, person: "Amy Adams" } + + Angelina Jolie: + template: { name: collection_person, person: "Angelina Jolie" } + + Anne Hathaway: + template: { name: collection_person, person: "Anne Hathaway" } + + Anthony Hopkins: + template: { name: collection_person, person: "Anthony Hopkins" } + + Antonio Banderas: + template: { name: collection_person, person: "Antonio Banderas" } + + Arnold Schwarzenegger: + template: { name: collection_person, person: "Arnold Schwarzenegger" } + + Ben Affleck: + template: { name: collection_person, person: "Ben Affleck" } + + Ben Stiller: + template: { name: collection_person, person: "Ben Stiller" } + + Bill Murray: + template: { name: collection_person, person: "Bill Murray" } + + Brad Pitt: + template: { name: collection_person, person: "Brad Pitt" } + + Bradley Cooper: + template: { name: collection_person, person: "Bradley Cooper" } + + Brendan Fraser: + template: { name: collection_person, person: "Brendan Fraser" } + + Bruce Lee: + template: { name: collection_person, person: "Bruce Lee" } + + Bruce Willis: + template: { name: collection_person, person: "Bruce Willis" } + + Cameron Diaz: + template: { name: collection_person, person: "Cameron Diaz" } + + Carrie Fisher: + template: { name: collection_person, person: "Carrie Fisher" } + + Cate Blanchett: + template: { name: collection_person, person: "Cate Blanchett" } + + Catherine Zeta-Jones: + template: { name: collection_person, person: "Catherine Zeta-Jones" } + + Channing Tatum: + template: { name: collection_person, person: "Channing Tatum" } + + Charlie Chaplin: + template: { name: collection_person, person: "Charlie Chaplin" } + + Charlize Theron: + template: { name: collection_person, person: "Charlize Theron" } + + Chris Evans: + template: { name: collection_person, person: "Chris Evans" } + + Chris Hemsworth: + template: { name: collection_person, person: "Chris Hemsworth" } + + Chris Pratt: + template: { name: collection_person, person: "Chris Pratt" } + + Chris Rock: + template: { name: collection_person, person: "Chris Rock" } + + Christian Bale: + template: { name: collection_person, person: "Christian Bale" } + + Christopher Nolan: + template: { name: collection_person, person: "Christopher Nolan" } + + Christopher Walken: + template: { name: collection_person, person: "Christopher Walken" } + + Chuck Norris: + template: { name: collection_person, person: "Chuck Norris" } + + Clint Eastwood: + template: { name: collection_person, person: "Clint Eastwood" } + + Daniel Craig: + template: { name: collection_person, person: "Daniel Craig" } + + Daniel Radcliffe: + template: { name: collection_person, person: "Daniel Radcliffe" } + + Dave Bautista: + template: { name: collection_person, person: "Dave Bautista" } + + Dave Chappelle: + template: { name: collection_person, person: "Dave Chappelle" } + + Denzel Washington: + template: { name: collection_person, person: "Denzel Washington" } + + Diane Keaton: + template: { name: collection_person, person: "Diane Keaton" } + + Don Cheadle: + template: { name: collection_person, person: "Don Cheadle" } + + Dustin Hoffman: + template: { name: collection_person, person: "Dustin Hoffman" } + + Dwayne Johnson: + template: { name: collection_person, person: "Dwayne Johnson" } + + Eddie Murphy: + template: { name: collection_person, person: "Eddie Murphy" } + + Edward Norton: + template: { name: collection_person, person: "Edward Norton" } + + Elliot Page: + template: { name: collection_person, person: "Elliot Page" } + + Emma Stone: + template: { name: collection_person, person: "Emma Stone" } + + Emma Watson: + template: { name: collection_person, person: "Emma Watson" } + + Ewan McGregor: + template: { name: collection_person, person: "Ewan McGregor" } + + George Clooney: + template: { name: collection_person, person: "George Clooney" } + + Gerard Butler: + template: { name: collection_person, person: "Gerard Butler" } + + Gwyneth Paltrow: + template: { name: collection_person, person: "Gwyneth Paltrow" } + + Harrison Ford: + template: { name: collection_person, person: "Harrison Ford" } + + Hayao Miyazaki: + template: { name: collection_person, person: "Hayao Miyazaki" } + + Hugh Jackman: + template: { name: collection_person, person: "Hugh Jackman" } + + Ian McKellen: + template: { name: collection_person, person: "Ian McKellen" } + + Idris Elba: + template: { name: collection_person, person: "Idris Elba" } + + J.J. Abrams: + template: { name: collection_person, person: "J.J. Abrams" } + + Jack Black: + template: { name: collection_person, person: "Jack Black" } + + Jackie Chan: + template: { name: collection_person, person: "Jackie Chan" } + + James Cameron: + template: { name: collection_person, person: "James Cameron" } + + James Franco: + template: { name: collection_person, person: "James Franco" } + + Jamie Foxx: + template: { name: collection_person, person: "Jamie Foxx" } + + Jason Bateman: + template: { name: collection_person, person: "Jason Bateman" } + + Jason Statham: + template: { name: collection_person, person: "Jason Statham" } + + Jeff Bridges: + template: { name: collection_person, person: "Jeff Bridges" } + + Jeff Goldblum: + template: { name: collection_person, person: "Jeff Goldblum" } + + Jennifer Aniston: + template: { name: collection_person, person: "Jennifer Aniston" } + + Jennifer Lawrence: + template: { name: collection_person, person: "Jennifer Lawrence" } + + Jesse Eisenberg: + template: { name: collection_person, person: "Jesse Eisenberg" } + + Jessica Alba: + template: { name: collection_person, person: "Jessica Alba" } + + Jet Li: + template: { name: collection_person, person: "Jet Li" } + + Jim Carrey: + template: { name: collection_person, person: "Jim Carrey" } + + John Candy: + template: { name: collection_person, person: "John Candy" } + + John Travolta: + template: { name: collection_person, person: "John Travolta" } + + John Wayne: + template: { name: collection_person, person: "John Wayne" } + + Johnny Depp: + template: { name: collection_person, person: "Johnny Depp" } + + Josh Brolin: + template: { name: collection_person, person: "Josh Brolin" } + + Julia Roberts: + template: { name: collection_person, person: "Julia Roberts" } + + Keanu Reeves: + template: { name: collection_person, person: "Keanu Reeves" } + + Kevin Bacon: + template: { name: collection_person, person: "Kevin Bacon" } + + Kevin Costner: + template: { name: collection_person, person: "Kevin Costner" } + + Kevin Hart: + template: { name: collection_person, person: "Kevin Hart" } + + Kevin Smith: + template: { name: collection_person, person: "Kevin Smith" } + + Kristen Stewart: + template: { name: collection_person, person: "Kristen Stewart" } + + Leonardo DiCaprio: + template: { name: collection_person, person: "Leonardo DiCaprio" } + + Liam Neeson: + template: { name: collection_person, person: "Liam Neeson" } + + Lucy Liu: + template: { name: collection_person, person: "Lucy Liu" } + + M. Night Shyamalan: + template: { name: collection_person, person: "M. Night Shyamalan" } + + Mark Ruffalo: + template: { name: collection_person, person: "Mark Ruffalo" } + + Mark Wahlberg: + template: { name: collection_person, person: "Mark Wahlberg" } + + Matt Damon: + template: { name: collection_person, person: "Matt Damon" } + + Matthew McConaughey: + template: { name: collection_person, person: "Matthew McConaughey" } + + Megan Fox: + template: { name: collection_person, person: "Megan Fox" } + + Mel Brooks: + template: { name: collection_person, person: "Mel Brooks" } + + Mel Gibson: + template: { name: collection_person, person: "Mel Gibson" } + + Melissa McCarthy: + template: { name: collection_person, person: "Melissa McCarthy" } + + Meryl Streep: + template: { name: collection_person, person: "Meryl Streep" } + + Michael Bay: + template: { name: collection_person, person: "Michael Bay" } + + Michael Caine: + template: { name: collection_person, person: "Michael Caine" } + + Michael Douglas: + template: { name: collection_person, person: "Michael Douglas" } + + Michael Keaton: + template: { name: collection_person, person: "Michael Keaton" } + + Michelle Pfeiffer: + template: { name: collection_person, person: "Michelle Pfeiffer" } + + Mike Myers: + template: { name: collection_person, person: "Mike Myers" } + + Mila Kunis: + template: { name: collection_person, person: "Mila Kunis" } + + Milla Jovovich: + template: { name: collection_person, person: "Milla Jovovich" } + + Morgan Freeman: + template: { name: collection_person, person: "Morgan Freeman" } + + Natalie Portman: + template: { name: collection_person, person: "Natalie Portman" } + + Nicolas Cage: + template: { name: collection_person, person: "Nicolas Cage" } + + Nicole Kidman: + template: { name: collection_person, person: "Nicole Kidman" } + + Orlando Bloom: + template: { name: collection_person, person: "Orlando Bloom" } + + Owen Wilson: + template: { name: collection_person, person: "Owen Wilson" } + + Patrick Stewart: + template: { name: collection_person, person: "Patrick Stewart" } + + Paul Rudd: + template: { name: collection_person, person: "Paul Rudd" } + + Quentin Tarantino: + template: { name: collection_person, person: "Quentin Tarantino" } + + Reese Witherspoon: + template: { name: collection_person, person: "Reese Witherspoon" } + + Ridley Scott: + template: { name: collection_person, person: "Ridley Scott" } + + Robert De Niro: + template: { name: collection_person, person: "Robert De Niro" } + + Robert Downey Jr: + template: { name: collection_person, person: "Robert Downey Jr" } + + Robin Williams: + template: { name: collection_person, person: "Robin Williams" } + + Rosario Dawson: + template: { name: collection_person, person: "Rosario Dawson" } + + Ryan Reynolds: + template: { name: collection_person, person: "Ryan Reynolds" } + + Sacha Baron Cohen: + template: { name: collection_person, person: "Sacha Baron Cohen" } + + Samuel L. Jackson: + template: { name: collection_person, person: "Samuel L. Jackson" } + + Sandra Bullock: + template: { name: collection_person, person: "Sandra Bullock" } + + Scarlett Johansson: + template: { name: collection_person, person: "Scarlett Johansson" } + + Sean Connery: + template: { name: collection_person, person: "Sean Connery" } + + Seth Rogen: + template: { name: collection_person, person: "Seth Rogen" } + + Shia LaBeouf: + template: { name: collection_person, person: "Shia LaBeouf" } + + Steve Buscemi: + template: { name: collection_person, person: "Steve Buscemi" } + + Steve Carell: + template: { name: collection_person, person: "Steve Carell" } + + Steve Martin: + template: { name: collection_person, person: "Steve Martin" } + + Steven Seagal: + template: { name: collection_person, person: "Steven Seagal" } + + Steven Spielberg: + template: { name: collection_person, person: "Steven Spielberg" } + + Sylvester Stallone: + template: { name: collection_person, person: "Sylvester Stallone" } + + Tim Allen: + template: { name: collection_person, person: "Tim Allen" } + + Tim Burton: + template: { name: collection_person, person: "Tim Burton" } + + Tom Cruise: + template: { name: collection_person, person: "Tom Cruise" } + + Tom Hanks: + template: { name: collection_person, person: "Tom Hanks" } + + Tommy Lee-Jones: + template: { name: collection_person, person: "Tommy Lee-Jones" } + + Vin Diesel: + template: { name: collection_person, person: "Vin Diesel" } + + Vince Vaughn: + template: { name: collection_person, person: "Vince Vaughn" } + + Wesley Snipes: + template: { name: collection_person, person: "Wesley Snipes" } + + Will Ferrell: + template: { name: collection_person, person: "Will Ferrell" } + + Will Smith: + template: { name: collection_person, person: "Will Smith" } + + Woody Harrelson: + template: { name: collection_person, person: "Woody Harrelson" } + + Zack Snyder: + template: { name: collection_person, person: "Zack Snyder" } + + Zoe Saldana: + template: { name: collection_person, person: "Zoe Saldana" } + + Alejandro González Iñárritu: + template: { name: collection_person, person: 223 } + + Alex Garland: + template: { name: collection_person, person: 2036 } + + Alfonso Cuarón: + template: { name: collection_person, person: 11218 } + + Akira Kurosawa: + template: { name: collection_person, person: 5026 } + + Coen Brothers: + template: { name: collection_person, person: "1223, 1224" } + summary: "Joel Coen and Ethan Coen, collectively referred to as the Coen Brothers, are American film directors, producers, screenwriters, and editors. Their films span many genres and styles, which they frequently subvert or parody. Their most acclaimed works include: Raising Arizona (1987), Miller's Crossing (1990), Fargo (1996), The Big Lebowski (1998), O Brother, Where Art Thou? (2000), No Country for Old Men (2007), Burn After Reading (2008), A Serious Man (2009), True Grit (2010), Inside Llewyn Davis (2013), and The Ballad of Buster Scruggs (2018)." + + Darren Aronofsky: + template: { name: collection_person, person: 6431 } + + David Fincher: + template: { name: collection_person, person: 7467 } + + David Lean: + template: { name: collection_person, person: 12238 } + + David Lynch: + template: { name: collection_person, person: 5602 } + + Denis Villeneuve: + template: { name: collection_person, person: 137427 } + + Francis Ford Coppola: + template: { name: collection_person, person: 1776 } + + Kathryn Bigelow: + template: { name: collection_person, person: 14392 } + + Paul Thomas Anderson: + template: { name: collection_person, person: 4762 } + + Spike Lee: + template: { name: collection_person, person: 5281 } + + Stanley Kubrick: + template: { name: collection_person, person: 240 } + + Terrence Malick: + template: { name: collection_person, person: 30715 } + + Terry Gilliam: + template: { name: collection_person, person: 280 } + + Wes Anderson: + template: { name: collection_person, person: 5655 } diff --git a/Plex/Files/plex_meta_manager/MoviesArt/Top.yml b/Plex/Files/plex_meta_manager/MoviesArt/Top.yml new file mode 100644 index 0000000..de26f1d --- /dev/null +++ b/Plex/Files/plex_meta_manager/MoviesArt/Top.yml @@ -0,0 +1,45 @@ +templates: + collection_top: + sort_title: +++++++++++++++++++_<> + sync_mode: sync + radarr_add_missing: false + radarr_tag: pmm_top + +collections: + Trending: + template: { name: collection_top, sort: 1Trending } + trakt_trending: 40 + tmdb_trending_daily: 40 + tmdb_trending_weekly: 40 + smart_label: year.desc + summary: Movies Trending across the internet + url_background: https://i.imgur.com/SOVfrIq.png + url_poster: https://i.imgur.com/4vpMZoA.png + + Popular: + template: { name: collection_top, sort: 2Popular } + tmdb_popular: 40 + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,documentary,short + limit: 40 + smart_label: year.desc + summary: Popular Movies across the internet + url_background: https://i.imgur.com/SOVfrIq.png + url_poster: https://i.imgur.com/4cI2Jg4.png + + Top Rated: + template: { name: collection_top, sort: 3Top Rated } + imdb_list: https://www.imdb.com/search/title/?groups=top_250&count=250 + tmdb_top_rated: 250 + smart_label: critic_rating.desc + summary: Top Rated Movies + url_background: https://i.imgur.com/b26VZ9y.jpg + url_poster: https://i.imgur.com/x7BhedD.png + + Newly Released Movies: + template: { name: collection_top, sort: 4Newly Released } + smart_label: added.desc + trakt_list: https://trakt.tv/users/giladg/lists/latest-releases + summary: A collection of newly-released movies in cinema and on streaming services + url_poster: https://i.imgur.com/D62EdJd.jpg + url_background: https://wallpaperbat.com/img/23094-cinema-hd-wallpaper-top-free-cinema-hd-background.jpg diff --git a/Plex/Files/plex_meta_manager/Stand Up/People.yml b/Plex/Files/plex_meta_manager/Stand Up/People.yml new file mode 100644 index 0000000..384c765 --- /dev/null +++ b/Plex/Files/plex_meta_manager/Stand Up/People.yml @@ -0,0 +1,70 @@ +templates: + collection_person: + actor: tmdb + tmdb_person: <> + sort_title: +_<> + sync_mode: sync + collection_order: release + radarr_add_missing: true + radarr_tag: pmm_standup + +collections: + Aziz Ansari: + template: { name: collection_person, person: 86626 } + + Bill Burr: + template: { name: collection_person, person: 109708 } + + Bo Burnham: + template: { name: collection_person, person: 115128 } + + Chris Rock: + template: { name: collection_person, person: 2632 } + + Dave Chappelle: + template: { name: collection_person, person: 4169 } + + Demetri Martin: + template: { name: collection_person, person: 84075 } + + Eddie Murphy: + template: { name: collection_person, person: 776 } + + George Carlin: + template: { name: collection_person, person: 15903 } + + Jerry Seinfeld: + template: { name: collection_person, person: 16377 } + + Jim Gaffigan: + template: { name: collection_person, person: 84407 } + + Jim Norton: + template: { name: collection_person, person: 135855 } + + Jimmy Carr: + template: { name: collection_person, person: 59077 } + + John Mulaney: + template: { name: collection_person, person: 933558 } + + Kevin Hart: + template: { name: collection_person, person: 55638 } + + Louis C.K.: + template: { name: collection_person, person: 52849 } + + Patton Oswalt: + template: { name: collection_person, person: 10872 } + + Richard Pryor: + template: { name: collection_person, person: 9309 } + + Ricky Gervais: + template: { name: collection_person, person: 17835 } + + Robin Williams: + template: { name: collection_person, person: 2157 } + + Trevor Noah: + template: { name: collection_person, person: 131133 } diff --git a/Plex/Files/plex_meta_manager/Stand Up/Top.yml b/Plex/Files/plex_meta_manager/Stand Up/Top.yml new file mode 100644 index 0000000..de26f1d --- /dev/null +++ b/Plex/Files/plex_meta_manager/Stand Up/Top.yml @@ -0,0 +1,45 @@ +templates: + collection_top: + sort_title: +++++++++++++++++++_<> + sync_mode: sync + radarr_add_missing: false + radarr_tag: pmm_top + +collections: + Trending: + template: { name: collection_top, sort: 1Trending } + trakt_trending: 40 + tmdb_trending_daily: 40 + tmdb_trending_weekly: 40 + smart_label: year.desc + summary: Movies Trending across the internet + url_background: https://i.imgur.com/SOVfrIq.png + url_poster: https://i.imgur.com/4vpMZoA.png + + Popular: + template: { name: collection_top, sort: 2Popular } + tmdb_popular: 40 + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,documentary,short + limit: 40 + smart_label: year.desc + summary: Popular Movies across the internet + url_background: https://i.imgur.com/SOVfrIq.png + url_poster: https://i.imgur.com/4cI2Jg4.png + + Top Rated: + template: { name: collection_top, sort: 3Top Rated } + imdb_list: https://www.imdb.com/search/title/?groups=top_250&count=250 + tmdb_top_rated: 250 + smart_label: critic_rating.desc + summary: Top Rated Movies + url_background: https://i.imgur.com/b26VZ9y.jpg + url_poster: https://i.imgur.com/x7BhedD.png + + Newly Released Movies: + template: { name: collection_top, sort: 4Newly Released } + smart_label: added.desc + trakt_list: https://trakt.tv/users/giladg/lists/latest-releases + summary: A collection of newly-released movies in cinema and on streaming services + url_poster: https://i.imgur.com/D62EdJd.jpg + url_background: https://wallpaperbat.com/img/23094-cinema-hd-wallpaper-top-free-cinema-hd-background.jpg diff --git a/Plex/Files/plex_meta_manager/TV Shows/Channels.yml b/Plex/Files/plex_meta_manager/TV Shows/Channels.yml new file mode 100644 index 0000000..d44bc43 --- /dev/null +++ b/Plex/Files/plex_meta_manager/TV Shows/Channels.yml @@ -0,0 +1,63 @@ +templates: + collection_tvchannels: + smart_label: originally_available.desc + sync_mode: sync + url_poster: <> + sort_title: +++++++++++++++++++++_ <> + sonarr_add_missing: false + sonarr_tag: pmm_tvchannels + +collections: + ABC: + template: + { name: Studio, poster: https://theposterdb.com/api/assets/113115 } + tmdb_network: 2 + summary: Shows Aired on ABC + + AMC: + template: + { name: Studio, poster: https://theposterdb.com/api/assets/113118 } + tmdb_network: 174 + summary: Shows Aired on AMC + + BBC: + template: + { name: Studio, poster: https://theposterdb.com/api/assets/113123 } + tmdb_network: 4 + summary: Shows Aired on BBC One + + CBS: + template: + { name: Studio, poster: https://theposterdb.com/api/assets/113138 } + tmdb_network: 16 + summary: Shows Aired on CBS + + FOX: + template: + { name: Studio, poster: https://theposterdb.com/api/assets/113173 } + tmdb_network: 19 + summary: Shows Aired on FOX + + NBC: + template: + { name: Studio, poster: https://theposterdb.com/api/assets/113217 } + tmdb_network: 6 + summary: Shows Aired on NBC + + Showtime: + template: + { name: Studio, poster: https://theposterdb.com/api/assets/113257 } + tmdb_network: 67 + summary: Showtime Orginal Shows + + Starz: + template: + { name: Studio, poster: https://theposterdb.com/api/assets/113265 } + tmdb_network: 318 + summary: Starz Orginal Shows + + SyFy: + template: + { name: Studio, poster: https://theposterdb.com/api/assets/113267 } + tmdb_network: 77 + summary: Shows Aired on SYFY diff --git a/Plex/Files/plex_meta_manager/TV Shows/Studios.yml b/Plex/Files/plex_meta_manager/TV Shows/Studios.yml new file mode 100644 index 0000000..ab01925 --- /dev/null +++ b/Plex/Files/plex_meta_manager/TV Shows/Studios.yml @@ -0,0 +1,48 @@ +templates: + collection_tvstudios: + smart_label: originally_available.desc + sort_title: +++++++++++++++++++++_ <> + sync_mode: sync + sonarr_add_missing: false + sonarr_tag: pmm_tvstudios + +collections: + Apple Original Series 2000-2025: + template: { name: collection_tvstudios, sort: 1APPLE } + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,tv_series,tv_special,tv_miniseries,documentary,video,tv_short&release_date=2000-01-01,2025-12-31&genres=!animation&countries=us&languages=en&sort=release_date,desc&count=250&companies=co0546168 + summary: All Apple TV Original Series/Shows From 2000-2025 + url_poster: https://i.imgur.com/O9iWork.png + url_background: https://wallpaper-house.com/data/out/8/wallpaper2you_228774.png + + Amazon Original Series 2000-2025: + template: { name: collection_tvstudios, sort: 2AMAZON } + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,tv_series,tv_special,tv_miniseries,documentary,video,tv_short&release_date=2000-01-01,2025-12-31&genres=!animation&countries=us&languages=en&sort=release_date,desc&count=250&companies=co0319272 + summary: All Apple TV Original Series/Shows From 2000-2025 + url_poster: https://i.imgur.com/nU3gqqB.png + url_background: https://i.imgur.com/2jfs7oS.png + + Netflix Original Series 2000-2025: + template: { name: collection_tvstudios, sort: 3NETFLIX } + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,tv_series,tv_special,tv_miniseries,documentary,video,tv_short&release_date=2000-01-01,2025-12-31&genres=!animation&countries=us&languages=en&sort=release_date,desc&count=250&companies=co0144901 + summary: All Netflix Original Series/Shows From 2000-2025 + url_poster: https://i.imgur.com/7kiE1MU.png + url_background: https://img5.goodfon.com/original/1920x1080/1/61/fon-netflix-logo-raduga-tsvet-fon-background-skachat-oboi-sk.jpg + + HBO Max Original Series 2000-2025: + template: { name: collection_tvstudios, sort: 4HBO } + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,tv_series,tv_special,tv_miniseries,documentary,video,tv_short&release_date=2000-01-01,2025-12-31&genres=!animation&countries=us&languages=en&sort=release_date,desc&count=250&companies=co0754095 + summary: All HBO Max Series/Shows From 2000-2025 + url_poster: https://i.redd.it/zxdvw3tk3f151.jpg + url_background: https://wallpapercave.com/wp/wp6402755.png + + HULU Original Series 2000-2025: + template: { name: collection_tvstudios, sort: 5HULU } + imdb_list: + url: https://www.imdb.com/search/title/?title_type=feature,tv_movie,tv_series,tv_special,tv_miniseries,documentary,video,tv_short&release_date=2000-01-01,2025-12-31&genres=!animation&countries=us&languages=en&sort=release_date,desc&count=250&companies=co0218858 + summary: All HULU Original Series/Shows From 2000-2025 + url_poster: https://plexcollectionposters.com/images/2019/05/26/Hulu6ddad752a5ce9bac.jpg + url_background: https://cdn.vox-cdn.com/thumbor/oR4hqrmTxbX_O4gdJ6np8h-PxFk=/0x439:750x861/1600x900/cdn.vox-cdn.com/uploads/chorus_image/image/56311701/Image_uploaded_from_iOS__8_.1503433270.jpg diff --git a/Plex/Files/plex_meta_manager/TV Shows/Top.yml b/Plex/Files/plex_meta_manager/TV Shows/Top.yml new file mode 100644 index 0000000..2f96df4 --- /dev/null +++ b/Plex/Files/plex_meta_manager/TV Shows/Top.yml @@ -0,0 +1,19 @@ +templates: + collection_tvtop: + sync_mode: sync + smart_label: originally_available.desc + sonarr_add_missing: false + sonarr_tag: pmm_tvtop + +collections: + Trending: + template: { name: collection_tvtop } + trakt_trending: 40 + summary: Shows Trending across the internet + + Popular: + template: { name: collection_tvtop } + imdb_list: + url: https://www.imdb.com/search/title/?title_type=tv_series,tv_miniseries + limit: 40 + summary: Popular Shows across the internet diff --git a/Plex/Files/plex_meta_manager/config.yml b/Plex/Files/plex_meta_manager/config.yml new file mode 100644 index 0000000..dfe09b2 --- /dev/null +++ b/Plex/Files/plex_meta_manager/config.yml @@ -0,0 +1,259 @@ +libraries: + Movies: + library_name: Movies + radarr: + url: http://radarr:7878 + token: e6e3d6f4aafe4e499d970cfcbf042db9 + root_folder_path: /mnt/store/Movies + monitor: true + availability: released + quality_profile: HD-1080p + tag: pmm + search: true + radarr_path: /mnt/store/Movies + plex_path: /movies + add_missing: false + operations: + delete_collections_with_less: 2 + delete_unmanaged_collections: true + metadata_path: + folder: /config/Movies + Anime Movies: + library_name: Anime Movies + radarr: + url: http://radarr_anime:7878 + token: fb126bad31d64d43bb669ad81329954d + root_folder_path: /mnt/store/Anime Movies + monitor: true + availability: released + quality_profile: HD-1080p + tag: pmm + search: true + radarr_path: /mnt/store/Anime Movies + plex_path: /anime_movies + add_missing: false + operations: + delete_collections_with_less: 2 + delete_unmanaged_collections: true + metadata_path: + folder: /config/AnimeMovies + Movies Classics: + library_name: Movies Classics + radarr: + url: http://radarr_art:7878 + token: 32365893c4234f8a9ad96d68d6e7a520 + root_folder_path: /mnt/store/Movies Classics + monitor: true + availability: released + quality_profile: HD-1080p + tag: pmm + search: true + radarr_path: /mnt/store/Movies Classics + plex_path: /movies_classics + add_missing: false + operations: + delete_collections_with_less: 2 + delete_unmanaged_collections: true + metadata_path: + folder: /config/MoviesArt + Movies Foreign: + library_name: Movies Foreign + radarr: + url: http://radarr_art:7878 + token: 32365893c4234f8a9ad96d68d6e7a520 + root_folder_path: /mnt/store/Movies Foreign + monitor: true + availability: released + quality_profile: HD-1080p + tag: pmm + search: true + radarr_path: /mnt/store/Movies Foreign + plex_path: /movies_foreign + add_missing: false + operations: + delete_collections_with_less: 2 + delete_unmanaged_collections: true + metadata_path: + folder: /config/MoviesArt + Documentaries: + library_name: Documentaries + radarr: + url: http://radarr_documentaries:7878 + token: fd03f47363324096a56d0a453623420b + root_folder_path: /mnt/store/Documentaries + monitor: true + availability: released + quality_profile: HD-1080p + tag: pmm + search: true + radarr_path: /mnt/store/Documentaries + plex_path: /documentaries + add_missing: false + operations: + delete_collections_with_less: 2 + delete_unmanaged_collections: true + metadata_path: + folder: /config/Documentaries + Stand Up: + library_name: Stand Up + radarr: + url: http://radarr_standup:7878 + token: c7c425b3fbcf4112895aceec7729f4d1 + root_folder_path: /mnt/store/Stand Up + monitor: true + availability: released + quality_profile: HD-1080p + tag: pmm + search: true + radarr_path: /mnt/store/Stand Up + plex_path: /standup + add_missing: false + operations: + delete_collections_with_less: 2 + delete_unmanaged_collections: true + metadata_path: + folder: /config/Stand Up + TV Shows: + library_name: TV Shows + sonarr: + url: http://sonarr:8989 + token: 7f0dfeea4b9f410d96b5ffa2f809d1e8 + root_folder_path: /mnt/store/TV Shows + monitor: all + quality_profile: HD-1080p + language_profile: English + series_type: standard + season_folder: true + tag: pmm + search: true + cutoff_search: true + sonarr_path: /mnt/store/TV Shows + plex_path: /tvshows + add_missing: false + operations: + delete_unmanaged_collections: true + metadata_path: + folder: /config/TV Shows + Anime: + library_name: Anime + sonarr: + url: http://sonarr_anime:8989 + token: a2f10e70559c4ee3b8ff1d6cdc5a41f1 + root_folder_path: /mnt/store/Anime + monitor: all + quality_profile: HD-1080p + language_profile: English + series_type: anime + season_folder: true + tag: pmm + search: true + cutoff_search: true + sonarr_path: /mnt/store/Anime + plex_path: /anime + add_missing: false + operations: + delete_unmanaged_collections: true + metadata_path: + folder: /config/Anime + Documentary Shows: + library_name: Documentary Shows + sonarr: + url: http://sonarr_documentaries:8989 + token: 3ed988c3731b45ad8124b7d55b620d6b + root_folder_path: /mnt/store/Documentary Shows + monitor: all + quality_profile: HD-1080p + language_profile: English + series_type: standard + season_folder: true + tag: pmm + search: true + cutoff_search: true + sonarr_path: /mnt/store/Documentary Shows + plex_path: /documentary_shows + add_missing: false + operations: + delete_unmanaged_collections: true + metadata_path: + folder: /config/DocumentaryShows +settings: + cache: true + cache_expiration: 60 + asset_directory: /config/assets + asset_folders: true + asset_depth: 0 + create_asset_folders: false + dimensional_asset_rename: false + download_url_assets: true + show_missing_season_assets: false + sync_mode: append + delete_below_minimum: true + delete_not_scheduled: false + run_again_delay: 2 + missing_only_released: true + only_filter_missing: false + show_unmanaged: true + show_filtered: false + show_options: false + show_missing: true + show_missing_assets: true + save_missing: true + tvdb_language: eng + ignore_ids: + ignore_imdb_ids: + verify_ssl: true + minimum_items: 1 + default_collection_order: + playlist_sync_to_users: all + show_missing_episode_assets: false + show_asset_not_needed: true + item_refresh_delay: 0 + custom_repo: + prioritize_assets: false + playlist_report: true + check_nightly: false + show_unconfigured: true + playlist_exclude_users: +plex: + url: http://plex.alexlebens.net:32400 + token: uCWu6VUVF2qPbh68tC_s + timeout: 60 + clean_bundles: true + empty_trash: true + optimize: true +tmdb: + apikey: 564703b3d52ce7b2f99cc1df45eb2031 + language: en + cache_expiration: 60 + region: us +tautulli: + url: http://plex_tautulli:8181 + apikey: 41da8e4c507341ee90683fe5e815d85d +trakt: + client_id: b077cb738bc096ab8385a994decab09b9baadfb04ecbbf3eb583bad5e717cb94 + client_secret: 514a146995b7666c05c64be3e5c1d77ee2def07e7a834603db233248c39a3093 + authorization: + access_token: 73eb2d350e992c41445c64b917fb31a527c708a1daa7d9cbba4982ecb1950e31 + token_type: Bearer + expires_in: 7889238 + refresh_token: 8883633f5107a6f4ebc444a97e8fa27639f239bd90db81d57e0003814951b8f2 + scope: public + created_at: 1675859896 + pin: +mal: + client_id: bdc66e7ca0338093e0f3845533788468 + client_secret: 06f9213f289c5236d9332eccbcce8521b7d93dfd945f4caa5c88311d1f0dbaad + authorization: + access_token: eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjkxZGU0MTgzNmMyZDRjOGJlMWE3MzI2MDhiNzFmMzY5NzQzZDU1MGZmN2RlODM3YWUwZDRkOGVlZWRhZmM5YmI5ZTVkM2UzZTQzMWMwZWU2In0.eyJhdWQiOiJiZGM2NmU3Y2EwMzM4MDkzZTBmMzg0NTUzMzc4ODQ2OCIsImp0aSI6IjkxZGU0MTgzNmMyZDRjOGJlMWE3MzI2MDhiNzFmMzY5NzQzZDU1MGZmN2RlODM3YWUwZDRkOGVlZWRhZmM5YmI5ZTVkM2UzZTQzMWMwZWU2IiwiaWF0IjoxNjc1ODQ3OTM2LCJuYmYiOjE2NzU4NDc5MzYsImV4cCI6MTY3ODI2NzEzNiwic3ViIjoiMTQzNTIwMjIiLCJzY29wZXMiOltdfQ.k9SEBpG_UEVQqr8r_V5m37LwRapgls3YLMiMQTYbKmLxT3f6DWtaBAiVZpFkzCmN18DHeZoIOwbHdAkZpXjVht-m913JkBjorzj93UQ_qizP6d61B1ImgBkWRsdb-4L1ShzcK5z8Ra22FTTpjFTFXMw9-JWbJ27Ze5irYG27VrWL4P87NmJKTf2dcYQd4FHTLY4HIkd5C13ip9-RNQXy--WL2RO9SbfVXhSHpdzO1Vf0KvPEFuGiIX-DiZcJCOKNgrDWGrMTYMchnJKBiIDhRrELLMLIqQhcf0mDtaiAaDQWSa1kAA8_r34o0Jqq1DyKoHFJvW-eUUqtcSL6ffezNw + token_type: Bearer + expires_in: 2419200 + refresh_token: def502004e04ee4d11b96f53b5084a27506d323daeaf28fd372fb8af60b2b11ae433058fb0d0b46284771f0387d1a88959c19de482d778e01783b82e7f6ef0df63a789c7d89fe2d2eb249245709f98ba833d3d655a7889955921fbbf22a257029f7d398a919f19f567506a5db7dc33c8ce2d2fad594e13b05d936181cff8e9544150c92a90d0902d6aaf55342dc393d5e342ca31fe8c3a26025475e3ab281d5a357325c5c531057c085c14fca536121a20456bde0476f9416ff8dd71422b9d2165a90d2694bb7702c36e0c8bacde0bbc27202a15d51866a735952b5ec13acc0b6a6049a257216846c2ff3314ac48f03ed024601df1c28803f320738e7c009309c7a6919fa184a9128d64cacab6f52d4506d6421dc4491c4b361e48d941a4a1bf80281bfd6f7241e6a248c4a299513e6735809f44332bdfba2c9ce4675a28a1a40b4ae10e2532c822d56f9d80b43e1eab2cbbff25e754285aa09ee94c4581f4455d9b0051e04a3bc807bae04fe9af6303d98cfae27136a6e282dc8cad91dbfd8fe9730abd2a6ea7dd8a + localhost_url: + cache_expiration: 60 +webhooks: + error: https://discord.com/api/webhooks/1072796235901194311/eXEtCM4De3xNb_8DBuM1BxIWpSA3kdQyPjw--Wu2NG2K7kpEirlCE52yZ_oO4dU4q8eM + version: https://discord.com/api/webhooks/1072796235901194311/eXEtCM4De3xNb_8DBuM1BxIWpSA3kdQyPjw--Wu2NG2K7kpEirlCE52yZ_oO4dU4q8eM + run_start: https://discord.com/api/webhooks/1072796235901194311/eXEtCM4De3xNb_8DBuM1BxIWpSA3kdQyPjw--Wu2NG2K7kpEirlCE52yZ_oO4dU4q8eM + run_end: https://discord.com/api/webhooks/1072796235901194311/eXEtCM4De3xNb_8DBuM1BxIWpSA3kdQyPjw--Wu2NG2K7kpEirlCE52yZ_oO4dU4q8eM + changes: https://discord.com/api/webhooks/1072796235901194311/eXEtCM4De3xNb_8DBuM1BxIWpSA3kdQyPjw--Wu2NG2K7kpEirlCE52yZ_oO4dU4q8eM + delete: https://discord.com/api/webhooks/1072796235901194311/eXEtCM4De3xNb_8DBuM1BxIWpSA3kdQyPjw--Wu2NG2K7kpEirlCE52yZ_oO4dU4q8eM diff --git a/Plex/README.md b/Plex/README.md new file mode 100644 index 0000000..5ce03e8 --- /dev/null +++ b/Plex/README.md @@ -0,0 +1,3 @@ +# Plex + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Plex/status.svg)](https://drone.alexlebens.net/alexlebens/Plex) \ No newline at end of file diff --git a/Plex/UptimeKuma/docker-1.json b/Plex/UptimeKuma/docker-1.json new file mode 100644 index 0000000..a06a2a4 --- /dev/null +++ b/Plex/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Plex - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://plex.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "plex", + "docker_host": 1 +} \ No newline at end of file diff --git a/Plex/UptimeKuma/docker-2.json b/Plex/UptimeKuma/docker-2.json new file mode 100644 index 0000000..e7e0d39 --- /dev/null +++ b/Plex/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Plex Tautulli - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://tautulli.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "plex_tautulli", + "docker_host": 1 +} \ No newline at end of file diff --git a/Plex/UptimeKuma/docker-3.json b/Plex/UptimeKuma/docker-3.json new file mode 100644 index 0000000..e88a558 --- /dev/null +++ b/Plex/UptimeKuma/docker-3.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Plex Meta Manager - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://plex.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "plex_meta_manager", + "docker_host": 1 +} \ No newline at end of file diff --git a/Plex/UptimeKuma/docker-4.json b/Plex/UptimeKuma/docker-4.json new file mode 100644 index 0000000..d87f834 --- /dev/null +++ b/Plex/UptimeKuma/docker-4.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Plex Exporter - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "http://plex_exporter:9000/metrics", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "plex_exporter", + "docker_host": 1 +} \ No newline at end of file diff --git a/Plex/UptimeKuma/http-1.json b/Plex/UptimeKuma/http-1.json new file mode 100644 index 0000000..c41a04e --- /dev/null +++ b/Plex/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Plex - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://plex.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Plex/UptimeKuma/http-2.json b/Plex/UptimeKuma/http-2.json new file mode 100644 index 0000000..5bd147d --- /dev/null +++ b/Plex/UptimeKuma/http-2.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Plex Tautulli - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://tautulli.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Plex/UptimeKuma/http-3.json b/Plex/UptimeKuma/http-3.json new file mode 100644 index 0000000..05324b1 --- /dev/null +++ b/Plex/UptimeKuma/http-3.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Plex Exporter - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "http://plex_exporter:9594/metrics", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Plex/docker-compose.yml b/Plex/docker-compose.yml new file mode 100644 index 0000000..6e55365 --- /dev/null +++ b/Plex/docker-compose.yml @@ -0,0 +1,224 @@ +services: + plex: + container_name: plex + devices: + - /dev/dri:/dev/dri + env_file: + - .env + hostname: plex.alexlebens.net + image: plexinc/pms-docker + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.plex.entrypoints: websecure + traefik.http.routers.plex.rule: Host(`plex.alexlebens.net`) + traefik.http.routers.plex.service: plex + traefik.http.services.plex.loadbalancer.server.port: 32400 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + ports: + - 32400:32400/tcp + - 32400:32400/udp + - 3005:3005/tcp + - 8324:8324/tcp + - 32469:32469/tcp + - 1900:1900/udp + - 32410:32410/udp + - 32412:32412/udp + - 32413:32413/udp + - 32414:32414/udp + restart: unless-stopped + privileged: true + volumes: + - config:/config + - transcode:/transcode + - preroll_nfs:/preroll + - anime_nfs:/anime + - anime_movies_nfs:/anime_movies + - documentaries_nfs:/documentaries + - documentary_shows_nfs:/documentary_shows + - dvr_nfs:/dvr + - movies_nfs:/movies + - movies_classics_nfs:/movies_classics + - movies_foreign_nfs:/movies_foreign + - music_nfs:/music + - standup_nfs:/standup + - tvshows_nfs:/tvshows + + tautulli: + container_name: plex_tautulli + env_file: + - .env + image: ghcr.io/tautulli/tautulli:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.tautulli.entrypoints: websecure + traefik.http.routers.tautulli.rule: Host(`tautulli.alexlebens.net`) + traefik.http.routers.tautulli.service: tautulli + traefik.http.routers.tautulli.middlewares: tautulli-theme@file + traefik.http.services.tautulli.loadbalancer.server.port: 8181 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: unless-stopped + volumes: + - tautulli:/config + + plex_meta_manager: + container_name: plex_meta_manager + environment: + - PMM_TIME=01:00 + - TZ=America/Denver + image: meisnate12/plex-meta-manager:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: unless-stopped + volumes: + - plex_meta_manager:/config + + plex_exporter: + container_name: plex_exporter + env_file: + - .env + image: ghcr.io/axsuul/plex-media-server-exporter:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: unless-stopped + +networks: + traefik: + name: traefik + external: true + +volumes: + config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/plex_config + + transcode: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/plex_transcode + + tautulli: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/plex_tautulli + + plex_meta_manager: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/plex_meta_manager + + preroll_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Preroll" + + anime_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Anime" + + anime_movies_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Anime Movies" + + documentaries_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Documentaries" + + documentary_shows_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Documentary Shows" + + dvr_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/DVR" + + movies_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Movies" + + movies_classics_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Movies Classics" + + movies_foreign_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Movies Foreign" + + music_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Music" + + standup_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/Stand Up" + + tvshows_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: ":/volume2/Storage/TV Shows" diff --git a/Portainer/.drone.yml b/Portainer/.drone.yml new file mode 100644 index 0000000..8f6ecaa --- /dev/null +++ b/Portainer/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Portainer + URL: portainer.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Portainer failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Portainer failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Portainer succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Portainer failed. + when: + status: + - failure diff --git a/Portainer/README.md b/Portainer/README.md new file mode 100644 index 0000000..6936f52 --- /dev/null +++ b/Portainer/README.md @@ -0,0 +1,3 @@ +# Portainer + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Portainer/status.svg)](https://drone.alexlebens.net/alexlebens/Portainer) \ No newline at end of file diff --git a/Portainer/UptimeKuma/docker-1.json b/Portainer/UptimeKuma/docker-1.json new file mode 100644 index 0000000..095ae17 --- /dev/null +++ b/Portainer/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Portainer - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://portainer.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "portainer", + "docker_host": 1 +} \ No newline at end of file diff --git a/Portainer/UptimeKuma/docker-2.json b/Portainer/UptimeKuma/docker-2.json new file mode 100644 index 0000000..8d05493 --- /dev/null +++ b/Portainer/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Portainer Agent - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://portainer.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "portainer_agent", + "docker_host": 1 +} \ No newline at end of file diff --git a/Portainer/UptimeKuma/http-1.json b/Portainer/UptimeKuma/http-1.json new file mode 100644 index 0000000..41250a1 --- /dev/null +++ b/Portainer/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Portainer - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://portainer.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Portainer/docker-compose.yml b/Portainer/docker-compose.yml new file mode 100644 index 0000000..d1d1021 --- /dev/null +++ b/Portainer/docker-compose.yml @@ -0,0 +1,63 @@ +services: + portainer: + container_name: portainer + image: portainer/portainer-ce:2.18.2 + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.portainer.entrypoints: websecure + traefik.http.routers.portainer.rule: Host(`portainer.alexlebens.net`) + traefik.http.routers.portainer.service: portainer + traefik.http.services.portainer.loadbalancer.server.port: 9000 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + portainer: + ipv4_address: 172.18.0.2 + restart: always + privileged: true + ports: + - 9443:9443 + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - data:/data + + portainer_agent: + container_name: portainer_agent + image: portainer/agent:2.18.2 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + portainer: + ipv4_address: 172.18.0.10 + restart: always + privileged: true + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - /var/lib/docker/volumes:/var/lib/docker/volumes + +networks: + traefik: + name: traefik + external: true + + portainer: + name: portainer + ipam: + config: + - subnet: 172.18.0.0/16 + +volumes: + data: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/portainer_data \ No newline at end of file diff --git a/Prometheus/.drone.yml b/Prometheus/.drone.yml new file mode 100644 index 0000000..8147e57 --- /dev/null +++ b/Prometheus/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Prometheus + URL: prometheus.alexlebens.net alertmanager.alexlebens.net ps03fd.alexlebens.net cadvisor.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Prometheus failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Prometheus failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Prometheus succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Prometheus failed. + when: + status: + - failure diff --git a/Prometheus/.env b/Prometheus/.env new file mode 100644 index 0000000..cc38644 --- /dev/null +++ b/Prometheus/.env @@ -0,0 +1,15 @@ +UP_INFLUXDB_DISABLE="true" +UP_POLLER_DEBUG="false" +UP_UNIFI_DYNAMIC="false" +UP_PROMETHEUS_HTTP_LISTEN=0.0.0.0:9130 +UP_PROMETHEUS_NAMESPACE=unifipoller +UP_UNIFI_CONTROLLER_0_PASS=unifipoller123QAZ +UP_UNIFI_CONTROLLER_0_SAVE_ALARMS="true" +UP_UNIFI_CONTROLLER_0_SAVE_ANOMALIES="true" +UP_UNIFI_CONTROLLER_0_SAVE_DPI="true" +UP_UNIFI_CONTROLLER_0_SAVE_EVENTS="true" +UP_UNIFI_CONTROLLER_0_SAVE_IDS="true" +UP_UNIFI_CONTROLLER_0_SAVE_SITES="true" +UP_UNIFI_CONTROLLER_0_URL=https://unifi.alexlebens.net +UP_UNIFI_CONTROLLER_0_USER=unifipoller +TZ=America/Denver \ No newline at end of file diff --git a/Prometheus/Files/prometheus_alertmanager/alert.rules.yml b/Prometheus/Files/prometheus_alertmanager/alert.rules.yml new file mode 100644 index 0000000..687e446 --- /dev/null +++ b/Prometheus/Files/prometheus_alertmanager/alert.rules.yml @@ -0,0 +1,38 @@ +groups: + - name: service + rules: + - alert: service_down + expr: up == 0 + for: 10m + labels: + severity: critical + annotations: + summary: "Instance {{ $labels.job }} down" + description: "{{ $labels.job }} has been down for more than 10 minutes." + + - name: infrastructure + rules: + - alert: high_load + expr: node_load1 > 8 + for: 10m + labels: + severity: warning + annotations: + summary: "Instance {{ $labels.job }} under high load" + description: "{{ $labels.job }} is under high load." + + - name: disk_space + rules: + - alert: disk_will_fill + expr: predict_linear(node_filesystem_free_bytes{job="host-ps03fd"}[4h], 4 * 3600) < 0 + for: 5m + labels: + severity: critical + + - alert: disk_10_percent_free + expr: node_exporter:node_filesystem_free_bytes:fs_used_percents >= 90 + labels: + severity: critical + annotations: + summary: "Instance {{ $labels.instance }} is low on disk space" + description: "{{ $labels.instance }} has only {{ $value }}% free." diff --git a/Prometheus/Files/prometheus_alertmanager/alertmanager.yml b/Prometheus/Files/prometheus_alertmanager/alertmanager.yml new file mode 100644 index 0000000..e879db8 --- /dev/null +++ b/Prometheus/Files/prometheus_alertmanager/alertmanager.yml @@ -0,0 +1,53 @@ +route: + receiver: email-self + + group_by: [ alertname, service ] + + group_wait: 30s + group_interval: 5m + repeat_interval: 3h + + routes: + - matchers: + - service="infrastructure" + receiver: email-self + routes: + - matchers: + - severity="critical" + receiver: 'pushover-self' + + - matchers: + - service="backend" + receiver: email-self + routes: + - matchers: + - severity="critical" + receiver: 'pushover-self' + + - matchers: + - service="frontend" + receiver: email-self + routes: + - matchers: + - severity="critical" + receiver: 'pushover-self' + +inhibit_rules: +- source_matchers: [ severity="critical" ] + target_matchers: [ severity="warning" ] + equal: [ alertname, service ] + +receivers: + - name: pushover-self + pushover_configs: + - token: agy1n4b4p8chrgatsusxxub2se9x7q + user_key: u15he1cutrs9szvdz48tgypgachkh5 + + - name: email-self + email_configs: + - to: alexanderlebens@gmail.com + from: alexanderlebens@gmail.com + smarthost: smtp.gmail.com:587 + auth_username: "alexanderlebens@gmail.com" + auth_identity: "alexanderlebens@gmail.com" + auth_password: "rcqzctyvzzctoesz" diff --git a/Prometheus/Files/prometheus_config/prometheus.yml b/Prometheus/Files/prometheus_config/prometheus.yml new file mode 100644 index 0000000..48ed33e --- /dev/null +++ b/Prometheus/Files/prometheus_config/prometheus.yml @@ -0,0 +1,313 @@ +global: + scrape_interval: 15s + evaluation_interval: 15s + +rule_files: + - "/alertmanager/alert.rules.yml" + +alerting: + alertmanagers: + - scheme: https + static_configs: + - targets: + - "alertmanager.alexlebens.net" + +scrape_configs: + - job_name: "prometheus" + scrape_interval: 5s + static_configs: + - targets: ["localhost:9090"] + labels: + service: backend + + - job_name: "alertmanager" + scheme: http + static_configs: + - targets: ["prometheus_alertmanager:9093"] + labels: + service: backend + + - job_name: "docker-host" + scrape_interval: 5s + static_configs: + - targets: ["alexlebens.net:9323"] + labels: + service: infrastructure + + - job_name: "docker-containers" + docker_sd_configs: + - host: unix:///var/run/docker.sock + relabel_configs: + - source_labels: [__meta_docker_container_label_prometheus_job] + regex: .+ + action: keep + - regex: __meta_docker_container_label_prometheus_(.+) + action: labelmap + replacement: $1 + + - job_name: "windows-vd01wd" + scrape_interval: 5s + static_configs: + - targets: ["pd04wd.alexlebens.net:9182"] + labels: + service: host + + - job_name: "windows-vd01wd-gpu" + scrape_interval: 5s + static_configs: + - targets: ["pd04wd.alexlebens.net:9835"] + labels: + service: host + + - job_name: "host-ps03fd" + scrape_interval: 5s + scheme: http + static_configs: + - targets: ["prometheus_node_exporter:9100"] + labels: + service: host + + - job_name: "folders-ps03fd" + scrape_interval: 5m + scrape_timeout: 60s + scheme: http + static_configs: + - targets: ["ps03fd.alexlebens.net:9974"] + labels: + service: host + basic_auth: + username: "" + password: "SimplePassword" + + - job_name: "synology" + scrape_interval: 5s + static_configs: + - targets: ["synology.alexlebens.net:9100"] + labels: + service: device + + - job_name: "pikvm" + metrics_path: "/api/export/prometheus/metrics" + basic_auth: + username: admin + password: 35etdgcb#%ETDGCB + scheme: https + static_configs: + - targets: ["pikvm.alexlebens.net"] + labels: + service: device + tls_config: + insecure_skip_verify: true # For self-signed certificate + + - job_name: "synology-snmp" + scrape_interval: 300s + scrape_timeout: 240s + scheme: http + static_configs: + - targets: ["synology.alexlebens.net"] + labels: + service: device + metrics_path: /snmp + params: + module: [synology] + relabel_configs: + - source_labels: [__address__] + target_label: __param_target + - source_labels: [__param_target] + target_label: instance + - target_label: __address__ + replacement: prometheus_snmp_exporter:9116 + + - job_name: "airgradient-br" + metrics_path: /metrics + scrape_interval: 30s + static_configs: + - targets: ["airgradientbr.alexlebens.net:9926"] + labels: + service: device + + - job_name: "traefik" + scrape_interval: 5s + scheme: https + static_configs: + - targets: ["traefik.alexlebens.net"] + labels: + service: backend + + - job_name: "pihole" + scrape_interval: 30s + scheme: http + static_configs: + - targets: ["pihole_exporter:9617"] + labels: + service: backend + + - job_name: "coredns" + scheme: http + static_configs: + - targets: ["coredns:9153"] + labels: + service: backend + + - job_name: "cadvisor" + scheme: http + scrape_interval: 30s + scrape_timeout: 20s + static_configs: + - targets: ["prometheus_cadvisor:8080"] + labels: + service: infrastructure + + - job_name: "unpoller" + scheme: http + static_configs: + - targets: ["prometheus_unpoller:9130"] + labels: + service: infrastructure + + - job_name: "grafana" + scheme: http + static_configs: + - targets: ["grafana:3000"] + labels: + service: backend + + - job_name: "loki" + scheme: http + static_configs: + - targets: ["loki:3100"] + labels: + service: backend + + - job_name: "promtail" + scheme: http + static_configs: + - targets: ["loki_promtail:9080"] + labels: + service: backend + + - job_name: "watchtower" + scheme: http + metrics_path: /v1/metrics + bearer_token: token + static_configs: + - targets: ["watchtower:8080"] + labels: + service: backend + + - job_name: "qbittorrent" + scheme: http + static_configs: + - targets: ["qbittorrent_exporter:8000"] + labels: + service: frontend + + - job_name: "speedtest" + scheme: http + scrape_interval: 1h + scrape_timeout: 1m + static_configs: + - targets: ["speedtest:9798"] + labels: + service: infrastructure + + - job_name: "authentik" + scheme: http + static_configs: + - targets: ["authentik_server:9300"] + labels: + service: infrastructure + + - job_name: "uptimekuma" + scheme: http + static_configs: + - targets: ["uptimekuma:3001"] + labels: + service: backend + basic_auth: + username: admin + password: "24wrsfxv@$WRSFXV" + + - job_name: "plex" + scheme: http + static_configs: + - targets: ["plex_exporter:9594"] + labels: + service: frontend + + - job_name: "radarr" + scheme: http + static_configs: + - targets: ["radarr_exporter:9708"] + labels: + service: frontend + + - job_name: "radarr_anime" + scheme: http + static_configs: + - targets: ["radarr_anime_exporter:9708"] + labels: + service: frontend + + - job_name: "radarr_art" + scheme: http + static_configs: + - targets: ["radarr_art_exporter:9708"] + labels: + service: frontend + + - job_name: "radarr_documentaries" + scheme: http + static_configs: + - targets: ["radarr_documentaries_exporter:9708"] + labels: + service: frontend + + - job_name: "radarr_standup" + scheme: http + static_configs: + - targets: ["radarr_standup_exporter:9708"] + labels: + service: frontend + + - job_name: "sonarr" + scheme: http + static_configs: + - targets: ["sonarr_exporter:9707"] + labels: + service: frontend + + - job_name: "sonarr_anime_exporter" + scheme: http + static_configs: + - targets: ["sonarr_anime_exporter:9707"] + labels: + service: frontend + + - job_name: "sonarr_documentaries_exporter" + scheme: http + static_configs: + - targets: ["sonarr_anime_exporter:9707"] + labels: + service: frontend + + - job_name: "lidarr" + scheme: http + static_configs: + - targets: ["lidarr_exporter:9709"] + labels: + service: frontend + + - job_name: "readarr_books" + scheme: http + static_configs: + - targets: ["readarr_books_exporter:9708"] + labels: + service: frontend + + - job_name: "readarr_audio" + scheme: http + static_configs: + - targets: ["readarr_audio_exporter:9708"] + labels: + service: frontend diff --git a/Prometheus/Files/prometheus_snmp_exporter/snmp.yml b/Prometheus/Files/prometheus_snmp_exporter/snmp.yml new file mode 100644 index 0000000..26597b4 --- /dev/null +++ b/Prometheus/Files/prometheus_snmp_exporter/snmp.yml @@ -0,0 +1,2839 @@ +# WARNING: This file was auto-generated using snmp_exporter generator, manual changes will be lost. +synology: + version: 2 + auth: + community: synology + walk: + - 1.3.6.1.2.1.2 + - 1.3.6.1.2.1.25.1 + - 1.3.6.1.2.1.25.2 + - 1.3.6.1.2.1.31.1.1 + - 1.3.6.1.4.1.2021.10.1.2 + - 1.3.6.1.4.1.2021.10.1.5 + - 1.3.6.1.4.1.2021.4 + - 1.3.6.1.4.1.6574.1 + - 1.3.6.1.4.1.6574.101 + - 1.3.6.1.4.1.6574.102 + - 1.3.6.1.4.1.6574.103 + - 1.3.6.1.4.1.6574.104 + - 1.3.6.1.4.1.6574.2 + - 1.3.6.1.4.1.6574.3 + - 1.3.6.1.4.1.6574.4 + - 1.3.6.1.4.1.6574.5 + - 1.3.6.1.4.1.6574.6 + get: + - 1.3.6.1.2.1.1.3.0 + - 1.3.6.1.4.1.2021.11.10.0 + - 1.3.6.1.4.1.2021.11.11.0 + - 1.3.6.1.4.1.2021.11.9.0 + metrics: + - name: sysUpTime + oid: 1.3.6.1.2.1.1.3 + type: gauge + help: The time (in hundredths of a second) since the network management portion + of the system was last re-initialized. - 1.3.6.1.2.1.1.3 + - name: ifNumber + oid: 1.3.6.1.2.1.2.1 + type: gauge + help: The number of network interfaces (regardless of their current state) present + on this system. - 1.3.6.1.2.1.2.1 + - name: ifIndex + oid: 1.3.6.1.2.1.2.2.1.1 + type: gauge + help: A unique value, greater than zero, for each interface - 1.3.6.1.2.1.2.2.1.1 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifDescr + oid: 1.3.6.1.2.1.2.2.1.2 + type: DisplayString + help: A textual string containing information about the interface - 1.3.6.1.2.1.2.2.1.2 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifType + oid: 1.3.6.1.2.1.2.2.1.3 + type: EnumAsInfo + help: The type of interface - 1.3.6.1.2.1.2.2.1.3 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + enum_values: + 1: other + 2: regular1822 + 3: hdh1822 + 4: ddnX25 + 5: rfc877x25 + 6: ethernetCsmacd + 7: iso88023Csmacd + 8: iso88024TokenBus + 9: iso88025TokenRing + 10: iso88026Man + 11: starLan + 12: proteon10Mbit + 13: proteon80Mbit + 14: hyperchannel + 15: fddi + 16: lapb + 17: sdlc + 18: ds1 + 19: e1 + 20: basicISDN + 21: primaryISDN + 22: propPointToPointSerial + 23: ppp + 24: softwareLoopback + 25: eon + 26: ethernet3Mbit + 27: nsip + 28: slip + 29: ultra + 30: ds3 + 31: sip + 32: frameRelay + 33: rs232 + 34: para + 35: arcnet + 36: arcnetPlus + 37: atm + 38: miox25 + 39: sonet + 40: x25ple + 41: iso88022llc + 42: localTalk + 43: smdsDxi + 44: frameRelayService + 45: v35 + 46: hssi + 47: hippi + 48: modem + 49: aal5 + 50: sonetPath + 51: sonetVT + 52: smdsIcip + 53: propVirtual + 54: propMultiplexor + 55: ieee80212 + 56: fibreChannel + 57: hippiInterface + 58: frameRelayInterconnect + 59: aflane8023 + 60: aflane8025 + 61: cctEmul + 62: fastEther + 63: isdn + 64: v11 + 65: v36 + 66: g703at64k + 67: g703at2mb + 68: qllc + 69: fastEtherFX + 70: channel + 71: ieee80211 + 72: ibm370parChan + 73: escon + 74: dlsw + 75: isdns + 76: isdnu + 77: lapd + 78: ipSwitch + 79: rsrb + 80: atmLogical + 81: ds0 + 82: ds0Bundle + 83: bsc + 84: async + 85: cnr + 86: iso88025Dtr + 87: eplrs + 88: arap + 89: propCnls + 90: hostPad + 91: termPad + 92: frameRelayMPI + 93: x213 + 94: adsl + 95: radsl + 96: sdsl + 97: vdsl + 98: iso88025CRFPInt + 99: myrinet + 100: voiceEM + 101: voiceFXO + 102: voiceFXS + 103: voiceEncap + 104: voiceOverIp + 105: atmDxi + 106: atmFuni + 107: atmIma + 108: pppMultilinkBundle + 109: ipOverCdlc + 110: ipOverClaw + 111: stackToStack + 112: virtualIpAddress + 113: mpc + 114: ipOverAtm + 115: iso88025Fiber + 116: tdlc + 117: gigabitEthernet + 118: hdlc + 119: lapf + 120: v37 + 121: x25mlp + 122: x25huntGroup + 123: transpHdlc + 124: interleave + 125: fast + 126: ip + 127: docsCableMaclayer + 128: docsCableDownstream + 129: docsCableUpstream + 130: a12MppSwitch + 131: tunnel + 132: coffee + 133: ces + 134: atmSubInterface + 135: l2vlan + 136: l3ipvlan + 137: l3ipxvlan + 138: digitalPowerline + 139: mediaMailOverIp + 140: dtm + 141: dcn + 142: ipForward + 143: msdsl + 144: ieee1394 + 145: if-gsn + 146: dvbRccMacLayer + 147: dvbRccDownstream + 148: dvbRccUpstream + 149: atmVirtual + 150: mplsTunnel + 151: srp + 152: voiceOverAtm + 153: voiceOverFrameRelay + 154: idsl + 155: compositeLink + 156: ss7SigLink + 157: propWirelessP2P + 158: frForward + 159: rfc1483 + 160: usb + 161: ieee8023adLag + 162: bgppolicyaccounting + 163: frf16MfrBundle + 164: h323Gatekeeper + 165: h323Proxy + 166: mpls + 167: mfSigLink + 168: hdsl2 + 169: shdsl + 170: ds1FDL + 171: pos + 172: dvbAsiIn + 173: dvbAsiOut + 174: plc + 175: nfas + 176: tr008 + 177: gr303RDT + 178: gr303IDT + 179: isup + 180: propDocsWirelessMaclayer + 181: propDocsWirelessDownstream + 182: propDocsWirelessUpstream + 183: hiperlan2 + 184: propBWAp2Mp + 185: sonetOverheadChannel + 186: digitalWrapperOverheadChannel + 187: aal2 + 188: radioMAC + 189: atmRadio + 190: imt + 191: mvl + 192: reachDSL + 193: frDlciEndPt + 194: atmVciEndPt + 195: opticalChannel + 196: opticalTransport + 197: propAtm + 198: voiceOverCable + 199: infiniband + 200: teLink + 201: q2931 + 202: virtualTg + 203: sipTg + 204: sipSig + 205: docsCableUpstreamChannel + 206: econet + 207: pon155 + 208: pon622 + 209: bridge + 210: linegroup + 211: voiceEMFGD + 212: voiceFGDEANA + 213: voiceDID + 214: mpegTransport + 215: sixToFour + 216: gtp + 217: pdnEtherLoop1 + 218: pdnEtherLoop2 + 219: opticalChannelGroup + 220: homepna + 221: gfp + 222: ciscoISLvlan + 223: actelisMetaLOOP + 224: fcipLink + 225: rpr + 226: qam + 227: lmp + 228: cblVectaStar + 229: docsCableMCmtsDownstream + 230: adsl2 + 231: macSecControlledIF + 232: macSecUncontrolledIF + 233: aviciOpticalEther + 234: atmbond + 235: voiceFGDOS + 236: mocaVersion1 + 237: ieee80216WMAN + 238: adsl2plus + 239: dvbRcsMacLayer + 240: dvbTdm + 241: dvbRcsTdma + 242: x86Laps + 243: wwanPP + 244: wwanPP2 + 245: voiceEBS + 246: ifPwType + 247: ilan + 248: pip + 249: aluELP + 250: gpon + 251: vdsl2 + 252: capwapDot11Profile + 253: capwapDot11Bss + 254: capwapWtpVirtualRadio + 255: bits + 256: docsCableUpstreamRfPort + 257: cableDownstreamRfPort + 258: vmwareVirtualNic + 259: ieee802154 + 260: otnOdu + 261: otnOtu + 262: ifVfiType + 263: g9981 + 264: g9982 + 265: g9983 + 266: aluEpon + 267: aluEponOnu + 268: aluEponPhysicalUni + 269: aluEponLogicalLink + 270: aluGponOnu + 271: aluGponPhysicalUni + 272: vmwareNicTeam + 277: docsOfdmDownstream + 278: docsOfdmaUpstream + 279: gfast + 280: sdci + 281: xboxWireless + 282: fastdsl + 283: docsCableScte55d1FwdOob + 284: docsCableScte55d1RetOob + 285: docsCableScte55d2DsOob + 286: docsCableScte55d2UsOob + 287: docsCableNdf + 288: docsCableNdr + 289: ptm + 290: ghn + 291: otnOtsi + 292: otnOtuc + 293: otnOduc + 294: otnOtsig + 295: microwaveCarrierTermination + 296: microwaveRadioLinkTerminal + 297: ieee8021axDrni + 298: ax25 + 299: ieee19061nanocom + 300: cpri + 301: omni + - name: ifMtu + oid: 1.3.6.1.2.1.2.2.1.4 + type: gauge + help: The size of the largest packet which can be sent/received on the interface, + specified in octets - 1.3.6.1.2.1.2.2.1.4 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifSpeed + oid: 1.3.6.1.2.1.2.2.1.5 + type: gauge + help: An estimate of the interface's current bandwidth in bits per second - 1.3.6.1.2.1.2.2.1.5 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifPhysAddress + oid: 1.3.6.1.2.1.2.2.1.6 + type: PhysAddress48 + help: The interface's address at its protocol sub-layer - 1.3.6.1.2.1.2.2.1.6 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifAdminStatus + oid: 1.3.6.1.2.1.2.2.1.7 + type: gauge + help: The desired state of the interface - 1.3.6.1.2.1.2.2.1.7 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + enum_values: + 1: up + 2: down + 3: testing + - name: ifOperStatus + oid: 1.3.6.1.2.1.2.2.1.8 + type: gauge + help: The current operational state of the interface - 1.3.6.1.2.1.2.2.1.8 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + enum_values: + 1: up + 2: down + 3: testing + 4: unknown + 5: dormant + 6: notPresent + 7: lowerLayerDown + - name: ifLastChange + oid: 1.3.6.1.2.1.2.2.1.9 + type: gauge + help: The value of sysUpTime at the time the interface entered its current operational + state - 1.3.6.1.2.1.2.2.1.9 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifInOctets + oid: 1.3.6.1.2.1.2.2.1.10 + type: counter + help: The total number of octets received on the interface, including framing + characters - 1.3.6.1.2.1.2.2.1.10 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifInUcastPkts + oid: 1.3.6.1.2.1.2.2.1.11 + type: counter + help: The number of packets, delivered by this sub-layer to a higher (sub-)layer, + which were not addressed to a multicast or broadcast address at this sub-layer + - 1.3.6.1.2.1.2.2.1.11 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifInNUcastPkts + oid: 1.3.6.1.2.1.2.2.1.12 + type: counter + help: The number of packets, delivered by this sub-layer to a higher (sub-)layer, + which were addressed to a multicast or broadcast address at this sub-layer - + 1.3.6.1.2.1.2.2.1.12 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifInDiscards + oid: 1.3.6.1.2.1.2.2.1.13 + type: counter + help: The number of inbound packets which were chosen to be discarded even though + no errors had been detected to prevent their being deliverable to a higher-layer + protocol - 1.3.6.1.2.1.2.2.1.13 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifInErrors + oid: 1.3.6.1.2.1.2.2.1.14 + type: counter + help: For packet-oriented interfaces, the number of inbound packets that contained + errors preventing them from being deliverable to a higher-layer protocol - 1.3.6.1.2.1.2.2.1.14 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifInUnknownProtos + oid: 1.3.6.1.2.1.2.2.1.15 + type: counter + help: For packet-oriented interfaces, the number of packets received via the interface + which were discarded because of an unknown or unsupported protocol - 1.3.6.1.2.1.2.2.1.15 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifOutOctets + oid: 1.3.6.1.2.1.2.2.1.16 + type: counter + help: The total number of octets transmitted out of the interface, including framing + characters - 1.3.6.1.2.1.2.2.1.16 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifOutUcastPkts + oid: 1.3.6.1.2.1.2.2.1.17 + type: counter + help: The total number of packets that higher-level protocols requested be transmitted, + and which were not addressed to a multicast or broadcast address at this sub-layer, + including those that were discarded or not sent - 1.3.6.1.2.1.2.2.1.17 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifOutNUcastPkts + oid: 1.3.6.1.2.1.2.2.1.18 + type: counter + help: The total number of packets that higher-level protocols requested be transmitted, + and which were addressed to a multicast or broadcast address at this sub-layer, + including those that were discarded or not sent - 1.3.6.1.2.1.2.2.1.18 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifOutDiscards + oid: 1.3.6.1.2.1.2.2.1.19 + type: counter + help: The number of outbound packets which were chosen to be discarded even though + no errors had been detected to prevent their being transmitted - 1.3.6.1.2.1.2.2.1.19 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifOutErrors + oid: 1.3.6.1.2.1.2.2.1.20 + type: counter + help: For packet-oriented interfaces, the number of outbound packets that could + not be transmitted because of errors - 1.3.6.1.2.1.2.2.1.20 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifOutQLen + oid: 1.3.6.1.2.1.2.2.1.21 + type: gauge + help: The length of the output packet queue (in packets). - 1.3.6.1.2.1.2.2.1.21 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifSpecific + oid: 1.3.6.1.2.1.2.2.1.22 + type: OctetString + help: A reference to MIB definitions specific to the particular media being used + to realize the interface - 1.3.6.1.2.1.2.2.1.22 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: hrSystemUptime + oid: 1.3.6.1.2.1.25.1.1 + type: gauge + help: The amount of time since this host was last initialized - 1.3.6.1.2.1.25.1.1 + - name: hrSystemDate + oid: 1.3.6.1.2.1.25.1.2 + type: DateAndTime + help: The host's notion of the local date and time of day. - 1.3.6.1.2.1.25.1.2 + - name: hrSystemInitialLoadDevice + oid: 1.3.6.1.2.1.25.1.3 + type: gauge + help: The index of the hrDeviceEntry for the device from which this host is configured + to load its initial operating system configuration (i.e., which operating system + code and/or boot parameters) - 1.3.6.1.2.1.25.1.3 + - name: hrSystemInitialLoadParameters + oid: 1.3.6.1.2.1.25.1.4 + type: OctetString + help: This object contains the parameters (e.g - 1.3.6.1.2.1.25.1.4 + - name: hrSystemNumUsers + oid: 1.3.6.1.2.1.25.1.5 + type: gauge + help: The number of user sessions for which this host is storing state information + - 1.3.6.1.2.1.25.1.5 + - name: hrSystemProcesses + oid: 1.3.6.1.2.1.25.1.6 + type: gauge + help: The number of process contexts currently loaded or running on this system. + - 1.3.6.1.2.1.25.1.6 + - name: hrSystemMaxProcesses + oid: 1.3.6.1.2.1.25.1.7 + type: gauge + help: The maximum number of process contexts this system can support - 1.3.6.1.2.1.25.1.7 + - name: hrMemorySize + oid: 1.3.6.1.2.1.25.2.2 + type: gauge + help: The amount of physical read-write main memory, typically RAM, contained + by the host. - 1.3.6.1.2.1.25.2.2 + - name: hrStorageIndex + oid: 1.3.6.1.2.1.25.2.3.1.1 + type: gauge + help: A unique value for each logical storage area contained by the host. - 1.3.6.1.2.1.25.2.3.1.1 + indexes: + - labelname: hrStorageIndex + type: gauge + lookups: + - labels: + - hrStorageIndex + labelname: hrStorageDescr + oid: 1.3.6.1.2.1.25.2.3.1.3 + type: DisplayString + - labels: [] + labelname: hrStorageIndex + - name: hrStorageType + oid: 1.3.6.1.2.1.25.2.3.1.2 + type: OctetString + help: The type of storage represented by this entry. - 1.3.6.1.2.1.25.2.3.1.2 + indexes: + - labelname: hrStorageIndex + type: gauge + lookups: + - labels: + - hrStorageIndex + labelname: hrStorageDescr + oid: 1.3.6.1.2.1.25.2.3.1.3 + type: DisplayString + - labels: [] + labelname: hrStorageIndex + - name: hrStorageDescr + oid: 1.3.6.1.2.1.25.2.3.1.3 + type: DisplayString + help: A description of the type and instance of the storage described by this + entry. - 1.3.6.1.2.1.25.2.3.1.3 + indexes: + - labelname: hrStorageIndex + type: gauge + lookups: + - labels: + - hrStorageIndex + labelname: hrStorageDescr + oid: 1.3.6.1.2.1.25.2.3.1.3 + type: DisplayString + - labels: [] + labelname: hrStorageIndex + - name: hrStorageAllocationUnits + oid: 1.3.6.1.2.1.25.2.3.1.4 + type: gauge + help: The size, in bytes, of the data objects allocated from this pool - 1.3.6.1.2.1.25.2.3.1.4 + indexes: + - labelname: hrStorageIndex + type: gauge + lookups: + - labels: + - hrStorageIndex + labelname: hrStorageDescr + oid: 1.3.6.1.2.1.25.2.3.1.3 + type: DisplayString + - labels: [] + labelname: hrStorageIndex + - name: hrStorageSize + oid: 1.3.6.1.2.1.25.2.3.1.5 + type: gauge + help: The size of the storage represented by this entry, in units of hrStorageAllocationUnits + - 1.3.6.1.2.1.25.2.3.1.5 + indexes: + - labelname: hrStorageIndex + type: gauge + lookups: + - labels: + - hrStorageIndex + labelname: hrStorageDescr + oid: 1.3.6.1.2.1.25.2.3.1.3 + type: DisplayString + - labels: [] + labelname: hrStorageIndex + - name: hrStorageUsed + oid: 1.3.6.1.2.1.25.2.3.1.6 + type: gauge + help: The amount of the storage represented by this entry that is allocated, in + units of hrStorageAllocationUnits. - 1.3.6.1.2.1.25.2.3.1.6 + indexes: + - labelname: hrStorageIndex + type: gauge + lookups: + - labels: + - hrStorageIndex + labelname: hrStorageDescr + oid: 1.3.6.1.2.1.25.2.3.1.3 + type: DisplayString + - labels: [] + labelname: hrStorageIndex + - name: hrStorageAllocationFailures + oid: 1.3.6.1.2.1.25.2.3.1.7 + type: counter + help: The number of requests for storage represented by this entry that could + not be honored due to not enough storage - 1.3.6.1.2.1.25.2.3.1.7 + indexes: + - labelname: hrStorageIndex + type: gauge + lookups: + - labels: + - hrStorageIndex + labelname: hrStorageDescr + oid: 1.3.6.1.2.1.25.2.3.1.3 + type: DisplayString + - labels: [] + labelname: hrStorageIndex + - name: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + help: The textual name of the interface - 1.3.6.1.2.1.31.1.1.1.1 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifInMulticastPkts + oid: 1.3.6.1.2.1.31.1.1.1.2 + type: counter + help: The number of packets, delivered by this sub-layer to a higher (sub-)layer, + which were addressed to a multicast address at this sub-layer - 1.3.6.1.2.1.31.1.1.1.2 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifInBroadcastPkts + oid: 1.3.6.1.2.1.31.1.1.1.3 + type: counter + help: The number of packets, delivered by this sub-layer to a higher (sub-)layer, + which were addressed to a broadcast address at this sub-layer - 1.3.6.1.2.1.31.1.1.1.3 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifOutMulticastPkts + oid: 1.3.6.1.2.1.31.1.1.1.4 + type: counter + help: The total number of packets that higher-level protocols requested be transmitted, + and which were addressed to a multicast address at this sub-layer, including + those that were discarded or not sent - 1.3.6.1.2.1.31.1.1.1.4 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifOutBroadcastPkts + oid: 1.3.6.1.2.1.31.1.1.1.5 + type: counter + help: The total number of packets that higher-level protocols requested be transmitted, + and which were addressed to a broadcast address at this sub-layer, including + those that were discarded or not sent - 1.3.6.1.2.1.31.1.1.1.5 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifHCInOctets + oid: 1.3.6.1.2.1.31.1.1.1.6 + type: counter + help: The total number of octets received on the interface, including framing + characters - 1.3.6.1.2.1.31.1.1.1.6 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifHCInUcastPkts + oid: 1.3.6.1.2.1.31.1.1.1.7 + type: counter + help: The number of packets, delivered by this sub-layer to a higher (sub-)layer, + which were not addressed to a multicast or broadcast address at this sub-layer + - 1.3.6.1.2.1.31.1.1.1.7 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifHCInMulticastPkts + oid: 1.3.6.1.2.1.31.1.1.1.8 + type: counter + help: The number of packets, delivered by this sub-layer to a higher (sub-)layer, + which were addressed to a multicast address at this sub-layer - 1.3.6.1.2.1.31.1.1.1.8 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifHCInBroadcastPkts + oid: 1.3.6.1.2.1.31.1.1.1.9 + type: counter + help: The number of packets, delivered by this sub-layer to a higher (sub-)layer, + which were addressed to a broadcast address at this sub-layer - 1.3.6.1.2.1.31.1.1.1.9 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifHCOutOctets + oid: 1.3.6.1.2.1.31.1.1.1.10 + type: counter + help: The total number of octets transmitted out of the interface, including framing + characters - 1.3.6.1.2.1.31.1.1.1.10 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifHCOutUcastPkts + oid: 1.3.6.1.2.1.31.1.1.1.11 + type: counter + help: The total number of packets that higher-level protocols requested be transmitted, + and which were not addressed to a multicast or broadcast address at this sub-layer, + including those that were discarded or not sent - 1.3.6.1.2.1.31.1.1.1.11 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifHCOutMulticastPkts + oid: 1.3.6.1.2.1.31.1.1.1.12 + type: counter + help: The total number of packets that higher-level protocols requested be transmitted, + and which were addressed to a multicast address at this sub-layer, including + those that were discarded or not sent - 1.3.6.1.2.1.31.1.1.1.12 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifHCOutBroadcastPkts + oid: 1.3.6.1.2.1.31.1.1.1.13 + type: counter + help: The total number of packets that higher-level protocols requested be transmitted, + and which were addressed to a broadcast address at this sub-layer, including + those that were discarded or not sent - 1.3.6.1.2.1.31.1.1.1.13 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifLinkUpDownTrapEnable + oid: 1.3.6.1.2.1.31.1.1.1.14 + type: gauge + help: Indicates whether linkUp/linkDown traps should be generated for this interface + - 1.3.6.1.2.1.31.1.1.1.14 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + enum_values: + 1: enabled + 2: disabled + - name: ifHighSpeed + oid: 1.3.6.1.2.1.31.1.1.1.15 + type: gauge + help: An estimate of the interface's current bandwidth in units of 1,000,000 bits + per second - 1.3.6.1.2.1.31.1.1.1.15 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifPromiscuousMode + oid: 1.3.6.1.2.1.31.1.1.1.16 + type: gauge + help: This object has a value of false(2) if this interface only accepts packets/frames + that are addressed to this station - 1.3.6.1.2.1.31.1.1.1.16 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + enum_values: + 1: "true" + 2: "false" + - name: ifConnectorPresent + oid: 1.3.6.1.2.1.31.1.1.1.17 + type: gauge + help: This object has the value 'true(1)' if the interface sublayer has a physical + connector and the value 'false(2)' otherwise. - 1.3.6.1.2.1.31.1.1.1.17 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + enum_values: + 1: "true" + 2: "false" + - name: ifAlias + oid: 1.3.6.1.2.1.31.1.1.1.18 + type: DisplayString + help: This object is an 'alias' name for the interface as specified by a network + manager, and provides a non-volatile 'handle' for the interface - 1.3.6.1.2.1.31.1.1.1.18 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: ifCounterDiscontinuityTime + oid: 1.3.6.1.2.1.31.1.1.1.19 + type: gauge + help: The value of sysUpTime on the most recent occasion at which any one or more + of this interface's counters suffered a discontinuity - 1.3.6.1.2.1.31.1.1.1.19 + indexes: + - labelname: ifIndex + type: gauge + lookups: + - labels: + - ifIndex + labelname: ifName + oid: 1.3.6.1.2.1.31.1.1.1.1 + type: DisplayString + - labels: [] + labelname: ifIndex + - name: laNames + oid: 1.3.6.1.4.1.2021.10.1.2 + type: DisplayString + help: The list of loadave names we're watching. - 1.3.6.1.4.1.2021.10.1.2 + indexes: + - labelname: laIndex + type: gauge + lookups: + - labels: + - laIndex + labelname: laNames + oid: 1.3.6.1.4.1.2021.10.1.2 + type: DisplayString + - labels: [] + labelname: laIndex + - name: laLoadInt + oid: 1.3.6.1.4.1.2021.10.1.5 + type: gauge + help: The 1,5 and 15 minute load averages as an integer - 1.3.6.1.4.1.2021.10.1.5 + indexes: + - labelname: laIndex + type: gauge + lookups: + - labels: + - laIndex + labelname: laNames + oid: 1.3.6.1.4.1.2021.10.1.2 + type: DisplayString + - labels: [] + labelname: laIndex + - name: ssCpuSystem + oid: 1.3.6.1.4.1.2021.11.10 + type: gauge + help: The percentage of CPU time spent processing system-level code, calculated + over the last minute - 1.3.6.1.4.1.2021.11.10 + - name: ssCpuIdle + oid: 1.3.6.1.4.1.2021.11.11 + type: gauge + help: The percentage of processor time spent idle, calculated over the last minute + - 1.3.6.1.4.1.2021.11.11 + - name: ssCpuUser + oid: 1.3.6.1.4.1.2021.11.9 + type: gauge + help: The percentage of CPU time spent processing user-level code, calculated + over the last minute - 1.3.6.1.4.1.2021.11.9 + - name: memIndex + oid: 1.3.6.1.4.1.2021.4.1 + type: gauge + help: Bogus Index - 1.3.6.1.4.1.2021.4.1 + - name: memErrorName + oid: 1.3.6.1.4.1.2021.4.2 + type: DisplayString + help: Bogus Name - 1.3.6.1.4.1.2021.4.2 + - name: memTotalSwap + oid: 1.3.6.1.4.1.2021.4.3 + type: gauge + help: The total amount of swap space configured for this host. - 1.3.6.1.4.1.2021.4.3 + - name: memAvailSwap + oid: 1.3.6.1.4.1.2021.4.4 + type: gauge + help: The amount of swap space currently unused or available. - 1.3.6.1.4.1.2021.4.4 + - name: memTotalReal + oid: 1.3.6.1.4.1.2021.4.5 + type: gauge + help: The total amount of real/physical memory installed on this host. - 1.3.6.1.4.1.2021.4.5 + - name: memAvailReal + oid: 1.3.6.1.4.1.2021.4.6 + type: gauge + help: The amount of real/physical memory currently unused or available. - 1.3.6.1.4.1.2021.4.6 + - name: memTotalSwapTXT + oid: 1.3.6.1.4.1.2021.4.7 + type: gauge + help: The total amount of swap space or virtual memory allocated for text pages + on this host - 1.3.6.1.4.1.2021.4.7 + - name: memAvailSwapTXT + oid: 1.3.6.1.4.1.2021.4.8 + type: gauge + help: The amount of swap space or virtual memory currently being used by text + pages on this host - 1.3.6.1.4.1.2021.4.8 + - name: memTotalRealTXT + oid: 1.3.6.1.4.1.2021.4.9 + type: gauge + help: The total amount of real/physical memory allocated for text pages on this + host - 1.3.6.1.4.1.2021.4.9 + - name: memAvailRealTXT + oid: 1.3.6.1.4.1.2021.4.10 + type: gauge + help: The amount of real/physical memory currently being used by text pages on + this host - 1.3.6.1.4.1.2021.4.10 + - name: memTotalFree + oid: 1.3.6.1.4.1.2021.4.11 + type: gauge + help: The total amount of memory free or available for use on this host - 1.3.6.1.4.1.2021.4.11 + - name: memMinimumSwap + oid: 1.3.6.1.4.1.2021.4.12 + type: gauge + help: The minimum amount of swap space expected to be kept free or available during + normal operation of this host - 1.3.6.1.4.1.2021.4.12 + - name: memShared + oid: 1.3.6.1.4.1.2021.4.13 + type: gauge + help: The total amount of real or virtual memory currently allocated for use as + shared memory - 1.3.6.1.4.1.2021.4.13 + - name: memBuffer + oid: 1.3.6.1.4.1.2021.4.14 + type: gauge + help: The total amount of real or virtual memory currently allocated for use as + memory buffers - 1.3.6.1.4.1.2021.4.14 + - name: memCached + oid: 1.3.6.1.4.1.2021.4.15 + type: gauge + help: The total amount of real or virtual memory currently allocated for use as + cached memory - 1.3.6.1.4.1.2021.4.15 + - name: memUsedSwapTXT + oid: 1.3.6.1.4.1.2021.4.16 + type: gauge + help: The amount of swap space or virtual memory currently being used by text + pages on this host - 1.3.6.1.4.1.2021.4.16 + - name: memUsedRealTXT + oid: 1.3.6.1.4.1.2021.4.17 + type: gauge + help: The amount of real/physical memory currently being used by text pages on + this host - 1.3.6.1.4.1.2021.4.17 + - name: memSwapError + oid: 1.3.6.1.4.1.2021.4.100 + type: gauge + help: Indicates whether the amount of available swap space (as reported by 'memAvailSwap(4)'), + is less than the desired minimum (specified by 'memMinimumSwap(12)'). - 1.3.6.1.4.1.2021.4.100 + enum_values: + 0: noError + 1: error + - name: memSwapErrorMsg + oid: 1.3.6.1.4.1.2021.4.101 + type: DisplayString + help: Describes whether the amount of available swap space (as reported by 'memAvailSwap(4)'), + is less than the desired minimum (specified by 'memMinimumSwap(12)'). - 1.3.6.1.4.1.2021.4.101 + - name: systemStatus + oid: 1.3.6.1.4.1.6574.1.1 + type: gauge + help: Synology system status Each meanings of status represented describe below + - 1.3.6.1.4.1.6574.1.1 + - name: temperature + oid: 1.3.6.1.4.1.6574.1.2 + type: gauge + help: Synology system temperature The temperature of Disk Station uses Celsius + degree. - 1.3.6.1.4.1.6574.1.2 + - name: powerStatus + oid: 1.3.6.1.4.1.6574.1.3 + type: gauge + help: Synology power status Each meanings of status represented describe below + - 1.3.6.1.4.1.6574.1.3 + - name: systemFanStatus + oid: 1.3.6.1.4.1.6574.1.4.1 + type: gauge + help: Synology system fan status Each meanings of status represented describe + below - 1.3.6.1.4.1.6574.1.4.1 + - name: cpuFanStatus + oid: 1.3.6.1.4.1.6574.1.4.2 + type: gauge + help: Synology cpu fan status Each meanings of status represented describe below + - 1.3.6.1.4.1.6574.1.4.2 + - name: modelName + oid: 1.3.6.1.4.1.6574.1.5.1 + type: DisplayString + help: The Model name of this NAS - 1.3.6.1.4.1.6574.1.5.1 + - name: serialNumber + oid: 1.3.6.1.4.1.6574.1.5.2 + type: DisplayString + help: The serial number of this NAS - 1.3.6.1.4.1.6574.1.5.2 + - name: version + oid: 1.3.6.1.4.1.6574.1.5.3 + type: DisplayString + help: The version of this DSM - 1.3.6.1.4.1.6574.1.5.3 + - name: upgradeAvailable + oid: 1.3.6.1.4.1.6574.1.5.4 + type: gauge + help: This oid is for checking whether there is a latest DSM can be upgraded - + 1.3.6.1.4.1.6574.1.5.4 + - name: controllerNumber + oid: 1.3.6.1.4.1.6574.1.6 + type: gauge + help: Synology system controller number Controller A(0) Controller B(1) - 1.3.6.1.4.1.6574.1.6 + - name: storageIOIndex + oid: 1.3.6.1.4.1.6574.101.1.1.1 + type: gauge + help: Reference index for each observed device. - 1.3.6.1.4.1.6574.101.1.1.1 + indexes: + - labelname: storageIOIndex + type: gauge + lookups: + - labels: + - storageIOIndex + labelname: storageIODevice + oid: 1.3.6.1.4.1.6574.101.1.1.2 + type: DisplayString + - labels: [] + labelname: storageIOIndex + - name: storageIODevice + oid: 1.3.6.1.4.1.6574.101.1.1.2 + type: DisplayString + help: The name of the device we are counting/checking. - 1.3.6.1.4.1.6574.101.1.1.2 + indexes: + - labelname: storageIOIndex + type: gauge + lookups: + - labels: + - storageIOIndex + labelname: storageIODevice + oid: 1.3.6.1.4.1.6574.101.1.1.2 + type: DisplayString + - labels: [] + labelname: storageIOIndex + - name: storageIONRead + oid: 1.3.6.1.4.1.6574.101.1.1.3 + type: counter + help: The number of bytes read from this device since boot. - 1.3.6.1.4.1.6574.101.1.1.3 + indexes: + - labelname: storageIOIndex + type: gauge + lookups: + - labels: + - storageIOIndex + labelname: storageIODevice + oid: 1.3.6.1.4.1.6574.101.1.1.2 + type: DisplayString + - labels: [] + labelname: storageIOIndex + - name: storageIONWritten + oid: 1.3.6.1.4.1.6574.101.1.1.4 + type: counter + help: The number of bytes written to this device since boot. - 1.3.6.1.4.1.6574.101.1.1.4 + indexes: + - labelname: storageIOIndex + type: gauge + lookups: + - labels: + - storageIOIndex + labelname: storageIODevice + oid: 1.3.6.1.4.1.6574.101.1.1.2 + type: DisplayString + - labels: [] + labelname: storageIOIndex + - name: storageIOReads + oid: 1.3.6.1.4.1.6574.101.1.1.5 + type: counter + help: The number of read accesses from this device since boot. - 1.3.6.1.4.1.6574.101.1.1.5 + indexes: + - labelname: storageIOIndex + type: gauge + lookups: + - labels: + - storageIOIndex + labelname: storageIODevice + oid: 1.3.6.1.4.1.6574.101.1.1.2 + type: DisplayString + - labels: [] + labelname: storageIOIndex + - name: storageIOWrites + oid: 1.3.6.1.4.1.6574.101.1.1.6 + type: counter + help: The number of write accesses to this device since boot. - 1.3.6.1.4.1.6574.101.1.1.6 + indexes: + - labelname: storageIOIndex + type: gauge + lookups: + - labels: + - storageIOIndex + labelname: storageIODevice + oid: 1.3.6.1.4.1.6574.101.1.1.2 + type: DisplayString + - labels: [] + labelname: storageIOIndex + - name: storageIOLA + oid: 1.3.6.1.4.1.6574.101.1.1.8 + type: gauge + help: The load of disk (%) - 1.3.6.1.4.1.6574.101.1.1.8 + indexes: + - labelname: storageIOIndex + type: gauge + lookups: + - labels: + - storageIOIndex + labelname: storageIODevice + oid: 1.3.6.1.4.1.6574.101.1.1.2 + type: DisplayString + - labels: [] + labelname: storageIOIndex + - name: storageIOLA1 + oid: 1.3.6.1.4.1.6574.101.1.1.9 + type: gauge + help: The 1 minute average load of disk (%) - 1.3.6.1.4.1.6574.101.1.1.9 + indexes: + - labelname: storageIOIndex + type: gauge + lookups: + - labels: + - storageIOIndex + labelname: storageIODevice + oid: 1.3.6.1.4.1.6574.101.1.1.2 + type: DisplayString + - labels: [] + labelname: storageIOIndex + - name: storageIOLA5 + oid: 1.3.6.1.4.1.6574.101.1.1.10 + type: gauge + help: The 5 minute average load of disk (%) - 1.3.6.1.4.1.6574.101.1.1.10 + indexes: + - labelname: storageIOIndex + type: gauge + lookups: + - labels: + - storageIOIndex + labelname: storageIODevice + oid: 1.3.6.1.4.1.6574.101.1.1.2 + type: DisplayString + - labels: [] + labelname: storageIOIndex + - name: storageIOLA15 + oid: 1.3.6.1.4.1.6574.101.1.1.11 + type: gauge + help: The 15 minute average load of disk (%) - 1.3.6.1.4.1.6574.101.1.1.11 + indexes: + - labelname: storageIOIndex + type: gauge + lookups: + - labels: + - storageIOIndex + labelname: storageIODevice + oid: 1.3.6.1.4.1.6574.101.1.1.2 + type: DisplayString + - labels: [] + labelname: storageIOIndex + - name: storageIONReadX + oid: 1.3.6.1.4.1.6574.101.1.1.12 + type: counter + help: The number of bytes read from this device since boot. - 1.3.6.1.4.1.6574.101.1.1.12 + indexes: + - labelname: storageIOIndex + type: gauge + lookups: + - labels: + - storageIOIndex + labelname: storageIODevice + oid: 1.3.6.1.4.1.6574.101.1.1.2 + type: DisplayString + - labels: [] + labelname: storageIOIndex + - name: storageIONWrittenX + oid: 1.3.6.1.4.1.6574.101.1.1.13 + type: counter + help: The number of bytes written to this device since boot. - 1.3.6.1.4.1.6574.101.1.1.13 + indexes: + - labelname: storageIOIndex + type: gauge + lookups: + - labels: + - storageIOIndex + labelname: storageIODevice + oid: 1.3.6.1.4.1.6574.101.1.1.2 + type: DisplayString + - labels: [] + labelname: storageIOIndex + - name: storageIODeviceSerial + oid: 1.3.6.1.4.1.6574.101.1.1.14 + type: DisplayString + help: The name of the device we are counting/checking. - 1.3.6.1.4.1.6574.101.1.1.14 + indexes: + - labelname: storageIOIndex + type: gauge + lookups: + - labels: + - storageIOIndex + labelname: storageIODevice + oid: 1.3.6.1.4.1.6574.101.1.1.2 + type: DisplayString + - labels: [] + labelname: storageIOIndex + - name: spaceIOIndex + oid: 1.3.6.1.4.1.6574.102.1.1.1 + type: gauge + help: Reference index for each observed device. - 1.3.6.1.4.1.6574.102.1.1.1 + indexes: + - labelname: spaceIOIndex + type: gauge + lookups: + - labels: + - spaceIOIndex + labelname: spaceIODevice + oid: 1.3.6.1.4.1.6574.102.1.1.2 + type: DisplayString + - labels: [] + labelname: spaceIOIndex + - name: spaceIODevice + oid: 1.3.6.1.4.1.6574.102.1.1.2 + type: DisplayString + help: The name of the device we are counting/checking. - 1.3.6.1.4.1.6574.102.1.1.2 + indexes: + - labelname: spaceIOIndex + type: gauge + lookups: + - labels: + - spaceIOIndex + labelname: spaceIODevice + oid: 1.3.6.1.4.1.6574.102.1.1.2 + type: DisplayString + - labels: [] + labelname: spaceIOIndex + - name: spaceIONRead + oid: 1.3.6.1.4.1.6574.102.1.1.3 + type: counter + help: The number of bytes read from this device since boot. - 1.3.6.1.4.1.6574.102.1.1.3 + indexes: + - labelname: spaceIOIndex + type: gauge + lookups: + - labels: + - spaceIOIndex + labelname: spaceIODevice + oid: 1.3.6.1.4.1.6574.102.1.1.2 + type: DisplayString + - labels: [] + labelname: spaceIOIndex + - name: spaceIONWritten + oid: 1.3.6.1.4.1.6574.102.1.1.4 + type: counter + help: The number of bytes written to this device since boot. - 1.3.6.1.4.1.6574.102.1.1.4 + indexes: + - labelname: spaceIOIndex + type: gauge + lookups: + - labels: + - spaceIOIndex + labelname: spaceIODevice + oid: 1.3.6.1.4.1.6574.102.1.1.2 + type: DisplayString + - labels: [] + labelname: spaceIOIndex + - name: spaceIOReads + oid: 1.3.6.1.4.1.6574.102.1.1.5 + type: counter + help: The number of read accesses from this device since boot. - 1.3.6.1.4.1.6574.102.1.1.5 + indexes: + - labelname: spaceIOIndex + type: gauge + lookups: + - labels: + - spaceIOIndex + labelname: spaceIODevice + oid: 1.3.6.1.4.1.6574.102.1.1.2 + type: DisplayString + - labels: [] + labelname: spaceIOIndex + - name: spaceIOWrites + oid: 1.3.6.1.4.1.6574.102.1.1.6 + type: counter + help: The number of write accesses to this device since boot. - 1.3.6.1.4.1.6574.102.1.1.6 + indexes: + - labelname: spaceIOIndex + type: gauge + lookups: + - labels: + - spaceIOIndex + labelname: spaceIODevice + oid: 1.3.6.1.4.1.6574.102.1.1.2 + type: DisplayString + - labels: [] + labelname: spaceIOIndex + - name: spaceIOLA + oid: 1.3.6.1.4.1.6574.102.1.1.8 + type: gauge + help: The load of disk (%) - 1.3.6.1.4.1.6574.102.1.1.8 + indexes: + - labelname: spaceIOIndex + type: gauge + lookups: + - labels: + - spaceIOIndex + labelname: spaceIODevice + oid: 1.3.6.1.4.1.6574.102.1.1.2 + type: DisplayString + - labels: [] + labelname: spaceIOIndex + - name: spaceIOLA1 + oid: 1.3.6.1.4.1.6574.102.1.1.9 + type: gauge + help: The 1 minute average load of disk (%) - 1.3.6.1.4.1.6574.102.1.1.9 + indexes: + - labelname: spaceIOIndex + type: gauge + lookups: + - labels: + - spaceIOIndex + labelname: spaceIODevice + oid: 1.3.6.1.4.1.6574.102.1.1.2 + type: DisplayString + - labels: [] + labelname: spaceIOIndex + - name: spaceIOLA5 + oid: 1.3.6.1.4.1.6574.102.1.1.10 + type: gauge + help: The 5 minute average load of disk (%) - 1.3.6.1.4.1.6574.102.1.1.10 + indexes: + - labelname: spaceIOIndex + type: gauge + lookups: + - labels: + - spaceIOIndex + labelname: spaceIODevice + oid: 1.3.6.1.4.1.6574.102.1.1.2 + type: DisplayString + - labels: [] + labelname: spaceIOIndex + - name: spaceIOLA15 + oid: 1.3.6.1.4.1.6574.102.1.1.11 + type: gauge + help: The 15 minute average load of disk (%) - 1.3.6.1.4.1.6574.102.1.1.11 + indexes: + - labelname: spaceIOIndex + type: gauge + lookups: + - labels: + - spaceIOIndex + labelname: spaceIODevice + oid: 1.3.6.1.4.1.6574.102.1.1.2 + type: DisplayString + - labels: [] + labelname: spaceIOIndex + - name: spaceIONReadX + oid: 1.3.6.1.4.1.6574.102.1.1.12 + type: counter + help: The number of bytes read from this device since boot. - 1.3.6.1.4.1.6574.102.1.1.12 + indexes: + - labelname: spaceIOIndex + type: gauge + lookups: + - labels: + - spaceIOIndex + labelname: spaceIODevice + oid: 1.3.6.1.4.1.6574.102.1.1.2 + type: DisplayString + - labels: [] + labelname: spaceIOIndex + - name: spaceIONWrittenX + oid: 1.3.6.1.4.1.6574.102.1.1.13 + type: counter + help: The number of bytes written to this device since boot. - 1.3.6.1.4.1.6574.102.1.1.13 + indexes: + - labelname: spaceIOIndex + type: gauge + lookups: + - labels: + - spaceIOIndex + labelname: spaceIODevice + oid: 1.3.6.1.4.1.6574.102.1.1.2 + type: DisplayString + - labels: [] + labelname: spaceIOIndex + - name: spaceUUID + oid: 1.3.6.1.4.1.6574.102.1.1.14 + type: DisplayString + help: The uuid of space. - 1.3.6.1.4.1.6574.102.1.1.14 + indexes: + - labelname: spaceIOIndex + type: gauge + lookups: + - labels: + - spaceIOIndex + labelname: spaceIODevice + oid: 1.3.6.1.4.1.6574.102.1.1.2 + type: DisplayString + - labels: [] + labelname: spaceIOIndex + - name: flashCacheIndex + oid: 1.3.6.1.4.1.6574.103.1.1.1 + type: gauge + help: Reference index for each observed device. - 1.3.6.1.4.1.6574.103.1.1.1 + indexes: + - labelname: flashCacheIndex + type: gauge + lookups: + - labels: + - flashCacheIndex + labelname: flashCacheSSDDev + oid: 1.3.6.1.4.1.6574.103.1.1.2 + type: DisplayString + - labels: [] + labelname: flashCacheIndex + - name: flashCacheSSDDev + oid: 1.3.6.1.4.1.6574.103.1.1.2 + type: DisplayString + help: The ssd device on flashcache we are counting/checking. - 1.3.6.1.4.1.6574.103.1.1.2 + indexes: + - labelname: flashCacheIndex + type: gauge + lookups: + - labels: + - flashCacheIndex + labelname: flashCacheSSDDev + oid: 1.3.6.1.4.1.6574.103.1.1.2 + type: DisplayString + - labels: [] + labelname: flashCacheIndex + - name: flashCacheSpaceDev + oid: 1.3.6.1.4.1.6574.103.1.1.3 + type: DisplayString + help: The space device on flashcache we are counting/checking. - 1.3.6.1.4.1.6574.103.1.1.3 + indexes: + - labelname: flashCacheIndex + type: gauge + lookups: + - labels: + - flashCacheIndex + labelname: flashCacheSSDDev + oid: 1.3.6.1.4.1.6574.103.1.1.2 + type: DisplayString + - labels: [] + labelname: flashCacheIndex + - name: flashCacheReadHits + oid: 1.3.6.1.4.1.6574.103.1.1.4 + type: counter + help: The number of reads on flash cache. - 1.3.6.1.4.1.6574.103.1.1.4 + indexes: + - labelname: flashCacheIndex + type: gauge + lookups: + - labels: + - flashCacheIndex + labelname: flashCacheSSDDev + oid: 1.3.6.1.4.1.6574.103.1.1.2 + type: DisplayString + - labels: [] + labelname: flashCacheIndex + - name: flashCacheWriteHits + oid: 1.3.6.1.4.1.6574.103.1.1.5 + type: counter + help: The number of writes on flash cache. - 1.3.6.1.4.1.6574.103.1.1.5 + indexes: + - labelname: flashCacheIndex + type: gauge + lookups: + - labels: + - flashCacheIndex + labelname: flashCacheSSDDev + oid: 1.3.6.1.4.1.6574.103.1.1.2 + type: DisplayString + - labels: [] + labelname: flashCacheIndex + - name: flashCacheDiskRead + oid: 1.3.6.1.4.1.6574.103.1.1.6 + type: counter + help: The number of reads on disk. - 1.3.6.1.4.1.6574.103.1.1.6 + indexes: + - labelname: flashCacheIndex + type: gauge + lookups: + - labels: + - flashCacheIndex + labelname: flashCacheSSDDev + oid: 1.3.6.1.4.1.6574.103.1.1.2 + type: DisplayString + - labels: [] + labelname: flashCacheIndex + - name: flashCacheDiskWrite + oid: 1.3.6.1.4.1.6574.103.1.1.7 + type: counter + help: The number of writes on disk. - 1.3.6.1.4.1.6574.103.1.1.7 + indexes: + - labelname: flashCacheIndex + type: gauge + lookups: + - labels: + - flashCacheIndex + labelname: flashCacheSSDDev + oid: 1.3.6.1.4.1.6574.103.1.1.2 + type: DisplayString + - labels: [] + labelname: flashCacheIndex + - name: flashCacheTotalRead + oid: 1.3.6.1.4.1.6574.103.1.1.8 + type: counter + help: The number of reads on volume with flash cache. - 1.3.6.1.4.1.6574.103.1.1.8 + indexes: + - labelname: flashCacheIndex + type: gauge + lookups: + - labels: + - flashCacheIndex + labelname: flashCacheSSDDev + oid: 1.3.6.1.4.1.6574.103.1.1.2 + type: DisplayString + - labels: [] + labelname: flashCacheIndex + - name: flashCacheTotalWrite + oid: 1.3.6.1.4.1.6574.103.1.1.9 + type: counter + help: The number of writes on volume with flash cache. - 1.3.6.1.4.1.6574.103.1.1.9 + indexes: + - labelname: flashCacheIndex + type: gauge + lookups: + - labels: + - flashCacheIndex + labelname: flashCacheSSDDev + oid: 1.3.6.1.4.1.6574.103.1.1.2 + type: DisplayString + - labels: [] + labelname: flashCacheIndex + - name: flashCacheReadHitRate + oid: 1.3.6.1.4.1.6574.103.1.1.10 + type: gauge + help: The read hit rate of flash cache (%) - 1.3.6.1.4.1.6574.103.1.1.10 + indexes: + - labelname: flashCacheIndex + type: gauge + lookups: + - labels: + - flashCacheIndex + labelname: flashCacheSSDDev + oid: 1.3.6.1.4.1.6574.103.1.1.2 + type: DisplayString + - labels: [] + labelname: flashCacheIndex + - name: flashCacheWriteHitRate + oid: 1.3.6.1.4.1.6574.103.1.1.11 + type: gauge + help: The write hit rate of flash cache (%) - 1.3.6.1.4.1.6574.103.1.1.11 + indexes: + - labelname: flashCacheIndex + type: gauge + lookups: + - labels: + - flashCacheIndex + labelname: flashCacheSSDDev + oid: 1.3.6.1.4.1.6574.103.1.1.2 + type: DisplayString + - labels: [] + labelname: flashCacheIndex + - name: flashCacheReadSeqSkip + oid: 1.3.6.1.4.1.6574.103.1.1.12 + type: counter + help: The number of skipped sequential reads on flash cache. - 1.3.6.1.4.1.6574.103.1.1.12 + indexes: + - labelname: flashCacheIndex + type: gauge + lookups: + - labels: + - flashCacheIndex + labelname: flashCacheSSDDev + oid: 1.3.6.1.4.1.6574.103.1.1.2 + type: DisplayString + - labels: [] + labelname: flashCacheIndex + - name: flashCacheWriteSeqSkip + oid: 1.3.6.1.4.1.6574.103.1.1.13 + type: counter + help: The number of skipped sequential writes on flash cache. - 1.3.6.1.4.1.6574.103.1.1.13 + indexes: + - labelname: flashCacheIndex + type: gauge + lookups: + - labels: + - flashCacheIndex + labelname: flashCacheSSDDev + oid: 1.3.6.1.4.1.6574.103.1.1.2 + type: DisplayString + - labels: [] + labelname: flashCacheIndex + - name: flashCacheWriteMissSsd + oid: 1.3.6.1.4.1.6574.103.1.1.14 + type: counter + help: The number of data writes to SSD for the first time. - 1.3.6.1.4.1.6574.103.1.1.14 + indexes: + - labelname: flashCacheIndex + type: gauge + lookups: + - labels: + - flashCacheIndex + labelname: flashCacheSSDDev + oid: 1.3.6.1.4.1.6574.103.1.1.2 + type: DisplayString + - labels: [] + labelname: flashCacheIndex + - name: flashCacheSsdUuid + oid: 1.3.6.1.4.1.6574.103.1.1.15 + type: DisplayString + help: The ssd UUID on flashcache we are counting/checking. - 1.3.6.1.4.1.6574.103.1.1.15 + indexes: + - labelname: flashCacheIndex + type: gauge + lookups: + - labels: + - flashCacheIndex + labelname: flashCacheSSDDev + oid: 1.3.6.1.4.1.6574.103.1.1.2 + type: DisplayString + - labels: [] + labelname: flashCacheIndex + - name: iSCSILUNInfoIndex + oid: 1.3.6.1.4.1.6574.104.1.1.1 + type: gauge + help: LUN info index - 1.3.6.1.4.1.6574.104.1.1.1 + indexes: + - labelname: iSCSILUNInfoIndex + type: gauge + - name: iSCSILUNUUID + oid: 1.3.6.1.4.1.6574.104.1.1.2 + type: OctetString + help: LUN uuid - 1.3.6.1.4.1.6574.104.1.1.2 + indexes: + - labelname: iSCSILUNInfoIndex + type: gauge + - name: iSCSILUNName + oid: 1.3.6.1.4.1.6574.104.1.1.3 + type: OctetString + help: LUN name - 1.3.6.1.4.1.6574.104.1.1.3 + indexes: + - labelname: iSCSILUNInfoIndex + type: gauge + - name: iSCSILUNThroughputReadHigh + oid: 1.3.6.1.4.1.6574.104.1.1.4 + type: gauge + help: LUN read throughput over 32 bits part - 1.3.6.1.4.1.6574.104.1.1.4 + indexes: + - labelname: iSCSILUNInfoIndex + type: gauge + - name: iSCSILUNThroughputReadLow + oid: 1.3.6.1.4.1.6574.104.1.1.5 + type: gauge + help: LUN read throughput in unsigned 32 bit - 1.3.6.1.4.1.6574.104.1.1.5 + indexes: + - labelname: iSCSILUNInfoIndex + type: gauge + - name: iSCSILUNThroughputWriteHigh + oid: 1.3.6.1.4.1.6574.104.1.1.6 + type: gauge + help: LUN write throughput over 32 bits part - 1.3.6.1.4.1.6574.104.1.1.6 + indexes: + - labelname: iSCSILUNInfoIndex + type: gauge + - name: iSCSILUNThroughputWriteLow + oid: 1.3.6.1.4.1.6574.104.1.1.7 + type: gauge + help: LUN write throughput in unsigned 32 bit - 1.3.6.1.4.1.6574.104.1.1.7 + indexes: + - labelname: iSCSILUNInfoIndex + type: gauge + - name: iSCSILUNIopsRead + oid: 1.3.6.1.4.1.6574.104.1.1.8 + type: gauge + help: LUN read iops - 1.3.6.1.4.1.6574.104.1.1.8 + indexes: + - labelname: iSCSILUNInfoIndex + type: gauge + - name: iSCSILUNIopsWrite + oid: 1.3.6.1.4.1.6574.104.1.1.9 + type: gauge + help: LUN write iops - 1.3.6.1.4.1.6574.104.1.1.9 + indexes: + - labelname: iSCSILUNInfoIndex + type: gauge + - name: iSCSILUNDiskLatencyRead + oid: 1.3.6.1.4.1.6574.104.1.1.10 + type: gauge + help: LUN disk latency when reading - 1.3.6.1.4.1.6574.104.1.1.10 + indexes: + - labelname: iSCSILUNInfoIndex + type: gauge + - name: iSCSILUNDiskLatencyWrite + oid: 1.3.6.1.4.1.6574.104.1.1.11 + type: gauge + help: LUN disk latency when writing - 1.3.6.1.4.1.6574.104.1.1.11 + indexes: + - labelname: iSCSILUNInfoIndex + type: gauge + - name: iSCSILUNNetworkLatencyTx + oid: 1.3.6.1.4.1.6574.104.1.1.12 + type: gauge + help: LUN transfer data network latency - 1.3.6.1.4.1.6574.104.1.1.12 + indexes: + - labelname: iSCSILUNInfoIndex + type: gauge + - name: iSCSILUNNetworkLatencyRx + oid: 1.3.6.1.4.1.6574.104.1.1.13 + type: gauge + help: LUN receive data network latency - 1.3.6.1.4.1.6574.104.1.1.13 + indexes: + - labelname: iSCSILUNInfoIndex + type: gauge + - name: iSCSILUNIoSizeRead + oid: 1.3.6.1.4.1.6574.104.1.1.14 + type: gauge + help: LUN average io size when reading - 1.3.6.1.4.1.6574.104.1.1.14 + indexes: + - labelname: iSCSILUNInfoIndex + type: gauge + - name: iSCSILUNIoSizeWrite + oid: 1.3.6.1.4.1.6574.104.1.1.15 + type: gauge + help: LUN average io size when writing - 1.3.6.1.4.1.6574.104.1.1.15 + indexes: + - labelname: iSCSILUNInfoIndex + type: gauge + - name: iSCSILUNQueueDepth + oid: 1.3.6.1.4.1.6574.104.1.1.16 + type: gauge + help: Num of iSCSI commands in LUN queue - 1.3.6.1.4.1.6574.104.1.1.16 + indexes: + - labelname: iSCSILUNInfoIndex + type: gauge + - name: iSCSILUNType + oid: 1.3.6.1.4.1.6574.104.1.1.17 + type: OctetString + help: LUN type - 1.3.6.1.4.1.6574.104.1.1.17 + indexes: + - labelname: iSCSILUNInfoIndex + type: gauge + - name: diskIndex + oid: 1.3.6.1.4.1.6574.2.1.1.1 + type: gauge + help: The index of disk table - 1.3.6.1.4.1.6574.2.1.1.1 + indexes: + - labelname: diskIndex + type: gauge + lookups: + - labels: + - diskIndex + labelname: diskID + oid: 1.3.6.1.4.1.6574.2.1.1.2 + type: DisplayString + - labels: [] + labelname: diskIndex + - name: diskID + oid: 1.3.6.1.4.1.6574.2.1.1.2 + type: DisplayString + help: Synology disk ID The ID of disk is assigned by disk Station. - 1.3.6.1.4.1.6574.2.1.1.2 + indexes: + - labelname: diskIndex + type: gauge + lookups: + - labels: + - diskIndex + labelname: diskID + oid: 1.3.6.1.4.1.6574.2.1.1.2 + type: DisplayString + - labels: [] + labelname: diskIndex + - name: diskModel + oid: 1.3.6.1.4.1.6574.2.1.1.3 + type: DisplayString + help: Synology disk model name The disk model name will be showed here. - 1.3.6.1.4.1.6574.2.1.1.3 + indexes: + - labelname: diskIndex + type: gauge + lookups: + - labels: + - diskIndex + labelname: diskID + oid: 1.3.6.1.4.1.6574.2.1.1.2 + type: DisplayString + - labels: [] + labelname: diskIndex + - name: diskType + oid: 1.3.6.1.4.1.6574.2.1.1.4 + type: DisplayString + help: Synology disk type The type of disk will be showed here, including SATA, + SSD and so on. - 1.3.6.1.4.1.6574.2.1.1.4 + indexes: + - labelname: diskIndex + type: gauge + lookups: + - labels: + - diskIndex + labelname: diskID + oid: 1.3.6.1.4.1.6574.2.1.1.2 + type: DisplayString + - labels: [] + labelname: diskIndex + - name: diskStatus + oid: 1.3.6.1.4.1.6574.2.1.1.5 + type: gauge + help: Synology disk status Each meanings of status represented describe below + - 1.3.6.1.4.1.6574.2.1.1.5 + indexes: + - labelname: diskIndex + type: gauge + lookups: + - labels: + - diskIndex + labelname: diskID + oid: 1.3.6.1.4.1.6574.2.1.1.2 + type: DisplayString + - labels: [] + labelname: diskIndex + - name: diskTemperature + oid: 1.3.6.1.4.1.6574.2.1.1.6 + type: gauge + help: Synology disk temperature The temperature of each disk uses Celsius degree. + - 1.3.6.1.4.1.6574.2.1.1.6 + indexes: + - labelname: diskIndex + type: gauge + lookups: + - labels: + - diskIndex + labelname: diskID + oid: 1.3.6.1.4.1.6574.2.1.1.2 + type: DisplayString + - labels: [] + labelname: diskIndex + - name: raidIndex + oid: 1.3.6.1.4.1.6574.3.1.1.1 + type: gauge + help: The index of raid table - 1.3.6.1.4.1.6574.3.1.1.1 + indexes: + - labelname: raidIndex + type: gauge + lookups: + - labels: + - raidIndex + labelname: raidName + oid: 1.3.6.1.4.1.6574.3.1.1.2 + type: DisplayString + - name: raidName + oid: 1.3.6.1.4.1.6574.3.1.1.2 + type: DisplayString + help: Synology raid name The name of each raid will be showed here. - 1.3.6.1.4.1.6574.3.1.1.2 + indexes: + - labelname: raidIndex + type: gauge + lookups: + - labels: + - raidIndex + labelname: raidName + oid: 1.3.6.1.4.1.6574.3.1.1.2 + type: DisplayString + - name: raidStatus + oid: 1.3.6.1.4.1.6574.3.1.1.3 + type: gauge + help: Synology Raid status Each meanings of status represented describe below + - 1.3.6.1.4.1.6574.3.1.1.3 + indexes: + - labelname: raidIndex + type: gauge + lookups: + - labels: + - raidIndex + labelname: raidName + oid: 1.3.6.1.4.1.6574.3.1.1.2 + type: DisplayString + - name: raidFreeSize + oid: 1.3.6.1.4.1.6574.3.1.1.4 + type: gauge + help: Synology raid freesize Free space in bytes. - 1.3.6.1.4.1.6574.3.1.1.4 + indexes: + - labelname: raidIndex + type: gauge + lookups: + - labels: + - raidIndex + labelname: raidName + oid: 1.3.6.1.4.1.6574.3.1.1.2 + type: DisplayString + - name: raidTotalSize + oid: 1.3.6.1.4.1.6574.3.1.1.5 + type: gauge + help: Synology raid totalsize Total space in bytes. - 1.3.6.1.4.1.6574.3.1.1.5 + indexes: + - labelname: raidIndex + type: gauge + lookups: + - labels: + - raidIndex + labelname: raidName + oid: 1.3.6.1.4.1.6574.3.1.1.2 + type: DisplayString + - name: upsDeviceModel + oid: 1.3.6.1.4.1.6574.4.1.1 + type: DisplayString + help: Device model - 1.3.6.1.4.1.6574.4.1.1 + - name: upsDeviceManufacturer + oid: 1.3.6.1.4.1.6574.4.1.2 + type: DisplayString + help: Device manufacturer - 1.3.6.1.4.1.6574.4.1.2 + - name: upsDeviceSerial + oid: 1.3.6.1.4.1.6574.4.1.3 + type: DisplayString + help: Device serial number. - 1.3.6.1.4.1.6574.4.1.3 + - name: upsDeviceType + oid: 1.3.6.1.4.1.6574.4.1.4 + type: DisplayString + help: Device type (ups, pdu, scd, psu) - 1.3.6.1.4.1.6574.4.1.4 + - name: upsDeviceDescription + oid: 1.3.6.1.4.1.6574.4.1.5 + type: DisplayString + help: Device description. - 1.3.6.1.4.1.6574.4.1.5 + - name: upsDeviceContact + oid: 1.3.6.1.4.1.6574.4.1.6 + type: DisplayString + help: Device administrator name. - 1.3.6.1.4.1.6574.4.1.6 + - name: upsDeviceLocation + oid: 1.3.6.1.4.1.6574.4.1.7 + type: DisplayString + help: Device physical location. - 1.3.6.1.4.1.6574.4.1.7 + - name: upsDevicePart + oid: 1.3.6.1.4.1.6574.4.1.8 + type: DisplayString + help: Device part number. - 1.3.6.1.4.1.6574.4.1.8 + - name: upsDeviceMACAddr + oid: 1.3.6.1.4.1.6574.4.1.9 + type: DisplayString + help: Physical network address of the device. - 1.3.6.1.4.1.6574.4.1.9 + - name: upsInfoStatus + oid: 1.3.6.1.4.1.6574.4.2.1 + type: DisplayString + help: UPS status. - 1.3.6.1.4.1.6574.4.2.1 + - name: upsInfoAlarm + oid: 1.3.6.1.4.1.6574.4.2.2 + type: DisplayString + help: UPS alarms - 1.3.6.1.4.1.6574.4.2.2 + - name: upsInfoTime + oid: 1.3.6.1.4.1.6574.4.2.3 + type: DisplayString + help: Internal UPS clock time - 1.3.6.1.4.1.6574.4.2.3 + - name: upsInfoDate + oid: 1.3.6.1.4.1.6574.4.2.4 + type: DisplayString + help: Internal UPS clock date - 1.3.6.1.4.1.6574.4.2.4 + - name: upsInfoModel + oid: 1.3.6.1.4.1.6574.4.2.5 + type: DisplayString + help: UPS model - 1.3.6.1.4.1.6574.4.2.5 + - name: upsInfoMfrName + oid: 1.3.6.1.4.1.6574.4.2.6.1 + type: DisplayString + help: UPS manufacturer - 1.3.6.1.4.1.6574.4.2.6.1 + - name: upsInfoMfrDate + oid: 1.3.6.1.4.1.6574.4.2.6.2 + type: DisplayString + help: UPS manufacturing date - 1.3.6.1.4.1.6574.4.2.6.2 + - name: upsInfoSerial + oid: 1.3.6.1.4.1.6574.4.2.7 + type: DisplayString + help: UPS serial number - 1.3.6.1.4.1.6574.4.2.7 + - name: upsInfoVendorID + oid: 1.3.6.1.4.1.6574.4.2.8 + type: DisplayString + help: Vendor ID for USB devices - 1.3.6.1.4.1.6574.4.2.8 + - name: upsInfoProductID + oid: 1.3.6.1.4.1.6574.4.2.9 + type: DisplayString + help: Product ID for USB devices - 1.3.6.1.4.1.6574.4.2.9 + - name: upsInfoFirmwareName + oid: 1.3.6.1.4.1.6574.4.2.10.1 + type: DisplayString + help: UPS firmware - 1.3.6.1.4.1.6574.4.2.10.1 + - name: upsInfoFirmwareAux + oid: 1.3.6.1.4.1.6574.4.2.10.2 + type: DisplayString + help: Auxiliary device firmware - 1.3.6.1.4.1.6574.4.2.10.2 + - name: upsInfoTemperature + oid: 1.3.6.1.4.1.6574.4.2.11 + type: Float + help: UPS temperature (degrees C) - 1.3.6.1.4.1.6574.4.2.11 + - name: upsInfoLoadValue + oid: 1.3.6.1.4.1.6574.4.2.12.1 + type: Float + help: Load on UPS (percent) - 1.3.6.1.4.1.6574.4.2.12.1 + - name: upsInfoLoadHigh + oid: 1.3.6.1.4.1.6574.4.2.12.2 + type: Float + help: Load when UPS switches to overload condition (OVER) (percent) - 1.3.6.1.4.1.6574.4.2.12.2 + - name: upsInfoID + oid: 1.3.6.1.4.1.6574.4.2.13 + type: DisplayString + help: UPS system identifier - 1.3.6.1.4.1.6574.4.2.13 + - name: upsInfoDelayStart + oid: 1.3.6.1.4.1.6574.4.2.14.1 + type: gauge + help: Interval to wait before restarting the load (seconds) - 1.3.6.1.4.1.6574.4.2.14.1 + - name: upsInfoDelayReboot + oid: 1.3.6.1.4.1.6574.4.2.14.2 + type: gauge + help: Interval to wait before rebooting the UPS (seconds) - 1.3.6.1.4.1.6574.4.2.14.2 + - name: upsInfoDelayShutdown + oid: 1.3.6.1.4.1.6574.4.2.14.3 + type: gauge + help: Interval to wait after shutdown with delay command (seconds) - 1.3.6.1.4.1.6574.4.2.14.3 + - name: upsInfoTimerStart + oid: 1.3.6.1.4.1.6574.4.2.15.1 + type: gauge + help: Time before the load will be started (seconds) - 1.3.6.1.4.1.6574.4.2.15.1 + - name: upsInfoTimerReboot + oid: 1.3.6.1.4.1.6574.4.2.15.2 + type: gauge + help: Time before the load will be rebooted (seconds) - 1.3.6.1.4.1.6574.4.2.15.2 + - name: upsInfoTimerShutdown + oid: 1.3.6.1.4.1.6574.4.2.15.3 + type: gauge + help: Time before the load will be shutdown (seconds) - 1.3.6.1.4.1.6574.4.2.15.3 + - name: upsInfoTestInterval + oid: 1.3.6.1.4.1.6574.4.2.16.1 + type: gauge + help: Interval between self tests - 1.3.6.1.4.1.6574.4.2.16.1 + - name: upsInfoTestResult + oid: 1.3.6.1.4.1.6574.4.2.16.2 + type: DisplayString + help: Results of last self test - 1.3.6.1.4.1.6574.4.2.16.2 + - name: upsInfoDisplayLanguage + oid: 1.3.6.1.4.1.6574.4.2.17 + type: DisplayString + help: Language to use on front panel - 1.3.6.1.4.1.6574.4.2.17 + - name: upsInfoContacts + oid: 1.3.6.1.4.1.6574.4.2.18 + type: DisplayString + help: UPS external contact sensors - 1.3.6.1.4.1.6574.4.2.18 + - name: upsInfoEffciency + oid: 1.3.6.1.4.1.6574.4.2.19 + type: gauge + help: Efficiency of the UPS (ratio of the output current on the input current) + (percent) - 1.3.6.1.4.1.6574.4.2.19 + - name: upsInfoPowerValue + oid: 1.3.6.1.4.1.6574.4.2.20.1 + type: Float + help: Current value of apparent power (Volt-Amps) - 1.3.6.1.4.1.6574.4.2.20.1 + - name: upsInfoPowerNominal + oid: 1.3.6.1.4.1.6574.4.2.20.2 + type: Float + help: Nominal value of apparent power (Volt-Amps) - 1.3.6.1.4.1.6574.4.2.20.2 + - name: upsInfoRealPowerValue + oid: 1.3.6.1.4.1.6574.4.2.21.1 + type: Float + help: Current value of real power (Watts) - 1.3.6.1.4.1.6574.4.2.21.1 + - name: upsInfoRealPowerNominal + oid: 1.3.6.1.4.1.6574.4.2.21.2 + type: Float + help: Nominal value of real power (Watts) - 1.3.6.1.4.1.6574.4.2.21.2 + - name: upsInfoBeeperStatus + oid: 1.3.6.1.4.1.6574.4.2.22 + type: DisplayString + help: UPS beeper status (enabled, disabled or muted) - 1.3.6.1.4.1.6574.4.2.22 + - name: upsInfoType + oid: 1.3.6.1.4.1.6574.4.2.23 + type: DisplayString + help: UPS type - 1.3.6.1.4.1.6574.4.2.23 + - name: upsInfoWatchdogStatus + oid: 1.3.6.1.4.1.6574.4.2.24 + type: DisplayString + help: UPS watchdog status (enabled or disabled) - 1.3.6.1.4.1.6574.4.2.24 + - name: upsInfoStartAuto + oid: 1.3.6.1.4.1.6574.4.2.25.1 + type: DisplayString + help: UPS starts when mains is (re)applied - 1.3.6.1.4.1.6574.4.2.25.1 + - name: upsInfoStartBattery + oid: 1.3.6.1.4.1.6574.4.2.25.2 + type: DisplayString + help: Allow to start UPS from battery - 1.3.6.1.4.1.6574.4.2.25.2 + - name: upsInfoStartReboot + oid: 1.3.6.1.4.1.6574.4.2.25.3 + type: DisplayString + help: UPS coldstarts from battery (enabled or disabled) - 1.3.6.1.4.1.6574.4.2.25.3 + - name: upsBatteryChargeValue + oid: 1.3.6.1.4.1.6574.4.3.1.1 + type: Float + help: Battery charge - 1.3.6.1.4.1.6574.4.3.1.1 + - name: upsBatteryChargeLow + oid: 1.3.6.1.4.1.6574.4.3.1.2 + type: Float + help: Remaining battery level when UPS switches to LB (percent) - 1.3.6.1.4.1.6574.4.3.1.2 + - name: upsBatteryChargeRestart + oid: 1.3.6.1.4.1.6574.4.3.1.3 + type: Float + help: Minimum battery level for UPS restart after power-off - 1.3.6.1.4.1.6574.4.3.1.3 + - name: upsBatteryChargeWarning + oid: 1.3.6.1.4.1.6574.4.3.1.4 + type: Float + help: Battery level when UPS switches to Warning state (percent) - 1.3.6.1.4.1.6574.4.3.1.4 + - name: upsBatteryVoltageValue + oid: 1.3.6.1.4.1.6574.4.3.2.1 + type: Float + help: The magnitude of the present battery voltage. - 1.3.6.1.4.1.6574.4.3.2.1 + - name: upsBatteryVoltageNominal + oid: 1.3.6.1.4.1.6574.4.3.2.2 + type: Float + help: Nominal battery voltage. - 1.3.6.1.4.1.6574.4.3.2.2 + - name: upsBatteryVoltageLow + oid: 1.3.6.1.4.1.6574.4.3.2.3 + type: Float + help: Minimum battery voltage, that triggers FSD status . - 1.3.6.1.4.1.6574.4.3.2.3 + - name: upsBatteryVoltageHigh + oid: 1.3.6.1.4.1.6574.4.3.2.4 + type: Float + help: Maximum battery voltage (Ie battery.charge = 100). - 1.3.6.1.4.1.6574.4.3.2.4 + - name: upsBatteryCapacity + oid: 1.3.6.1.4.1.6574.4.3.3 + type: Float + help: Battery capacity (Ah) - 1.3.6.1.4.1.6574.4.3.3 + - name: upsBatteryCurrent + oid: 1.3.6.1.4.1.6574.4.3.4 + type: Float + help: The present battery current. - 1.3.6.1.4.1.6574.4.3.4 + - name: upsBatteryTemperature + oid: 1.3.6.1.4.1.6574.4.3.5 + type: Float + help: The ambient temperature at or near the UPS Battery casing. - 1.3.6.1.4.1.6574.4.3.5 + - name: upsBatteryRuntimeValue + oid: 1.3.6.1.4.1.6574.4.3.6.1 + type: gauge + help: Battery runtime (seconds) - 1.3.6.1.4.1.6574.4.3.6.1 + - name: upsBatteryRuntimeLow + oid: 1.3.6.1.4.1.6574.4.3.6.2 + type: gauge + help: Remaining battery runtime when UPS switches to LB (seconds) - 1.3.6.1.4.1.6574.4.3.6.2 + - name: upsBatteryRuntimeRestart + oid: 1.3.6.1.4.1.6574.4.3.6.3 + type: gauge + help: Minimum battery runtime for UPS restart after power-off (seconds) - 1.3.6.1.4.1.6574.4.3.6.3 + - name: upsBatteryAlarmThreshold + oid: 1.3.6.1.4.1.6574.4.3.7 + type: DisplayString + help: Battery alarm threshold - 1.3.6.1.4.1.6574.4.3.7 + - name: upsBatteryDate + oid: 1.3.6.1.4.1.6574.4.3.8 + type: DisplayString + help: Battery change date - 1.3.6.1.4.1.6574.4.3.8 + - name: upsBatteryMfrDate + oid: 1.3.6.1.4.1.6574.4.3.9 + type: DisplayString + help: Battery manufacturing date - 1.3.6.1.4.1.6574.4.3.9 + - name: upsBatteryPacks + oid: 1.3.6.1.4.1.6574.4.3.10 + type: gauge + help: Number of battery packs - 1.3.6.1.4.1.6574.4.3.10 + - name: upsBatteryPacksBad + oid: 1.3.6.1.4.1.6574.4.3.11 + type: gauge + help: Number of bad battery packs - 1.3.6.1.4.1.6574.4.3.11 + - name: upsBatteryType + oid: 1.3.6.1.4.1.6574.4.3.12 + type: DisplayString + help: Battery chemistry - 1.3.6.1.4.1.6574.4.3.12 + - name: upsBatteryProtection + oid: 1.3.6.1.4.1.6574.4.3.13 + type: DisplayString + help: Prevent deep discharge of battery - 1.3.6.1.4.1.6574.4.3.13 + - name: upsBatteryEnergySave + oid: 1.3.6.1.4.1.6574.4.3.14 + type: DisplayString + help: Switch off when running on battery and no/low load - 1.3.6.1.4.1.6574.4.3.14 + - name: upsInputVoltageValue + oid: 1.3.6.1.4.1.6574.4.4.1.1 + type: Float + help: Input voltage - 1.3.6.1.4.1.6574.4.4.1.1 + - name: upsInputVoltageMax + oid: 1.3.6.1.4.1.6574.4.4.1.2 + type: Float + help: Maximum incoming voltage seen - 1.3.6.1.4.1.6574.4.4.1.2 + - name: upsInputVoltageMin + oid: 1.3.6.1.4.1.6574.4.4.1.3 + type: Float + help: Minimum incoming voltage seen - 1.3.6.1.4.1.6574.4.4.1.3 + - name: upsInputVoltageNominal + oid: 1.3.6.1.4.1.6574.4.4.1.4 + type: Float + help: Nominal input voltage - 1.3.6.1.4.1.6574.4.4.1.4 + - name: upsInputVoltageExtend + oid: 1.3.6.1.4.1.6574.4.4.1.5 + type: DisplayString + help: Extended input voltage range - 1.3.6.1.4.1.6574.4.4.1.5 + - name: upsInputVoltageFault + oid: 1.3.6.1.4.1.6574.4.4.1.6 + type: Float + help: Input voltage Fault - 1.3.6.1.4.1.6574.4.4.1.6 + - name: upsInputTransferReason + oid: 1.3.6.1.4.1.6574.4.4.2.1 + type: DisplayString + help: Reason for last transfer to battery - 1.3.6.1.4.1.6574.4.4.2.1 + - name: upsInputTransferLow + oid: 1.3.6.1.4.1.6574.4.4.2.2 + type: Float + help: Low voltage transfer point - 1.3.6.1.4.1.6574.4.4.2.2 + - name: upsInputTransferHigh + oid: 1.3.6.1.4.1.6574.4.4.2.3 + type: Float + help: High voltage transfer point - 1.3.6.1.4.1.6574.4.4.2.3 + - name: upsInputTransferLowMin + oid: 1.3.6.1.4.1.6574.4.4.2.4 + type: Float + help: smallest settable low voltage transfer point - 1.3.6.1.4.1.6574.4.4.2.4 + - name: upsInputTransferLowMax + oid: 1.3.6.1.4.1.6574.4.4.2.5 + type: Float + help: greatest settable low voltage transfer point - 1.3.6.1.4.1.6574.4.4.2.5 + - name: upsInputTransferHighMin + oid: 1.3.6.1.4.1.6574.4.4.2.6 + type: Float + help: smallest settable high voltage transfer point - 1.3.6.1.4.1.6574.4.4.2.6 + - name: upsInputTransferHighMax + oid: 1.3.6.1.4.1.6574.4.4.2.7 + type: Float + help: greatest settable high voltage transfer point - 1.3.6.1.4.1.6574.4.4.2.7 + - name: upsInputTransferBoostLow + oid: 1.3.6.1.4.1.6574.4.4.2.8 + type: Float + help: Low voltage boosting transfer point - 1.3.6.1.4.1.6574.4.4.2.8 + - name: upsInputTransferBoostHigh + oid: 1.3.6.1.4.1.6574.4.4.2.9 + type: Float + help: High voltage boosting transfer point - 1.3.6.1.4.1.6574.4.4.2.9 + - name: upsInputTransferTrimLow + oid: 1.3.6.1.4.1.6574.4.4.2.10 + type: Float + help: Low voltage trimming transfer point - 1.3.6.1.4.1.6574.4.4.2.10 + - name: upsInputTransferTrimHigh + oid: 1.3.6.1.4.1.6574.4.4.2.11 + type: Float + help: High voltage trimming transfer point - 1.3.6.1.4.1.6574.4.4.2.11 + - name: upsInputSensitivity + oid: 1.3.6.1.4.1.6574.4.4.3 + type: DisplayString + help: Input power sensitivity - 1.3.6.1.4.1.6574.4.4.3 + - name: upsInputQuality + oid: 1.3.6.1.4.1.6574.4.4.4 + type: DisplayString + help: Input power quality - 1.3.6.1.4.1.6574.4.4.4 + - name: upsInputCurrentValue + oid: 1.3.6.1.4.1.6574.4.4.5.1 + type: Float + help: Input current (A) - 1.3.6.1.4.1.6574.4.4.5.1 + - name: upsInputCurrentNominal + oid: 1.3.6.1.4.1.6574.4.4.5.2 + type: Float + help: Nominal input current (A) - 1.3.6.1.4.1.6574.4.4.5.2 + - name: upsInputFrequencyValue + oid: 1.3.6.1.4.1.6574.4.4.6.1 + type: Float + help: Input line frequency (Hz) - 1.3.6.1.4.1.6574.4.4.6.1 + - name: upsInputFrequencyNominal + oid: 1.3.6.1.4.1.6574.4.4.6.2 + type: Float + help: Nominal input line frequency (Hz) - 1.3.6.1.4.1.6574.4.4.6.2 + - name: upsInputFrequencyLow + oid: 1.3.6.1.4.1.6574.4.4.6.3 + type: Float + help: Input line frequency low (Hz) - 1.3.6.1.4.1.6574.4.4.6.3 + - name: upsInputFrequencyHigh + oid: 1.3.6.1.4.1.6574.4.4.6.4 + type: Float + help: Input line frequency high (Hz) - 1.3.6.1.4.1.6574.4.4.6.4 + - name: upsInputFrequencyExtend + oid: 1.3.6.1.4.1.6574.4.4.6.5 + type: DisplayString + help: Extended input frequency range - 1.3.6.1.4.1.6574.4.4.6.5 + - name: upsOutputVoltageValue + oid: 1.3.6.1.4.1.6574.4.5.1.1 + type: Float + help: Output voltage (V) - 1.3.6.1.4.1.6574.4.5.1.1 + - name: upsOutputVoltageNominal + oid: 1.3.6.1.4.1.6574.4.5.1.2 + type: Float + help: Nominal output voltage (V) - 1.3.6.1.4.1.6574.4.5.1.2 + - name: upsOutputFrequencyValue + oid: 1.3.6.1.4.1.6574.4.5.2.1 + type: Float + help: Output frequency (Hz) - 1.3.6.1.4.1.6574.4.5.2.1 + - name: upsOutputFrequencyNominal + oid: 1.3.6.1.4.1.6574.4.5.2.2 + type: Float + help: Nominal output frequency (Hz) - 1.3.6.1.4.1.6574.4.5.2.2 + - name: upsOutputCurrentValue + oid: 1.3.6.1.4.1.6574.4.5.3.1 + type: Float + help: Output current (A) - 1.3.6.1.4.1.6574.4.5.3.1 + - name: upsOutputCurrentNominal + oid: 1.3.6.1.4.1.6574.4.5.3.2 + type: Float + help: Nominal output current (A) - 1.3.6.1.4.1.6574.4.5.3.2 + - name: upsAmbientTemperatureValue + oid: 1.3.6.1.4.1.6574.4.6.1.1 + type: Float + help: Ambient temperature (degrees C) - 1.3.6.1.4.1.6574.4.6.1.1 + - name: upsAmbientTemperatureAlarm + oid: 1.3.6.1.4.1.6574.4.6.1.2 + type: DisplayString + help: Temperature alarm (enabled/disabled) - 1.3.6.1.4.1.6574.4.6.1.2 + - name: upsAmbientTemperatureHigh + oid: 1.3.6.1.4.1.6574.4.6.1.3 + type: Float + help: Temperature threshold high (degrees C) - 1.3.6.1.4.1.6574.4.6.1.3 + - name: upsAmbientTemperatureLow + oid: 1.3.6.1.4.1.6574.4.6.1.4 + type: Float + help: Temperature threshold low (degrees C) - 1.3.6.1.4.1.6574.4.6.1.4 + - name: upsAmbientTemperatureMax + oid: 1.3.6.1.4.1.6574.4.6.1.5 + type: Float + help: Maximum temperature seen (degrees C) - 1.3.6.1.4.1.6574.4.6.1.5 + - name: upsAmbientTemperatureMin + oid: 1.3.6.1.4.1.6574.4.6.1.6 + type: Float + help: Minimum temperature seen (degrees C) - 1.3.6.1.4.1.6574.4.6.1.6 + - name: upsAmbientHumidityValue + oid: 1.3.6.1.4.1.6574.4.6.2.1 + type: Float + help: Ambient relative humidity (percent) - 1.3.6.1.4.1.6574.4.6.2.1 + - name: upsAmbientHumidityAlarm + oid: 1.3.6.1.4.1.6574.4.6.2.2 + type: DisplayString + help: Relative humidity alarm (enabled/disabled) - 1.3.6.1.4.1.6574.4.6.2.2 + - name: upsAmbientHumidityHigh + oid: 1.3.6.1.4.1.6574.4.6.2.3 + type: Float + help: Relative humidity threshold high (percent) - 1.3.6.1.4.1.6574.4.6.2.3 + - name: upsAmbientHumidityLow + oid: 1.3.6.1.4.1.6574.4.6.2.4 + type: Float + help: Relative humidity threshold low (percent) - 1.3.6.1.4.1.6574.4.6.2.4 + - name: upsAmbientHumidityMax + oid: 1.3.6.1.4.1.6574.4.6.2.5 + type: Float + help: Maximum relative humidity seen (percent) - 1.3.6.1.4.1.6574.4.6.2.5 + - name: upsAmbientHumidityMin + oid: 1.3.6.1.4.1.6574.4.6.2.6 + type: Float + help: Minimum relative humidity seen (percent) - 1.3.6.1.4.1.6574.4.6.2.6 + - name: upsDriverName + oid: 1.3.6.1.4.1.6574.4.7.1 + type: DisplayString + help: Driver name - 1.3.6.1.4.1.6574.4.7.1 + - name: upsDriverVersion + oid: 1.3.6.1.4.1.6574.4.7.2 + type: DisplayString + help: Driver version (NUT release) - 1.3.6.1.4.1.6574.4.7.2 + - name: upsDriverVersionData + oid: 1.3.6.1.4.1.6574.4.7.3 + type: DisplayString + help: Driver version data - 1.3.6.1.4.1.6574.4.7.3 + - name: upsDriverVersionInternal + oid: 1.3.6.1.4.1.6574.4.7.4 + type: DisplayString + help: Internal driver version (if tracked separately) - 1.3.6.1.4.1.6574.4.7.4 + - name: upsDriverPollInterval + oid: 1.3.6.1.4.1.6574.4.7.5 + type: gauge + help: Poll interval setup in configuration file - 1.3.6.1.4.1.6574.4.7.5 + - name: upsDriverPort + oid: 1.3.6.1.4.1.6574.4.7.6 + type: DisplayString + help: Port setup in configuration file - 1.3.6.1.4.1.6574.4.7.6 + - name: upsDriverPollFrequency + oid: 1.3.6.1.4.1.6574.4.7.7 + type: gauge + help: Poll frequency - 1.3.6.1.4.1.6574.4.7.7 + - name: upsDriverProductID + oid: 1.3.6.1.4.1.6574.4.7.8 + type: DisplayString + help: Product ID - 1.3.6.1.4.1.6574.4.7.8 + - name: upsDriverSnmpVersion + oid: 1.3.6.1.4.1.6574.4.7.9 + type: DisplayString + help: Snmp version - 1.3.6.1.4.1.6574.4.7.9 + - name: upsServerInfo + oid: 1.3.6.1.4.1.6574.4.8.1 + type: DisplayString + help: Server information - 1.3.6.1.4.1.6574.4.8.1 + - name: upsServerVersion + oid: 1.3.6.1.4.1.6574.4.8.2 + type: DisplayString + help: Server version - 1.3.6.1.4.1.6574.4.8.2 + - name: diskSMARTInfoIndex + oid: 1.3.6.1.4.1.6574.5.1.1.1 + type: gauge + help: SMART info index - 1.3.6.1.4.1.6574.5.1.1.1 + indexes: + - labelname: diskSMARTInfoIndex + type: gauge + - name: diskSMARTInfoDevName + oid: 1.3.6.1.4.1.6574.5.1.1.2 + type: DisplayString + help: SMART info device name - 1.3.6.1.4.1.6574.5.1.1.2 + indexes: + - labelname: diskSMARTInfoIndex + type: gauge + - name: diskSMARTAttrName + oid: 1.3.6.1.4.1.6574.5.1.1.3 + type: DisplayString + help: SMART attribute name - 1.3.6.1.4.1.6574.5.1.1.3 + indexes: + - labelname: diskSMARTInfoIndex + type: gauge + - name: diskSMARTAttrId + oid: 1.3.6.1.4.1.6574.5.1.1.4 + type: gauge + help: SMART attribute ID - 1.3.6.1.4.1.6574.5.1.1.4 + indexes: + - labelname: diskSMARTInfoIndex + type: gauge + - name: diskSMARTAttrCurrent + oid: 1.3.6.1.4.1.6574.5.1.1.5 + type: gauge + help: SMART attribute current value - 1.3.6.1.4.1.6574.5.1.1.5 + indexes: + - labelname: diskSMARTInfoIndex + type: gauge + - name: diskSMARTAttrWorst + oid: 1.3.6.1.4.1.6574.5.1.1.6 + type: gauge + help: SMART attribute worst value - 1.3.6.1.4.1.6574.5.1.1.6 + indexes: + - labelname: diskSMARTInfoIndex + type: gauge + - name: diskSMARTAttrThreshold + oid: 1.3.6.1.4.1.6574.5.1.1.7 + type: gauge + help: SMART attribute threshold value - 1.3.6.1.4.1.6574.5.1.1.7 + indexes: + - labelname: diskSMARTInfoIndex + type: gauge + - name: diskSMARTAttrRaw + oid: 1.3.6.1.4.1.6574.5.1.1.8 + type: gauge + help: SMART attribute raw value - 1.3.6.1.4.1.6574.5.1.1.8 + indexes: + - labelname: diskSMARTInfoIndex + type: gauge + - name: diskSMARTAttrStatus + oid: 1.3.6.1.4.1.6574.5.1.1.9 + type: DisplayString + help: SMART attribute status - 1.3.6.1.4.1.6574.5.1.1.9 + indexes: + - labelname: diskSMARTInfoIndex + type: gauge + - name: serviceInfoIndex + oid: 1.3.6.1.4.1.6574.6.1.1.1 + type: gauge + help: Service info index - 1.3.6.1.4.1.6574.6.1.1.1 + indexes: + - labelname: serviceInfoIndex + type: gauge + lookups: + - labels: + - serviceInfoIndex + labelname: serviceName + oid: 1.3.6.1.4.1.6574.6.1.1.2 + type: DisplayString + - labels: [] + labelname: serviceInfoIndex + - name: serviceName + oid: 1.3.6.1.4.1.6574.6.1.1.2 + type: DisplayString + help: Service name - 1.3.6.1.4.1.6574.6.1.1.2 + indexes: + - labelname: serviceInfoIndex + type: gauge + lookups: + - labels: + - serviceInfoIndex + labelname: serviceName + oid: 1.3.6.1.4.1.6574.6.1.1.2 + type: DisplayString + - labels: [] + labelname: serviceInfoIndex + - name: serviceUsers + oid: 1.3.6.1.4.1.6574.6.1.1.3 + type: gauge + help: Number of users using this service - 1.3.6.1.4.1.6574.6.1.1.3 + indexes: + - labelname: serviceInfoIndex + type: gauge + lookups: + - labels: + - serviceInfoIndex + labelname: serviceName + oid: 1.3.6.1.4.1.6574.6.1.1.2 + type: DisplayString + - labels: [] + labelname: serviceInfoIndex + diff --git a/Prometheus/README.md b/Prometheus/README.md new file mode 100644 index 0000000..bc1bb35 --- /dev/null +++ b/Prometheus/README.md @@ -0,0 +1,3 @@ +# Prometheus + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Prometheus/status.svg)](https://drone.alexlebens.net/alexlebens/Prometheus) \ No newline at end of file diff --git a/Prometheus/UptimeKuma/docker-1.json b/Prometheus/UptimeKuma/docker-1.json new file mode 100644 index 0000000..32ef9e1 --- /dev/null +++ b/Prometheus/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Prometheus - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://prometheus.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "prometheus", + "docker_host": 1 +} \ No newline at end of file diff --git a/Prometheus/UptimeKuma/docker-2.json b/Prometheus/UptimeKuma/docker-2.json new file mode 100644 index 0000000..72c7c59 --- /dev/null +++ b/Prometheus/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Prometheus Alertmanager - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://alertmanager.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "prometheus_alertmanager", + "docker_host": 1 +} \ No newline at end of file diff --git a/Prometheus/UptimeKuma/docker-3.json b/Prometheus/UptimeKuma/docker-3.json new file mode 100644 index 0000000..b2311d4 --- /dev/null +++ b/Prometheus/UptimeKuma/docker-3.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Prometheus Node Exporter - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://ps03fd.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "prometheus_node_exporter", + "docker_host": 1 +} \ No newline at end of file diff --git a/Prometheus/UptimeKuma/docker-4.json b/Prometheus/UptimeKuma/docker-4.json new file mode 100644 index 0000000..52fa38a --- /dev/null +++ b/Prometheus/UptimeKuma/docker-4.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Prometheus SNMP - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://snmp.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "prometheus_snmp_exporter", + "docker_host": 1 +} \ No newline at end of file diff --git a/Prometheus/UptimeKuma/docker-5.json b/Prometheus/UptimeKuma/docker-5.json new file mode 100644 index 0000000..0de0679 --- /dev/null +++ b/Prometheus/UptimeKuma/docker-5.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Prometheus cAdvisor - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://cadvisor.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "prometheus_cadvisor", + "docker_host": 1 +} \ No newline at end of file diff --git a/Prometheus/UptimeKuma/docker-6.json b/Prometheus/UptimeKuma/docker-6.json new file mode 100644 index 0000000..ef359b5 --- /dev/null +++ b/Prometheus/UptimeKuma/docker-6.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Prometheus Unpoller - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://unpoller.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "prometheus_unpoller", + "docker_host": 1 +} \ No newline at end of file diff --git a/Prometheus/UptimeKuma/http-1.json b/Prometheus/UptimeKuma/http-1.json new file mode 100644 index 0000000..a845970 --- /dev/null +++ b/Prometheus/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Prometheus - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://prometheus.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Prometheus/UptimeKuma/http-2.json b/Prometheus/UptimeKuma/http-2.json new file mode 100644 index 0000000..0318118 --- /dev/null +++ b/Prometheus/UptimeKuma/http-2.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Prometheus Alertmanager - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://alertmanager.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Prometheus/UptimeKuma/http-3.json b/Prometheus/UptimeKuma/http-3.json new file mode 100644 index 0000000..088847d --- /dev/null +++ b/Prometheus/UptimeKuma/http-3.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Prometheus cAdvisor - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://cadvisor.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Prometheus/docker-compose.yml b/Prometheus/docker-compose.yml new file mode 100644 index 0000000..4f54217 --- /dev/null +++ b/Prometheus/docker-compose.yml @@ -0,0 +1,179 @@ +services: + prometheus: + command: + - --config.file=/etc/prometheus/prometheus.yml + - --storage.tsdb.path=/prometheus + - --web.console.libraries=/usr/share/prometheus/console_libraries + - --web.console.templates=/usr/share/prometheus/consoles + - --web.enable-lifecycle + container_name: prometheus + image: prom/prometheus:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.prometheus.entrypoints: websecure + traefik.http.routers.prometheus.rule: Host(`prometheus.alexlebens.net`) + traefik.http.routers.prometheus.service: prometheus + traefik.http.routers.prometheus.middlewares: authentik@file + traefik.http.services.prometheus.loadbalancer.server.port: 9090 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + privileged: true + restart: always + user: root + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - prometheus_config:/etc/prometheus + - prometheus_data:/prometheus + - alertmanager:/alertmanager + + alertmanager: + command: + - --config.file=/alertmanager/alertmanager.yml + container_name: prometheus_alertmanager + depends_on: + - prometheus + image: prom/alertmanager:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.alertmanager.entrypoints: websecure + traefik.http.routers.alertmanager.rule: Host(`alertmanager.alexlebens.net`) + traefik.http.routers.alertmanager.service: alertmanager + traefik.http.routers.alertmanager.middlewares: authentik@file + traefik.http.services.alertmanager.loadbalancer.server.port: 9093 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + privileged: true + restart: always + user: root + volumes: + - alertmanager:/alertmanager + + node_exporter: + container_name: prometheus_node_exporter + image: prom/node-exporter:latest + depends_on: + - alertmanager + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + privileged: true + restart: always + volumes: + - /host:/host + - /var/lib/docker/volumes/partition:/partition + + snmp_exporter: + command: + - --config.file=/etc/snmp_exporter/snmp.yml + container_name: prometheus_snmp_exporter + depends_on: + - node_exporter + dns: + - 192.168.1.15 + image: prom/snmp-exporter:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: unless-stopped + volumes: + - snmp_exporter:/etc/snmp_exporter + + cadvisor: + container_name: prometheus_cadvisor + image: gcr.io/cadvisor/cadvisor:v0.46.0 + depends_on: + - snmp_exporter + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.cadvisor.entrypoints: websecure + traefik.http.routers.cadvisor.rule: Host(`cadvisor.alexlebens.net`) + traefik.http.routers.cadvisor.service: cadvisor + traefik.http.routers.cadvisor.middlewares: authentik@file + traefik.http.services.cadvisor.loadbalancer.server.port: 8080 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + privileged: true + restart: always + volumes: + - /cgroup:/cgroup:ro + - /dev/disk/:/dev/disk:ro + - /:/rootfs:ro + - /sys:/sys:ro + - /var/lib/docker/:/var/lib/docker:ro + - /var/run:/var/run:ro + + unpoller: + container_name: prometheus_unpoller + depends_on: + - cadvisor + env_file: + - .env + image: golift/unifi-poller:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + +networks: + traefik: + name: traefik + external: true + +volumes: + prometheus_config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/prometheus_config + + prometheus_data: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/prometheus + + alertmanager: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/prometheus_alertmanager + + snmp_exporter: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/prometheus_snmp_exporter diff --git a/Prowlarr/.drone.yml b/Prowlarr/.drone.yml new file mode 100644 index 0000000..f9ff03a --- /dev/null +++ b/Prowlarr/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Prowlarr + URL: prowlarr.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Prowlarr failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Prowlarr failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Prowlarr succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Prowlarr failed. + when: + status: + - failure diff --git a/Prowlarr/README.md b/Prowlarr/README.md new file mode 100644 index 0000000..272e7db --- /dev/null +++ b/Prowlarr/README.md @@ -0,0 +1,3 @@ +# Prowlarr + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Prowlarr/status.svg)](https://drone.alexlebens.net/alexlebens/Prowlarr) \ No newline at end of file diff --git a/Prowlarr/UptimeKuma/docker-1.json b/Prowlarr/UptimeKuma/docker-1.json new file mode 100644 index 0000000..cdabff4 --- /dev/null +++ b/Prowlarr/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Prowlarr - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://prowlarr.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "prowlarr", + "docker_host": 1 +} \ No newline at end of file diff --git a/Prowlarr/UptimeKuma/http-1.json b/Prowlarr/UptimeKuma/http-1.json new file mode 100644 index 0000000..c99bcef --- /dev/null +++ b/Prowlarr/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Prowlarr - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://prowlarr.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Prowlarr/docker-compose.yml b/Prowlarr/docker-compose.yml new file mode 100644 index 0000000..1407c9f --- /dev/null +++ b/Prowlarr/docker-compose.yml @@ -0,0 +1,40 @@ +services: + prowlarr: + container_name: prowlarr + environment: + - PUID=1000 + - PGID=1000 + - UMASK=022 + - TZ=America/Denver + image: hotio/prowlarr:testing + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.prowlarr.entrypoints: websecure + traefik.http.routers.prowlarr.rule: Host(`prowlarr.alexlebens.net`) + traefik.http.routers.prowlarr.service: prowlarr + traefik.http.services.prowlarr.loadbalancer.server.port: 9696 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.34 + restart: always + volumes: + - prowlarr:/config:rw + +networks: + traefik: + name: traefik + external: true + +volumes: + prowlarr: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/servarr_prowlarr diff --git a/Radarr/.drone.yml b/Radarr/.drone.yml new file mode 100644 index 0000000..7303cea --- /dev/null +++ b/Radarr/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Radarr + URL: radarr.alexlebens.net radarranime.alexlebens.net radarrart.alexlebens.net radarrdocumentaries.alexlebens.net radarrstandup.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Radarr failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Radarr failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Radarr succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Radarr failed. + when: + status: + - failure diff --git a/Radarr/README.md b/Radarr/README.md new file mode 100644 index 0000000..49cc46c --- /dev/null +++ b/Radarr/README.md @@ -0,0 +1,3 @@ +# Radarr + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Radarr/status.svg)](https://drone.alexlebens.net/alexlebens/Radarr) \ No newline at end of file diff --git a/Radarr/UptimeKuma/docker-1.json b/Radarr/UptimeKuma/docker-1.json new file mode 100644 index 0000000..de81769 --- /dev/null +++ b/Radarr/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Radarr - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://radarr.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "radarr", + "docker_host": 1 +} \ No newline at end of file diff --git a/Radarr/UptimeKuma/docker-10.json b/Radarr/UptimeKuma/docker-10.json new file mode 100644 index 0000000..b0734e4 --- /dev/null +++ b/Radarr/UptimeKuma/docker-10.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Radarr Stand Up Exporter - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://radarrstandup.alexlebens.net:9000/metrics", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "radarr_standup_exporter", + "docker_host": 1 +} \ No newline at end of file diff --git a/Radarr/UptimeKuma/docker-2.json b/Radarr/UptimeKuma/docker-2.json new file mode 100644 index 0000000..49dfa76 --- /dev/null +++ b/Radarr/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Radarr Anime - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://radarranime.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "radarr_anime", + "docker_host": 1 +} \ No newline at end of file diff --git a/Radarr/UptimeKuma/docker-3.json b/Radarr/UptimeKuma/docker-3.json new file mode 100644 index 0000000..56e9f2e --- /dev/null +++ b/Radarr/UptimeKuma/docker-3.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Radarr Art - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://radarrart.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "radarr_art", + "docker_host": 1 +} \ No newline at end of file diff --git a/Radarr/UptimeKuma/docker-4.json b/Radarr/UptimeKuma/docker-4.json new file mode 100644 index 0000000..7a9dde1 --- /dev/null +++ b/Radarr/UptimeKuma/docker-4.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Radarr Documentaries - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://radarrdocumentaries.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "radarr_documentaries", + "docker_host": 1 +} \ No newline at end of file diff --git a/Radarr/UptimeKuma/docker-5.json b/Radarr/UptimeKuma/docker-5.json new file mode 100644 index 0000000..6703304 --- /dev/null +++ b/Radarr/UptimeKuma/docker-5.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Radarr Stand Up - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://radarrstandup.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "radarr_standup", + "docker_host": 1 +} \ No newline at end of file diff --git a/Radarr/UptimeKuma/docker-6.json b/Radarr/UptimeKuma/docker-6.json new file mode 100644 index 0000000..e12ada4 --- /dev/null +++ b/Radarr/UptimeKuma/docker-6.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Radarr Exporter - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://radarr.alexlebens.net:9000/metrics", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "radarr_exporter", + "docker_host": 1 +} \ No newline at end of file diff --git a/Radarr/UptimeKuma/docker-7.json b/Radarr/UptimeKuma/docker-7.json new file mode 100644 index 0000000..7150c53 --- /dev/null +++ b/Radarr/UptimeKuma/docker-7.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Radarr Anime Exporter - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://radarranime.alexlebens.net:9000/metrics", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "radarr_anime_exporter", + "docker_host": 1 +} \ No newline at end of file diff --git a/Radarr/UptimeKuma/docker-8.json b/Radarr/UptimeKuma/docker-8.json new file mode 100644 index 0000000..c4c676d --- /dev/null +++ b/Radarr/UptimeKuma/docker-8.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Radarr Art Exporter - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://radarrart.alexlebens.net:9000/metrics", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "radarr_art_exporter", + "docker_host": 1 +} \ No newline at end of file diff --git a/Radarr/UptimeKuma/docker-9.json b/Radarr/UptimeKuma/docker-9.json new file mode 100644 index 0000000..29d5e93 --- /dev/null +++ b/Radarr/UptimeKuma/docker-9.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Radarr Documentaries Exporter - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://radarrdocumentaries.alexlebens.net:9000/metrics", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "radarr_documentaries_exporter", + "docker_host": 1 +} \ No newline at end of file diff --git a/Radarr/UptimeKuma/http-1.json b/Radarr/UptimeKuma/http-1.json new file mode 100644 index 0000000..0c57d1a --- /dev/null +++ b/Radarr/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Radarr - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://radarr.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Radarr/UptimeKuma/http-2.json b/Radarr/UptimeKuma/http-2.json new file mode 100644 index 0000000..c511714 --- /dev/null +++ b/Radarr/UptimeKuma/http-2.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Radarr Anime - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://radarranime.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Radarr/UptimeKuma/http-3.json b/Radarr/UptimeKuma/http-3.json new file mode 100644 index 0000000..f26eaa2 --- /dev/null +++ b/Radarr/UptimeKuma/http-3.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Radarr Art - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://radarrart.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Radarr/UptimeKuma/http-4.json b/Radarr/UptimeKuma/http-4.json new file mode 100644 index 0000000..282ee6f --- /dev/null +++ b/Radarr/UptimeKuma/http-4.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Radarr Documentaries - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://radarrdocumentaries.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Radarr/UptimeKuma/http-5.json b/Radarr/UptimeKuma/http-5.json new file mode 100644 index 0000000..1e8986a --- /dev/null +++ b/Radarr/UptimeKuma/http-5.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Radarr Stand Up - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://radarrstandup.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Radarr/docker-compose.yml b/Radarr/docker-compose.yml new file mode 100644 index 0000000..f348ecd --- /dev/null +++ b/Radarr/docker-compose.yml @@ -0,0 +1,305 @@ +services: + radarr: + container_name: radarr + environment: + - PUID=1000 + - PGID=1000 + - UMASK=022 + - TZ=America/Denver + image: hotio/radarr:testing + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.radarr.entrypoints: websecure + traefik.http.routers.radarr.rule: Host(`radarr.alexlebens.net`) + traefik.http.routers.radarr.service: radarr + traefik.http.routers.radarr.middlewares: radarr-theme@file + traefik.http.services.radarr.loadbalancer.server.port: 7878 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.30 + restart: always + privileged: true + volumes: + - radarr:/config + - storage_nfs:/mnt/store + + radarr_anime: + container_name: radarr_anime + environment: + - PUID=1000 + - PGID=1000 + - UMASK=022 + - TZ=America/Denver + image: hotio/radarr:release + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.radarr_anime.entrypoints: websecure + traefik.http.routers.radarr_anime.rule: Host(`radarranime.alexlebens.net`) + traefik.http.routers.radarr_anime.service: radarr_anime + traefik.http.routers.radarr_anime.middlewares: radarr-theme@file + traefik.http.services.radarr_anime.loadbalancer.server.port: 7878 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.61 + restart: always + privileged: true + volumes: + - radarr_anime:/config + - storage_nfs:/mnt/store + + radarr_art: + container_name: radarr_art + environment: + - PUID=1000 + - PGID=1000 + - UMASK=022 + - TZ=America/Denver + image: hotio/radarr:release + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.radarr_art.entrypoints: websecure + traefik.http.routers.radarr_art.rule: Host(`radarrart.alexlebens.net`) + traefik.http.routers.radarr_art.service: radarr_art + traefik.http.routers.radarr_art.middlewares: radarr-theme@file + traefik.http.services.radarr_art.loadbalancer.server.port: 7878 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.62 + restart: always + privileged: true + volumes: + - radarr_art:/config + - storage_nfs:/mnt/store + + radarr_documentaries: + container_name: radarr_documentaries + environment: + - PUID=1000 + - PGID=1000 + - UMASK=022 + - TZ=America/Denver + image: hotio/radarr:release + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.radarr_documentaries.entrypoints: websecure + traefik.http.routers.radarr_documentaries.rule: Host(`radarrdocumentaries.alexlebens.net`) + traefik.http.routers.radarr_documentaries.service: radarr_documentaries + traefik.http.routers.radarr_documentaries.middlewares: radarr-theme@file + traefik.http.services.radarr_documentaries.loadbalancer.server.port: 7878 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.63 + restart: always + privileged: true + volumes: + - radarr_documentaries:/config + - storage_nfs:/mnt/store + + radarr_standup: + container_name: radarr_standup + environment: + - PUID=1000 + - PGID=1000 + - UMASK=022 + - TZ=America/Denver + image: hotio/radarr:release + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.radarr_standup.entrypoints: websecure + traefik.http.routers.radarr_standup.rule: Host(`radarrstandup.alexlebens.net`) + traefik.http.routers.radarr_standup.service: radarr_standup + traefik.http.routers.radarr_standup.middlewares: radarr-theme@file + traefik.http.services.radarr_standup.loadbalancer.server.port: 7878 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.64 + restart: always + privileged: true + volumes: + - radarr_standup:/config + - storage_nfs:/mnt/store + + radarr_exporter: + command: radarr + container_name: radarr_exporter + depends_on: + - radarr + environment: + PORT: 9708 + URL: http://radarr:7878 + APIKEY: e6e3d6f4aafe4e499d970cfcbf042db9 + image: ghcr.io/onedr0p/exportarr:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.36 + restart: always + + radarr_anime_exporter: + command: radarr + container_name: radarr_anime_exporter + depends_on: + - radarr_anime + environment: + PORT: 9708 + URL: http://radarr_anime:7878 + APIKEY: fb126bad31d64d43bb669ad81329954d + image: ghcr.io/onedr0p/exportarr:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.66 + restart: always + + radarr_art_exporter: + command: radarr + container_name: radarr_art_exporter + depends_on: + - radarr_art + environment: + PORT: 9708 + URL: http://radarr_art:7878 + APIKEY: 32365893c4234f8a9ad96d68d6e7a520 + image: ghcr.io/onedr0p/exportarr:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.67 + restart: always + + radarr_documentaries_exporter: + command: radarr + container_name: radarr_documentaries_exporter + depends_on: + - radarr_documentaries + environment: + PORT: 9708 + URL: http://radarr_documentaries:7878 + APIKEY: fd03f47363324096a56d0a453623420b + image: ghcr.io/onedr0p/exportarr:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.68 + restart: always + + radarr_standup_exporter: + command: radarr + container_name: radarr_standup_exporter + depends_on: + - radarr_standup + environment: + PORT: 9708 + URL: http://radarr_standup:7878 + APIKEY: c7c425b3fbcf4112895aceec7729f4d1 + image: ghcr.io/onedr0p/exportarr:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.69 + restart: always + +networks: + traefik: + name: traefik + external: true + +volumes: + radarr: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/servarr_radarr + + radarr_anime: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/servarr_radarr_anime + + radarr_art: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/servarr_radarr_art + + radarr_documentaries: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/servarr_radarr_documentaries + + radarr_standup: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/servarr_radarr_standup + +# storage: +# driver: local +# driver_opts: +# type: cifs +# o: username=aurailious,password=24wrsfxv@$$WRSFXV,file_mode=0777,dir_mode=0777 +# device: "//192.168.1.194/Storage" + + storage_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: :/volume2/Storage diff --git a/ReactiveResume/.db.env b/ReactiveResume/.db.env new file mode 100644 index 0000000..45be0ac --- /dev/null +++ b/ReactiveResume/.db.env @@ -0,0 +1,3 @@ +POSTGRES_DB=postgres +POSTGRES_USER=postgres +POSTGRES_PASSWORD=postgres \ No newline at end of file diff --git a/ReactiveResume/.drone.yml b/ReactiveResume/.drone.yml new file mode 100644 index 0000000..36abf7b --- /dev/null +++ b/ReactiveResume/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: ReactiveResume + URL: reactiveresume.alexlebens.net reactiveresumesr.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for ReactiveResume failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for ReactiveResume failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for ReactiveResume succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for ReactiveResume failed. + when: + status: + - failure diff --git a/ReactiveResume/.env b/ReactiveResume/.env new file mode 100644 index 0000000..c7a14cb --- /dev/null +++ b/ReactiveResume/.env @@ -0,0 +1,10 @@ +PUBLIC_URL=https://reactiveresume.alexlebens.net +PUBLIC_SERVER_URL=https://reactiveresumesr.alexlebens.net +POSTGRES_DB=postgres +POSTGRES_USER=postgres +POSTGRES_PASSWORD=postgres +SECRET_KEY=change-me-to-something-secure +POSTGRES_HOST=reactiveresume_postgres +POSTGRES_PORT=5432 +JWT_SECRET=change-me-to-something-secure +JWT_EXPIRY_TIME=604800 \ No newline at end of file diff --git a/ReactiveResume/README.md b/ReactiveResume/README.md new file mode 100644 index 0000000..f64c4b8 --- /dev/null +++ b/ReactiveResume/README.md @@ -0,0 +1,3 @@ +# ReactiveResume + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/ReactiveResume/status.svg)](https://drone.alexlebens.net/alexlebens/ReactiveResume) \ No newline at end of file diff --git a/ReactiveResume/UptimeKuma/docker-1.json b/ReactiveResume/UptimeKuma/docker-1.json new file mode 100644 index 0000000..595cbdf --- /dev/null +++ b/ReactiveResume/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "ReactiveResume Postgres - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://reactiveresume.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "reactiveresume_postgres", + "docker_host": 1 +} \ No newline at end of file diff --git a/ReactiveResume/UptimeKuma/docker-2.json b/ReactiveResume/UptimeKuma/docker-2.json new file mode 100644 index 0000000..0c3ba7f --- /dev/null +++ b/ReactiveResume/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "ReactiveResume Server - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://reactiveresumesr.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "reactiveresume_server", + "docker_host": 1 +} \ No newline at end of file diff --git a/ReactiveResume/UptimeKuma/docker-3.json b/ReactiveResume/UptimeKuma/docker-3.json new file mode 100644 index 0000000..4dae364 --- /dev/null +++ b/ReactiveResume/UptimeKuma/docker-3.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "ReactiveResume Client - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://reactiveresume.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "", + "docker_host": 1 +} \ No newline at end of file diff --git a/ReactiveResume/UptimeKuma/http-1.json b/ReactiveResume/UptimeKuma/http-1.json new file mode 100644 index 0000000..838274b --- /dev/null +++ b/ReactiveResume/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "ReactiveResume - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://reactiveresume.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/ReactiveResume/docker-compose.yml b/ReactiveResume/docker-compose.yml new file mode 100644 index 0000000..4e131ba --- /dev/null +++ b/ReactiveResume/docker-compose.yml @@ -0,0 +1,81 @@ +services: + postgres: + container_name: reactiveresume_postgres + env_file: + - .db.env + healthcheck: + test: [ "CMD-SHELL", "pg_isready -U postgres" ] + start_period: 15s + interval: 30s + timeout: 30s + retries: 3 + image: postgres:alpine + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + volumes: + - pgdata:/var/lib/postgresql/data + + server: + container_name: reactiveresume_server + depends_on: + - postgres + env_file: + - .env + image: amruthpillai/reactive-resume:server-latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.reactiveresume_server.entrypoints: websecure + traefik.http.routers.reactiveresume_server.rule: Host(`reactiveresumesr.alexlebens.net`) + traefik.http.routers.reactiveresume_server.service: reactiveresume_server + traefik.http.services.reactiveresume_server.loadbalancer.server.port: 3100 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + + client: + container_name: reactiveresume_client + depends_on: + - server + env_file: + - .env + image: amruthpillai/reactive-resume:client-latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.reactiveresume_client.entrypoints: websecure + traefik.http.routers.reactiveresume_client.rule: Host(`reactiveresume.alexlebens.net`) + traefik.http.routers.reactiveresume_client.service: reactiveresume_client + traefik.http.services.reactiveresume_client.loadbalancer.server.port: 3000 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + +networks: + traefik: + name: traefik + external: true + +volumes: + pgdata: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/reactiveresume_pgdata diff --git a/Readarr/.drone.yml b/Readarr/.drone.yml new file mode 100644 index 0000000..a63d779 --- /dev/null +++ b/Readarr/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Readarr + URL: readarrbooks.alexlebens.net readarraudio.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Readarr failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Readarr failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Readarr succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Readarr failed. + when: + status: + - failure diff --git a/Readarr/README.md b/Readarr/README.md new file mode 100644 index 0000000..4265ca6 --- /dev/null +++ b/Readarr/README.md @@ -0,0 +1,3 @@ +# Readarr + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Readarr/status.svg)](https://drone.alexlebens.net/alexlebens/Readarr) \ No newline at end of file diff --git a/Readarr/UptimeKuma/docker-1.json b/Readarr/UptimeKuma/docker-1.json new file mode 100644 index 0000000..7fac405 --- /dev/null +++ b/Readarr/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Readarr Books - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://readarrbooks.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "readarr_books", + "docker_host": 1 +} \ No newline at end of file diff --git a/Readarr/UptimeKuma/docker-2.json b/Readarr/UptimeKuma/docker-2.json new file mode 100644 index 0000000..c95bf34 --- /dev/null +++ b/Readarr/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Readarr Books Exporter - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://readarrbooks.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "readarr_books_exporter", + "docker_host": 1 +} \ No newline at end of file diff --git a/Readarr/UptimeKuma/docker-3.json b/Readarr/UptimeKuma/docker-3.json new file mode 100644 index 0000000..cd9431e --- /dev/null +++ b/Readarr/UptimeKuma/docker-3.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Readarr Audio - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://readarraudio.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "readarr_audio", + "docker_host": 1 +} \ No newline at end of file diff --git a/Readarr/UptimeKuma/docker-4.json b/Readarr/UptimeKuma/docker-4.json new file mode 100644 index 0000000..6c6b460 --- /dev/null +++ b/Readarr/UptimeKuma/docker-4.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Readarr Audio Exporter - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://readarraudio.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "readarr_audio_exporter", + "docker_host": 1 +} \ No newline at end of file diff --git a/Readarr/UptimeKuma/http-1.json b/Readarr/UptimeKuma/http-1.json new file mode 100644 index 0000000..320b399 --- /dev/null +++ b/Readarr/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Readarr Books - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://readarrbooks.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Readarr/UptimeKuma/http-2.json b/Readarr/UptimeKuma/http-2.json new file mode 100644 index 0000000..d46c5a0 --- /dev/null +++ b/Readarr/UptimeKuma/http-2.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Readarr Audio - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://readarraudio.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Readarr/docker-compose.yml b/Readarr/docker-compose.yml new file mode 100644 index 0000000..2de2fa8 --- /dev/null +++ b/Readarr/docker-compose.yml @@ -0,0 +1,127 @@ +services: + readarr_books: + container_name: readarr_books + environment: + - PUID=1000 + - PGID=1000 + - UMASK=002 + - TZ=America/Denver + image: cr.hotio.dev/hotio/readarr:testing + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.readarr_books.entrypoints: websecure + traefik.http.routers.readarr_books.rule: Host(`readarrbooks.alexlebens.net`) + traefik.http.routers.readarr_books.service: readarr_books + traefik.http.routers.readarr_books.middlewares: readarr-space-gray-theme@file + traefik.http.services.readarr_books.loadbalancer.server.port: 8787 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.80 + restart: always + privileged: true + volumes: + - readarr_books:/config + - storage_nfs:/mnt/store + + readarr_audio: + container_name: readarr_audio + environment: + - PUID=1000 + - PGID=1000 + - UMASK=002 + - TZ=America/Denver + image: cr.hotio.dev/hotio/readarr:testing + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.readarr_audio.entrypoints: websecure + traefik.http.routers.readarr_audio.rule: Host(`readarraudio.alexlebens.net`) + traefik.http.routers.readarr_audio.service: readarr_audio + traefik.http.routers.readarr_audio.middlewares: readarr-aquamarine-theme@file + traefik.http.services.readarr_audio.loadbalancer.server.port: 8787 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.82 + restart: always + privileged: true + volumes: + - readarr_audio:/config + - storage_nfs:/mnt/store + + readarr_books_exporter: + command: readarr + container_name: readarr_books_exporter + depends_on: + - readarr_books + environment: + PORT: 9708 + URL: http://readarr_books:8787 + APIKEY: 1c1b9d5e69ec4b2aa1a85301d48d1573 + image: ghcr.io/onedr0p/exportarr:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.81 + restart: always + + readarr_audio_exporter: + command: readarr + container_name: readarr_audio_exporter + depends_on: + - readarr_audio + environment: + PORT: 9708 + URL: http://readarr_audio:8787 + APIKEY: 3be1176f6e6b461fa4f5eab9d39fd29f + image: ghcr.io/onedr0p/exportarr:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.83 + restart: always + +networks: + traefik: + name: traefik + external: true + +volumes: + readarr_books: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/servarr_readarr_books + + readarr_audio: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/servarr_readarr_audio + + storage_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: :/volume2/Storage diff --git a/Rss/.drone.yml b/Rss/.drone.yml new file mode 100644 index 0000000..300f8ae --- /dev/null +++ b/Rss/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Rss + URL: rss.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Rss failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Rss failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Rss succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Rss failed. + when: + status: + - failure diff --git a/Rss/Files/rss_storage/feeds.txt b/Rss/Files/rss_storage/feeds.txt new file mode 100644 index 0000000..ec726f2 --- /dev/null +++ b/Rss/Files/rss_storage/feeds.txt @@ -0,0 +1,24 @@ +https://noted.lol/rss Noted⭐[#9233B1] #Self-Hosting +https://www.linuxserver.io/blog.rss Linux-Server[#0078b9] #Self-Hosting +https://blog.networkprofile.org/rss Network-Profile[#D48D27] #Self-Hosting + +https://tftcentral.co.uk/feed TFT #Tech + +https://www.axios.com/feeds/feed.rss Axios #News #World + +https://www.cpr.org/feed CPR #News #Local +https://www.mprnews.org/feed/homepage MPR #News #Local + +https://feeds.washingtonpost.com/rss/world?itid=lk_inline_manual_36 WaPo #News #World +https://feeds.washingtonpost.com/rss/national?itid=lk_inline_manual_32 WaPo #News #National +https://feeds.washingtonpost.com/rss/business/technology?itid=lk_inline_manual_31 WaPo #News #Tech +https://feeds.washingtonpost.com/rss/politics?itid=lk_inline_manual_2 WaPo #News #Politics + +https://rss.nytimes.com/services/xml/rss/nyt/World.xml NYT #News #World +https://rss.nytimes.com/services/xml/rss/nyt/US.xml NYT #News #National +https://rss.nytimes.com/services/xml/rss/nyt/Politics.xml NYT #News #Politics +https://rss.nytimes.com/services/xml/rss/nyt/Technology.xml NYT #News #Tech +https://rss.nytimes.com/services/xml/rss/nyt/Science.xml NYT #News #Science + +https://breakingdefense.com/full-rss-feed/?v=2 Breaking-Defense #Defense +https://www.thedrive.com/the-war-zone/feed The-War-Zone #Defense \ No newline at end of file diff --git a/Rss/README.md b/Rss/README.md new file mode 100644 index 0000000..f304965 --- /dev/null +++ b/Rss/README.md @@ -0,0 +1,3 @@ +# Rss + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Rss/status.svg)](https://drone.alexlebens.net/alexlebens/Rss) \ No newline at end of file diff --git a/Rss/UptimeKuma/docker-1.json b/Rss/UptimeKuma/docker-1.json new file mode 100644 index 0000000..e9f6699 --- /dev/null +++ b/Rss/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Rss - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://rss.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "rss", + "docker_host": 1 +} \ No newline at end of file diff --git a/Rss/UptimeKuma/http-1.json b/Rss/UptimeKuma/http-1.json new file mode 100644 index 0000000..207183c --- /dev/null +++ b/Rss/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Rss - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://rss.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Rss/docker-compose.yml b/Rss/docker-compose.yml new file mode 100644 index 0000000..6fb07c2 --- /dev/null +++ b/Rss/docker-compose.yml @@ -0,0 +1,36 @@ +services: + rss: + container_name: rss + environment: + - APP_NAME=RSS + image: ghcr.io/ssddanbrown/rss:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.rss.entrypoints: websecure + traefik.http.routers.rss.rule: Host(`rss.alexlebens.net`) + traefik.http.routers.rss.service: rss + traefik.http.services.rss.loadbalancer.server.port: 80 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + volumes: + - storage:/app/storage + +networks: + traefik: + name: traefik + external: true + +volumes: + storage: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/rss_storage diff --git a/Sonarr/.drone.yml b/Sonarr/.drone.yml new file mode 100644 index 0000000..6d56bc2 --- /dev/null +++ b/Sonarr/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Sonarr + URL: sonarr.alexlebens.net sonarranime.alexlebens.net sonarrdocumentaries.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Sonarr failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Sonarr failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Sonarr succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Sonarr failed. + when: + status: + - failure diff --git a/Sonarr/README.md b/Sonarr/README.md new file mode 100644 index 0000000..16239e8 --- /dev/null +++ b/Sonarr/README.md @@ -0,0 +1,3 @@ +# Sonarr + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Sonarr/status.svg)](https://drone.alexlebens.net/alexlebens/Sonarr) \ No newline at end of file diff --git a/Sonarr/UptimeKuma/docker-1.json b/Sonarr/UptimeKuma/docker-1.json new file mode 100644 index 0000000..2ffbbb2 --- /dev/null +++ b/Sonarr/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Sonarr - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://sonarr.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "sonarr", + "docker_host": 1 +} \ No newline at end of file diff --git a/Sonarr/UptimeKuma/docker-2.json b/Sonarr/UptimeKuma/docker-2.json new file mode 100644 index 0000000..dab0f29 --- /dev/null +++ b/Sonarr/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Sonarr Anime - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://sonarranime.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "sonarr_anime", + "docker_host": 1 +} \ No newline at end of file diff --git a/Sonarr/UptimeKuma/docker-3.json b/Sonarr/UptimeKuma/docker-3.json new file mode 100644 index 0000000..8ddb250 --- /dev/null +++ b/Sonarr/UptimeKuma/docker-3.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Sonarr Exporter - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://sonarr.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "sonarr_exporter", + "docker_host": 1 +} \ No newline at end of file diff --git a/Sonarr/UptimeKuma/docker-4.json b/Sonarr/UptimeKuma/docker-4.json new file mode 100644 index 0000000..c61a907 --- /dev/null +++ b/Sonarr/UptimeKuma/docker-4.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Sonarr Anime Exporter - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://sonarranime.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "sonarr_anime_exporter", + "docker_host": 1 +} \ No newline at end of file diff --git a/Sonarr/UptimeKuma/docker-5.json b/Sonarr/UptimeKuma/docker-5.json new file mode 100644 index 0000000..189116f --- /dev/null +++ b/Sonarr/UptimeKuma/docker-5.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Sonarr Documentaries - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://sonarrdocumentaries.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "sonarr_documentaries", + "docker_host": 1 +} \ No newline at end of file diff --git a/Sonarr/UptimeKuma/docker-6.json b/Sonarr/UptimeKuma/docker-6.json new file mode 100644 index 0000000..73d8d81 --- /dev/null +++ b/Sonarr/UptimeKuma/docker-6.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Sonarr Documentaries Exporter - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://sonarrdocumentaries.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "sonarr_documentaries_exporter", + "docker_host": 1 +} \ No newline at end of file diff --git a/Sonarr/UptimeKuma/http-1.json b/Sonarr/UptimeKuma/http-1.json new file mode 100644 index 0000000..ce47e0a --- /dev/null +++ b/Sonarr/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Sonarr - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://sonarr.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Sonarr/UptimeKuma/http-2.json b/Sonarr/UptimeKuma/http-2.json new file mode 100644 index 0000000..9a0ce29 --- /dev/null +++ b/Sonarr/UptimeKuma/http-2.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Sonarr Anime - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://sonarranime.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Sonarr/UptimeKuma/http-3.json b/Sonarr/UptimeKuma/http-3.json new file mode 100644 index 0000000..32c7b42 --- /dev/null +++ b/Sonarr/UptimeKuma/http-3.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Sonarr Documentaries - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://sonarrdocumentaries.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Sonarr/docker-compose.yml b/Sonarr/docker-compose.yml new file mode 100644 index 0000000..95c41e5 --- /dev/null +++ b/Sonarr/docker-compose.yml @@ -0,0 +1,194 @@ +services: + sonarr: + container_name: sonarr + environment: + - PUID=1000 + - PGID=1000 + - UMASK=022 + - TZ=America/Denver + image: hotio/sonarr:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.sonarr.entrypoints: websecure + traefik.http.routers.sonarr.rule: Host(`sonarr.alexlebens.net`) + traefik.http.routers.sonarr.service: sonarr + traefik.http.routers.sonarr.middlewares: sonarr-theme@file + traefik.http.services.sonarr.loadbalancer.server.port: 8989 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.31 + restart: always + privileged: true + volumes: + - sonarr:/config + - storage_nfs:/mnt/store + + sonarr_anime: + container_name: sonarr_anime + environment: + - PUID=1000 + - PGID=1000 + - UMASK=022 + - TZ=America/Denver + image: hotio/sonarr:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.sonarr_anime.entrypoints: websecure + traefik.http.routers.sonarr_anime.rule: Host(`sonarranime.alexlebens.net`) + traefik.http.routers.sonarr_anime.service: sonarr_anime + traefik.http.routers.sonarr_anime.middlewares: sonarr-theme@file + traefik.http.services.sonarr_anime.loadbalancer.server.port: 8989 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.70 + restart: always + privileged: true + volumes: + - sonarr_anime:/config + - storage_nfs:/mnt/store + + sonarr_documentaries: + container_name: sonarr_documentaries + environment: + - PUID=1000 + - PGID=1000 + - UMASK=022 + - TZ=America/Denver + image: hotio/sonarr:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.sonarr_documentaries.entrypoints: websecure + traefik.http.routers.sonarr_documentaries.rule: Host(`sonarrdocumentaries.alexlebens.net`) + traefik.http.routers.sonarr_documentaries.service: sonarr_documentaries + traefik.http.routers.sonarr_documentaries.middlewares: sonarr-theme@file + traefik.http.services.sonarr_documentaries.loadbalancer.server.port: 8989 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.72 + restart: always + privileged: true + volumes: + - sonarr_documentaries:/config + - storage_nfs:/mnt/store + + sonarr_exporter: + command: sonarr + container_name: sonarr_exporter + depends_on: + - sonarr + environment: + PORT: 9707 + URL: http://sonarr:8989 + APIKEY: 7f0dfeea4b9f410d96b5ffa2f809d1e8 + ENABLE_EPISODE_QUALITY_METRICS: false + image: ghcr.io/onedr0p/exportarr:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.37 + restart: always + + sonarr_anime_exporter: + command: sonarr + container_name: sonarr_anime_exporter + depends_on: + - sonarr_anime + environment: + PORT: 9707 + URL: http://sonarr_anime:8989 + APIKEY: a2f10e70559c4ee3b8ff1d6cdc5a41f1 + ENABLE_EPISODE_QUALITY_METRICS: false + image: ghcr.io/onedr0p/exportarr:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.71 + restart: always + + sonarr_documentaries_exporter: + command: sonarr + container_name: sonarr_documentaries_exporter + depends_on: + - sonarr_documentaries + environment: + PORT: 9707 + URL: http://sonarr_documentaries:8989 + APIKEY: 3ed988c3731b45ad8124b7d55b620d6b + ENABLE_EPISODE_QUALITY_METRICS: false + image: ghcr.io/onedr0p/exportarr:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.73 + restart: always + +networks: + traefik: + name: traefik + external: true + +volumes: + sonarr: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/servarr_sonarr + + sonarr_anime: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/servarr_sonarr_anime + + sonarr_documentaries: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/servarr_sonarr_documentaries + +# storage: +# driver: local +# driver_opts: +# type: cifs +# o: username=aurailious,password=24wrsfxv@$$WRSFXV,file_mode=0777,dir_mode=0777 +# device: "//192.168.1.194/Storage" + + storage_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: :/volume2/Storage diff --git a/SpeedTest/.drone.yml b/SpeedTest/.drone.yml new file mode 100644 index 0000000..d79a55e --- /dev/null +++ b/SpeedTest/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: SpeedTest + URL: speedtest.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for SpeedTest failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for SpeedTest failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for SpeedTest succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for SpeedTest failed. + when: + status: + - failure diff --git a/SpeedTest/README.md b/SpeedTest/README.md new file mode 100644 index 0000000..d52d19d --- /dev/null +++ b/SpeedTest/README.md @@ -0,0 +1,3 @@ +# SpeedTest + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/SpeedTest/status.svg)](https://drone.alexlebens.net/alexlebens/SpeedTest) \ No newline at end of file diff --git a/SpeedTest/UptimeKuma/docker-1.json b/SpeedTest/UptimeKuma/docker-1.json new file mode 100644 index 0000000..39963a8 --- /dev/null +++ b/SpeedTest/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "SpeedTest - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://speedtest.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "speedtest", + "docker_host": 1 +} \ No newline at end of file diff --git a/SpeedTest/UptimeKuma/http-1.json b/SpeedTest/UptimeKuma/http-1.json new file mode 100644 index 0000000..6c87b41 --- /dev/null +++ b/SpeedTest/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "SpeedTest - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "http://speedtest:9798/metrics", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/SpeedTest/docker-compose.yml b/SpeedTest/docker-compose.yml new file mode 100644 index 0000000..e74029d --- /dev/null +++ b/SpeedTest/docker-compose.yml @@ -0,0 +1,22 @@ +services: + speedtest: + container_name: speedtest + dns: + - 192.168.1.15 + - 1.1.1.1 + environment: + SPEEDTEST_PORT: 9798 + image: miguelndecarvalho/speedtest-exporter + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + +networks: + traefik: + name: traefik + external: true diff --git a/StepCA/.drone.yml b/StepCA/.drone.yml new file mode 100644 index 0000000..2bdfc07 --- /dev/null +++ b/StepCA/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: StepCA + URL: stepca.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Template failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Template failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Template succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Template failed. + when: + status: + - failure diff --git a/StepCA/.env b/StepCA/.env new file mode 100644 index 0000000..7bfd366 --- /dev/null +++ b/StepCA/.env @@ -0,0 +1,6 @@ +DOCKER_STEPCA_INIT_NAME=Smallstep +DOCKER_STEPCA_INIT_DNS_NAMES=ps03fd.alexlebens.net,ps03fd,pd04wd +DOCKER_STEPCA_INIT_REMOTE_MANAGEMENT=true +DOCKER_STEPCA_INIT_PROVISIONER_NAME=alexlebens +DOCKER_STEPCA_INIT_SSH=true +DOCKER_STEPCA_INIT_ACME=true \ No newline at end of file diff --git a/StepCA/Files/step_server/config/ca.json b/StepCA/Files/step_server/config/ca.json new file mode 100644 index 0000000..69e85a5 --- /dev/null +++ b/StepCA/Files/step_server/config/ca.json @@ -0,0 +1,89 @@ +{ + "root": "/home/step/certs/root_ca.crt", + "federatedRoots": null, + "crt": "/home/step/certs/intermediate_ca.crt", + "key": "/home/step/secrets/intermediate_ca_key", + "address": ":9040", + "insecureAddress": "", + "dnsNames": [ + "stepca.alexlebens.net" + ], + "ssh": { + "hostKey": "/home/step/secrets/ssh_host_ca_key", + "userKey": "/home/step/secrets/ssh_user_ca_key" + }, + "logger": { + "format": "text" + }, + "db": { + "type": "badgerv2", + "dataSource": "/home/step/db", + "badgerFileLoadingMode": "" + }, + "authority": { + "enableAdmin": true + }, + "tls": { + "cipherSuites": [ + "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", + "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" + ], + "minVersion": 1.2, + "maxVersion": 1.3, + "renegotiation": false + }, + "templates": { + "ssh": { + "user": [ + { + "name": "config.tpl", + "type": "snippet", + "template": "templates/ssh/config.tpl", + "path": "~/.ssh/config", + "comment": "#" + }, + { + "name": "step_includes.tpl", + "type": "prepend-line", + "template": "templates/ssh/step_includes.tpl", + "path": "${STEPPATH}/ssh/includes", + "comment": "#" + }, + { + "name": "step_config.tpl", + "type": "file", + "template": "templates/ssh/step_config.tpl", + "path": "ssh/config", + "comment": "#" + }, + { + "name": "known_hosts.tpl", + "type": "file", + "template": "templates/ssh/known_hosts.tpl", + "path": "ssh/known_hosts", + "comment": "#" + } + ], + "host": [ + { + "name": "sshd_config.tpl", + "type": "snippet", + "template": "templates/ssh/sshd_config.tpl", + "path": "/etc/ssh/sshd_config", + "comment": "#", + "requires": [ + "Certificate", + "Key" + ] + }, + { + "name": "ca.tpl", + "type": "snippet", + "template": "templates/ssh/ca.tpl", + "path": "/etc/ssh/ca.pub", + "comment": "#" + } + ] + } + } +} \ No newline at end of file diff --git a/StepCA/Files/step_server/config/defaults.json b/StepCA/Files/step_server/config/defaults.json new file mode 100644 index 0000000..b99f012 --- /dev/null +++ b/StepCA/Files/step_server/config/defaults.json @@ -0,0 +1,6 @@ +{ + "ca-url": "https://stepca.alexlebens.net:9040", + "ca-config": "/home/step/config/ca.json", + "fingerprint": "750cd0a82c60a2d30e443a7e20e6f3064a17dbf619f750d8eba690c4304608c4", + "root": "/home/step/certs/root_ca.crt" +} \ No newline at end of file diff --git a/StepCA/README.md b/StepCA/README.md new file mode 100644 index 0000000..3996382 --- /dev/null +++ b/StepCA/README.md @@ -0,0 +1,3 @@ +# StepCA + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/StepCA/status.svg)](https://drone.alexlebens.net/alexlebens/StepCA) \ No newline at end of file diff --git a/StepCA/UptimeKuma/docker-1.json b/StepCA/UptimeKuma/docker-1.json new file mode 100644 index 0000000..d0884d5 --- /dev/null +++ b/StepCA/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "StepCA - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://stepca.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "stepca_server", + "docker_host": 1 +} \ No newline at end of file diff --git a/StepCA/UptimeKuma/http-1.json b/StepCA/UptimeKuma/http-1.json new file mode 100644 index 0000000..ba7d51c --- /dev/null +++ b/StepCA/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "StepCA - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://stepca.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/StepCA/docker-compose.yml b/StepCA/docker-compose.yml new file mode 100644 index 0000000..3d5e0c4 --- /dev/null +++ b/StepCA/docker-compose.yml @@ -0,0 +1,37 @@ +services: + stepca: + container_name: stepca_server + env_file: + - .env + healthcheck: + test: curl -k --fail https://localhost:9040/health || exit 1 + interval: 60s + retries: 5 + start_period: 20s + timeout: 10s + image: smallstep/step-ca:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + ports: + - 9040:9040 + restart: always + volumes: + - step:/home/step + +networks: + traefik: + name: traefik + external: true + +volumes: + step: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/step_server diff --git a/Tdarr/.drone.yml b/Tdarr/.drone.yml new file mode 100644 index 0000000..d6e4960 --- /dev/null +++ b/Tdarr/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Tdarr + URL: tdarr.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Tdarr failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Tdarr failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Tdarr succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Tdarr failed. + when: + status: + - failure diff --git a/Tdarr/.env b/Tdarr/.env new file mode 100644 index 0000000..487859f --- /dev/null +++ b/Tdarr/.env @@ -0,0 +1,7 @@ +TZ=America/Denver +PUID=1000 +PGID=1000 +UMASK_SET=2 +serverIP=172.20.0.2 +serverPort=8266 +webUIPort=8265 \ No newline at end of file diff --git a/Tdarr/.node.a.env b/Tdarr/.node.a.env new file mode 100644 index 0000000..fbbf29e --- /dev/null +++ b/Tdarr/.node.a.env @@ -0,0 +1,3 @@ +nodeID=NodeA +nodeIP=172.20.0.3 +nodePort=8267 \ No newline at end of file diff --git a/Tdarr/Files/tdarr_config/Tdarr_Node_Config.json b/Tdarr/Files/tdarr_config/Tdarr_Node_Config.json new file mode 100644 index 0000000..6db7856 --- /dev/null +++ b/Tdarr/Files/tdarr_config/Tdarr_Node_Config.json @@ -0,0 +1,18 @@ +{ + "nodeID": "NodeA", + "serverIP": "172.20.0.2", + "serverPort": "8266", + "handbrakePath": "", + "ffmpegPath": "", + "mkvpropeditPath": "", + "pathTranslators": [ + { + "server": "", + "node": "" + } + ], + "platform_arch": "linux_x64_docker_true", + "logLevel": "INFO", + "nodeIP": "172.20.0.3", + "nodePort": "8267" +} \ No newline at end of file diff --git a/Tdarr/Files/tdarr_config/Tdarr_Server_Config.json b/Tdarr/Files/tdarr_config/Tdarr_Server_Config.json new file mode 100644 index 0000000..06b34b9 --- /dev/null +++ b/Tdarr/Files/tdarr_config/Tdarr_Server_Config.json @@ -0,0 +1,8 @@ +{ + "serverPort": "8266", + "webUIPort": "8265", + "serverIP": "172.20.0.2", + "handbrakePath": "", + "ffmpegPath": "", + "logLevel": "INFO" +} \ No newline at end of file diff --git a/Tdarr/README.md b/Tdarr/README.md new file mode 100644 index 0000000..4bb152f --- /dev/null +++ b/Tdarr/README.md @@ -0,0 +1,3 @@ +# Tdarr + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Tdarr/status.svg)](https://drone.alexlebens.net/alexlebens/Tdarr) \ No newline at end of file diff --git a/Tdarr/UptimeKuma/docker-1.json b/Tdarr/UptimeKuma/docker-1.json new file mode 100644 index 0000000..e436579 --- /dev/null +++ b/Tdarr/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Tdarr - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://tdarr.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "tdarr", + "docker_host": 1 +} \ No newline at end of file diff --git a/Tdarr/UptimeKuma/docker-2.json b/Tdarr/UptimeKuma/docker-2.json new file mode 100644 index 0000000..de36a91 --- /dev/null +++ b/Tdarr/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Tdarr Node A - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://tdarr.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "tdarr_node_a", + "docker_host": 1 +} \ No newline at end of file diff --git a/Tdarr/UptimeKuma/http-1.json b/Tdarr/UptimeKuma/http-1.json new file mode 100644 index 0000000..44f5efc --- /dev/null +++ b/Tdarr/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Tdarr - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://tdarr.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Tdarr/docker-compose.yml b/Tdarr/docker-compose.yml new file mode 100644 index 0000000..fc8c264 --- /dev/null +++ b/Tdarr/docker-compose.yml @@ -0,0 +1,115 @@ +services: + tdarr: + container_name: tdarr + env_file: + - .env + image: haveagitgat/tdarr:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.tdarr.entrypoints: websecure + traefik.http.routers.tdarr.rule: Host(`tdarr.alexlebens.net`) + traefik.http.routers.tdarr.service: tdarr + traefik.http.routers.tdarr.middlewares: authentik@file + traefik.http.services.tdarr.loadbalancer.server.port: 8265 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + tdarr: + ipv4_address: 172.20.0.2 + traefik: null + privileged: true + restart: always + volumes: + - server:/app/server + - logs:/app/logs + - media:/media + - cache:/temp + - storage_nfs:/mnt/store + - config:/app/configs + + tdarr_node: + container_name: tdarr_node_a + cpus: 6 + depends_on: + - tdarr + devices: + - /dev/dri:/dev/dri + env_file: + - .env + - .node.a.env + image: haveagitgat/tdarr_node:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + tdarr: + ipv4_address: 172.20.0.3 + privileged: true + restart: always + volumes: + - logs:/app/logs + - media:/media + - cache:/temp + - storage_nfs:/mnt/store + - config:/app/configs + +networks: + traefik: + name: traefik + external: true + + tdarr: + name: tdarr + external: false + ipam: + config: + - subnet: 172.20.0.0/16 + +volumes: + server: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/tdarr_server + + logs: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/tdarr_logs + + media: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/tdarr_media + + cache: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/tdarr_cache + + config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/tdarr_config + + storage_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: :/volume2/Storage diff --git a/Template/.drone.yml b/Template/.drone.yml new file mode 100644 index 0000000..a0402f6 --- /dev/null +++ b/Template/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Template + URL: template.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Template failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Template failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Template succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Template failed. + when: + status: + - failure diff --git a/Template/.env b/Template/.env new file mode 100644 index 0000000..e69de29 diff --git a/Template/README.md b/Template/README.md new file mode 100644 index 0000000..3eabfd4 --- /dev/null +++ b/Template/README.md @@ -0,0 +1,3 @@ +# + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens//status.svg)](https://drone.alexlebens.net/alexlebens/) \ No newline at end of file diff --git a/Template/UptimeKuma/docker-1.json b/Template/UptimeKuma/docker-1.json new file mode 100644 index 0000000..797c109 --- /dev/null +++ b/Template/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": " - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "", + "docker_host": 1 +} \ No newline at end of file diff --git a/Template/UptimeKuma/http-1.json b/Template/UptimeKuma/http-1.json new file mode 100644 index 0000000..591ab1e --- /dev/null +++ b/Template/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": " - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Template/docker-compose.yml b/Template/docker-compose.yml new file mode 100644 index 0000000..e69de29 diff --git a/ThemePark/.drone.yml b/ThemePark/.drone.yml new file mode 100644 index 0000000..85f2f0e --- /dev/null +++ b/ThemePark/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: ThemePark + URL: themepark.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for ThemePark failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for ThemePark failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for ThemePark succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for ThemePark failed. + when: + status: + - failure diff --git a/ThemePark/README.md b/ThemePark/README.md new file mode 100644 index 0000000..a240933 --- /dev/null +++ b/ThemePark/README.md @@ -0,0 +1,3 @@ +# ThemePark + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/ThemePark/status.svg)](https://drone.alexlebens.net/alexlebens/ThemePark) \ No newline at end of file diff --git a/ThemePark/UptimeKuma/docker-1.json b/ThemePark/UptimeKuma/docker-1.json new file mode 100644 index 0000000..55569c2 --- /dev/null +++ b/ThemePark/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "ThemePark - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://themepark.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "theme_park", + "docker_host": 1 +} \ No newline at end of file diff --git a/ThemePark/UptimeKuma/http-1.json b/ThemePark/UptimeKuma/http-1.json new file mode 100644 index 0000000..6816ad6 --- /dev/null +++ b/ThemePark/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "ThemePark - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://themepark.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/ThemePark/docker-compose.yml b/ThemePark/docker-compose.yml new file mode 100644 index 0000000..b3bded2 --- /dev/null +++ b/ThemePark/docker-compose.yml @@ -0,0 +1,40 @@ +services: + theme_park: + container_name: theme_park + environment: + - PUID=1000 + - PGID=1000 + - TZ=America/Denver + - TP_DOMAIN=themepark.alexlebens.net + - TP_SCHEME=http + image: ghcr.io/gilbn/theme.park:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.theme_park.entrypoints: websecure + traefik.http.routers.theme_park.rule: Host(`themepark.alexlebens.net`) + traefik.http.routers.theme_park.service: theme_park + traefik.http.services.theme_park.loadbalancer.server.port: 80 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + volumes: + - config:/config + +networks: + traefik: + name: traefik + external: true + +volumes: + config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/themepark_config \ No newline at end of file diff --git a/Traefik/.drone.yml b/Traefik/.drone.yml new file mode 100644 index 0000000..a3892b2 --- /dev/null +++ b/Traefik/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Traefik + URL: traefik.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Traefik failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Traefik failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Traefik succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Traefik failed. + when: + status: + - failure diff --git a/Traefik/Files/traefik_config/acme/acme.json b/Traefik/Files/traefik_config/acme/acme.json new file mode 100644 index 0000000..c71ed01 --- /dev/null +++ b/Traefik/Files/traefik_config/acme/acme.json @@ -0,0 +1,31 @@ +{ + "le-cloudflare": { + "Account": { + "Email": "alexanderlebens@gmail.com", + "Registration": { + "body": { + "status": "valid", + "contact": [ + "mailto:alexanderlebens@gmail.com" + ] + }, + "uri": "https://acme-v02.api.letsencrypt.org/acme/acct/456381710" + }, + "PrivateKey": "MIIJKQIBAAKCAgEA7ZHNRIn8c+kozgTe03w+e6hYckmptv4+WS1e/XzBdVDh0ycz1zyLJQZd6daW+7f3PrtIguklY5VwnvoOs8kTwDNjkVmP6ty440BlgC1eZtOBlk9GbV24dMfEIcSUYVLJ2xWqdpuIL0k7wGiaNb423/L2NIB+mnijuY4hHsglIXehKnXyDI7paNmHj/0nYywN7BRNWrx+Z/fuiUmaUTWa/0i8WeJJ2NaRBOPUxj7690cHvmqxxBZKp0Fz/rJe22pm94gEOyd6D7WzXdLVHAmRf8wVeEkadILbfQKDSw92et87qgAQUVROB0RWHM8WvraFy5U+uzbigG91e4dvuJBV74w2KWpLRX9BYF5UjXQslGxNIYLti/FPU95sfMTG/LbFQT48uBFUPQ4bK52Mr8pPuPm+RLpOXIa72CT97HmiGaujtCcrfqzsxVUU6thnkizpz3K69sKeKf7x6NxoV+m0ak7yeaQgc8C2KqucGc7rUdM6zEBEYmcP6s7U7RzTkb8AKXC1waNuE59QkTssLecmYhNbE4aiLKQJgBHRfrEhI9UMVLCsFZx1/pUJ10Sd1XetnsdtP4sPQut7fvRyczc3hL8POkhoahUN3EI1oPrVp0fXealvz9WHUuLGrGR6OpphPF/6e+f2yRNoOffr0ieQb2Jbst+Dx9zi1eCKP55+0GsCAwEAAQKCAgBYzt9QFtETt350fWea4WAuM8FUf+r8qFBAX/CZi/B53ZF9sLL1bAGMBrRGvNxWHvBDOBmkLmm2r1+ZXlrupGVIvS0kYbmmD3riIOmQn+UhRUG1Ic9vBND2ftL32JerRhqFVrURf5TKMHMwuymim4fB8f5NpBcvwZdavyHsct9GgoTx7YNdZHMmqeK+VeFKdmaB8Rj1qW8LiKhYE/anEwXtFpCqfSgj8hnmHREmRtbkZ14itZncdoTTv2kQNje1iDITqHoEbv53LvJtSWo2//CvOGhyPcmw8lYAhlb0UUR2LEsOgtWWwZAlsUsLm/KhunOLpi/8JklHv+LIGdoOwY4NtRWSYaz1uvNnlmvij9Ociw8nnCAiQeS4IsTO4Yd0hl4JlHPlD385s2EE4Ws93g86e6tSqW4tLvygkXsWQX2XzP5wbHSpxJHIxfDu2FqS2qLKlPf1kx7kOgfvbXNSzMKANHnlSPKxp2FwdsTQYY2tdDqjf1jEc6dFoO2l+PbU54Wsjy0yhXjZJRRg+gb2Ak7pBos3gr4mdzReMoV8tvmCYA9aOtDmKs/WpiN2JybiFtlzjG3oV4RwKuxeCg1KMLfeFSYn0DkL6Jxjxqr+P0YYzhPjq1yfEgsao5IimmoNvXTb+kwW5INSm0qLlr5Bs0tn/Wm4JcyVDMORIwIIFQ3YAQKCAQEA9Av+DelWi6M0W5mhKrrcW8o57PVWaE37rH96xzfOE8OL6aHBFKSEk+DUJHJ8CGtqR32Xun4eZvvFAy3D+LKcXBCPjgpyMLGlqHmAv/McPYGpD0QFEIJm0OuFJbD2kLqbrrGkgjPmIxTRHNBuH36L1jnZ30mPik87d3khIDESbT2WD5HvRUZxQJJ2Vy9D5cs274rb2KaK4yG8FAi5gUtfl7/E38II1C45rGbFvScYVYB0hOwrw1AyrprniJPgL7NzeJ9gwVUYyeST1TqwU3Y3mhh7O216J1J0v+4YOKJEFPo6kHeoCCJdHW+bMHfdzl4jbHSlNNs5O/taI78bXMc0awKCAQEA+TSX0AsgPg7aSaU1lQCG9Kq1upDpqWi7CpLtVsMq2x02Mqkjp3fwiusklx9JvWMa87BYWejwS45hy0kCI0odOPBY6LNOiJY6gDCSTUW1Nu/NR0w9/xhEyNokVYTAEhAgn2qPPPJIm2n9kcqqes/ABc0W2O+qczdwgcJmjE5Bby32oSUkO11pMRK+oOdF4lUqxPjVcfcQMzaPc/BhqXFgHiRMFM1968w97xqgpfRuo+526EzX09wIUDlZYPz4GI7qgfb1/5GrnzE4bVPVg48gYwPeWPCpBJxfVgI3xZmJXylnPcht3GZuFgnvp41yR2ZnqfA7iLtmJNep+wSaGq3UAQKCAQEA86ypvgA3TvPlSnTqTH0Jm4kfL2+EGF+NJJ6g3BvnYyqEIAJHhLIEQpdhmwbIu6ttEfbgMfDNsGxBObxPiZnlr7NFc0EQ5XfrfX3cRUyb7Pny8PAs0mAyAva3GnxIpRf+bH6pUOw7JNobNdcTrdSwEXXwChgr/6C/Mrq6jacRzAuLMv621wfP+vaCvOjPtbmjn6iZfQhFcyZy4doYR3YX+7AaBoV6RUnmgjKXzBcmH/FD5pjd1YXVJSw8dM2aMmbOrCkO9dtfBe96gJS6DIvkVrONEDhumKanNiCpBJtYuU1kfm1LVNvi94pBfTKiQPUUD62ka1NdIXwGc9zUmF27AwKCAQEAttn/NnijbMWLJ5RgT3c2jtmfREhGGras3yJVoV7M2D+D4AI5Fg0sY1IL5BLiEWNhiELxYO9JObc8TGPCfNBJxtib9Ap06kWIoTyCbM5kG+4yakkoCD/vYIynMlSYdeh9d1tBxI9l9Rr9IndZRYmgNOF6DS01nRqlo6BXjEVzP7ezCiRthF2S7J37X6ayoVKqciK+wsNskJdNBN3xWtnEk/lAFdd9uIGBRCr+iyZh9Ejp2KNhjaMaOnsJ+N9Ezwg2S6xAbgidq836wEVOGhzvv5c8E3hqG+b9EOfJsmRo5nlDtpKVAa3qwqMBxKhFnNwn3gpWNIqEdS4FHBkRVdgMAQKCAQBdcAZdfU1ruhA3w/a3dJzp36uXK8WUEmChR8ph09y9dWrJLXjrSYtLZ2gN1KJQhC2V+T4eo7GudYwNrfVp0SSbuCsDX2nq5N94Vg4tFogyiGqQOXar2RNW0OcMpjoSzB/KpmTDkKjiEDEEmNY1U34cWRE/VA3gG+25GUWTNchy2NfAWWDvWiE/cWxnjYV5VknVuZ7WNBZZd2ifX5qbd/7BLNsWNwr3U0+bvKYM0JCyENzmWcnUyM8tg5apKSQYFyb6B2yEdeH9niMmkx5FMSBbxPehlja5FLr7EEpI2jJtaeTm4lfWUn1TVbK+n23JrtbvLDrI7J78oZxYbisgmhps", + "KeyType": "4096" + }, + "Certificates": [ + { + "domain": { + "main": "*.alexlebens.net", + "sans": [ + "alexlebens.net" + ] + }, + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUdORENDQlJ5Z0F3SUJBZ0lTQkV2THlTc3h5c3BtZmtPdVhOUTJ4MXlzTUEwR0NTcUdTSWIzRFFFQkN3VUEKTURJeEN6QUpCZ05WQkFZVEFsVlRNUll3RkFZRFZRUUtFdzFNWlhRbmN5QkZibU55ZVhCME1Rc3dDUVlEVlFRRApFd0pTTXpBZUZ3MHlNakV4TVRReU1UQXpNakphRncweU16QXlNVEl5TVRBek1qRmFNQnN4R1RBWEJnTlZCQU1NCkVDb3VZV3hsZUd4bFltVnVjeTV1WlhRd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUMKQVFDbFZueGRYRWtWOE5Ub2tVRW5HQ0h2aEFXKzd0T0x6aFNZUkJCL1JGaGJZekJaQ3pnZGMzTTNNeXlpcEN3cQpuZTdKSnVvOFZGc21FQ0R0THV6ajhhalJtNnBEZ2dtbG4yV3h0d08xaGloLy9xdDNMb1QzaFA2b3M5RXF4elZsCkIrYVJrdGZxUkZ6SnZHcENXNFU2S0hjeVRQT3BJSWtRVE9zTlZrRlg3RUVQRi9PMU1pcU5xZzMyRENXSkY3a3kKeGRCYy9XSnNHSmp1ckQ4Z3kxUEdtdDM2ZjlzTzMzcmk5ai9sUnp1ZnhIN1g2RnVxQTBEV1cwWm1Zb2UvaU1MYgpFRXNQbTFaRFp0ZDZuUUxqeURnbzhGOWR2RmRISDlrdk1nZ3pZOHpjVnlnTTB4RnAwcm9QRERKOC9JQUJuT1J0Cnp6UUdTOGlOTXBaMjVtOWtBOGxlYWlwOHBRa1FMWXhHcGpVRDl6aXVjcERJWnBpc3habndHU3RpcWlFeUxLSU4KL202VTlpQm5tNGNQQ082dTQ4dkpwVEd4K2ErVHhaTDgwdVl1SGxCcXhSc2dGTURvUWZXS0tjODZBcm41Z1lCbwpvTEplR2RVdEhVVzRZeW1hdFBjcFd6cTNMcmpBYjVFYThPMjFSUHJmMTBYcXk0UjdUUzRsSkRTdDY2bG9STFliCjhrdTloZ1NCYXhvSDdXcFNmcjd4UU1tcFhmRG9naUpHRWxTQVBmRE9KS2J3bzBFa3dpUUlva2RTWHh1K20yL3QKM2RpT2w1eEk0ekUzOVdObGhpaFlGM2JXdXdiQUJzMEcwRGlHYkRmd2t5SXJIL3RuM0JOdGM1MUcrSjc0cGV1VAp2TDZldEVSY3YzRHlhOUlEY25RTEN0Rzh4RzVNbGRYSGxKNTBQVlNHMnR2RkVRSURBUUFCbzRJQ1dUQ0NBbFV3CkRnWURWUjBQQVFIL0JBUURBZ1dnTUIwR0ExVWRKUVFXTUJRR0NDc0dBUVVGQndNQkJnZ3JCZ0VGQlFjREFqQU0KQmdOVkhSTUJBZjhFQWpBQU1CMEdBMVVkRGdRV0JCU3E4L0NoOU5UZjcxSmxoR09xY2d2dWsvZnAvakFmQmdOVgpIU01FR0RBV2dCUVVMck1YdDFoV3k2NVFDVURtSDYrZGl4VEN4akJWQmdnckJnRUZCUWNCQVFSSk1FY3dJUVlJCkt3WUJCUVVITUFHR0ZXaDBkSEE2THk5eU15NXZMbXhsYm1OeUxtOXlaekFpQmdnckJnRUZCUWN3QW9ZV2FIUjAKY0RvdkwzSXpMbWt1YkdWdVkzSXViM0puTHpBckJnTlZIUkVFSkRBaWdoQXFMbUZzWlhoc1pXSmxibk11Ym1WMApnZzVoYkdWNGJHVmlaVzV6TG01bGREQk1CZ05WSFNBRVJUQkRNQWdHQm1lQkRBRUNBVEEzQmdzckJnRUVBWUxmCkV3RUJBVEFvTUNZR0NDc0dBUVVGQndJQkZocG9kSFJ3T2k4dlkzQnpMbXhsZEhObGJtTnllWEIwTG05eVp6Q0MKQVFJR0Npc0dBUVFCMW5rQ0JBSUVnZk1FZ2ZBQTdnQjFBTGMrK3lUZm5FMjZkZkk1eGJwWTlHeGQvRUxQZXA4MQp4SjRkQ1lFbDdiU1pBQUFCaEhnckhxa0FBQVFEQUVZd1JBSWdBYkZxYkdYY3lnb1JMeHdRL1BkazB2ZDVtdmVCCjVOK1lmS0ZBaFVCWFJMa0NJREoxK21pdmp6VktmeFpHSzFoVjRvMGhkZmJHVVNOMFRJQ3ZOcVFDUXlwSEFIVUEKZWpLTVZOaTNMYllnNmpqZ1VoN3BoQlp3TWhPRlRUdlNLOEU2VjZOUzYxSUFBQUdFZUNzZ3ZRQUFCQU1BUmpCRQpBaUFjUFpCaWoxbXlRSGxCUFpWRmloSi8wTkF0WjNBZitXNmo3WldLMXAvT3h3SWdKRWxmbUJoVkEwTldqUytnCnhQWEE2VHRSeTEwSVJZeGR2anJZT3R3REV1b3dEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBRkNCVGdTV3BzNkIKdW9FWjVXVWlzVGlwUTV6OHpwZUdoK2JMeWs4cy9HajRucDN0KzlBc2h5ZXN4eWNJT0l5Qkd0Ni9UQkJNWU5RLwpvcnFFSHZMa0hFTCtxa2MvVXUrRlVBbVloRGJMcU8wcEI2VFV3WHY0MnQvQ3U0MXBobVgzZ3hBUk01WnZ1Z0ZxCndyZ0hiL2NJWitZdXVHY3U2R3lkSkVKMkgxME5za3BaTm1oK29FSEpUL2Fmc0k4NFdEblo3azY5TUZmL3E5S00KenBiTURZSytRcXdGRlhzWjJkWGZOalJpcUhzRjZxNlI0NnIrZDRLZHNQaTdURWppTS9UWFlIL3N1WC9wcGZQdwpnQWVURUZHOE5jSXNRU1JvTW4xcUlReEx6bTVnK29rTTdIVDdZYXBCZ0I2Y251MXQ5NUlld2htKy9wRGRwK3lQCkhrYzVQZmw5aW9nPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRkZqQ0NBdjZnQXdJQkFnSVJBSkVyQ0VyUERCaW5VL2JXTGlXblgxb3dEUVlKS29aSWh2Y05BUUVMQlFBdwpUekVMTUFrR0ExVUVCaE1DVlZNeEtUQW5CZ05WQkFvVElFbHVkR1Z5Ym1WMElGTmxZM1Z5YVhSNUlGSmxjMlZoCmNtTm9JRWR5YjNWd01SVXdFd1lEVlFRREV3eEpVMUpISUZKdmIzUWdXREV3SGhjTk1qQXdPVEEwTURBd01EQXcKV2hjTk1qVXdPVEUxTVRZd01EQXdXakF5TVFzd0NRWURWUVFHRXdKVlV6RVdNQlFHQTFVRUNoTU5UR1YwSjNNZwpSVzVqY25sd2RERUxNQWtHQTFVRUF4TUNVak13Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLCkFvSUJBUUM3QWhVb3pQYWdsTk1QRXV5TlZaTEQrSUx4bWFaNlFvaW5YU2FxdFN1NXhVeXhyNDVyK1hYSW85Y1AKUjVRVVZUVlhqSjZvb2prWjlZSThRcWxPYnZVN3d5N2JqY0N3WFBOWk9PZnR6Mm53V2dzYnZzQ1VKQ1dIK2pkeApzeFBuSEt6aG0rL2I1RHRGVWtXV3FjRlR6alRJVXU2MXJ1MlAzbUJ3NHFWVXE3WnREcGVsUURScks5TzhadXRtCk5IejZhNHVQVnltWitEQVhYYnB5Yi91QnhhM1NobGc5RjhmbkNidnhLL2VHM01IYWNWM1VSdVBNclNYQmlMeGcKWjNWbXMvRVk5NkpjNWxQL09vaTJSNlgvRXhqcW1BbDNQNTFUK2M4QjVmV21jQmNVcjJPay81bXprNTNjVTZjRwova2lGSGFGcHJpVjF1eFBNVWdQMTdWR2hpOXNWQWdNQkFBR2pnZ0VJTUlJQkJEQU9CZ05WSFE4QkFmOEVCQU1DCkFZWXdIUVlEVlIwbEJCWXdGQVlJS3dZQkJRVUhBd0lHQ0NzR0FRVUZCd01CTUJJR0ExVWRFd0VCL3dRSU1BWUIKQWY4Q0FRQXdIUVlEVlIwT0JCWUVGQlF1c3hlM1dGYkxybEFKUU9ZZnI1MkxGTUxHTUI4R0ExVWRJd1FZTUJhQQpGSG0wV2VaN3R1WGtBWE9BQ0lqSUdsajI2WnR1TURJR0NDc0dBUVVGQndFQkJDWXdKREFpQmdnckJnRUZCUWN3CkFvWVdhSFIwY0RvdkwzZ3hMbWt1YkdWdVkzSXViM0puTHpBbkJnTlZIUjhFSURBZU1CeWdHcUFZaGhab2RIUncKT2k4dmVERXVZeTVzWlc1amNpNXZjbWN2TUNJR0ExVWRJQVFiTUJrd0NBWUdaNEVNQVFJQk1BMEdDeXNHQVFRQgpndDhUQVFFQk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQ0Z5azVIUHFQM2hVU0Z2TlZuZUxLWVk2MTFUUjZXClBUTmxjbFF0Z2FEcXcrMzRJTDlmekxkd0FMZHVPL1plbE43a0lKK203NHV5QStlaXRSWThrYzYwN1RrQzUzd2wKaWtmbVpXNC9SdlRaOE02VUsrNVV6aEs4akNkTHVNR1lMNkt2elhHUlNnaTN5TGdqZXdRdENQa0lWejZEMlFRegpDa2NoZUFtQ0o4TXF5SnU1emx6eVpNakF2bm5BVDQ1dFJBeGVrcnN1OTRzUTRlZ2RSQ25iV1NEdFk3a2grQkltCmxKTlhvQjFsQk1FS0lxNFFEVU9Yb1JnZmZ1RGdoamUxV3JHOU1MK0hiaXNxL3lGT0d3WEQ5UmlYOEY2c3c2VzQKYXZBdXZEc3p1ZTVMM3N6ODVLK0VDNFkvd0ZWRE52Wm80VFlYYW82WjBmK2xRS2MwdDhEUVl6azFPWFZ1OHJwMgp5Sk1DNmFsTGJCZk9EQUxadllIN243ZG8xQVpsczRJOWQxUDRqbmtEclFveEIzVXFROWhWbDNMRUtRNzN4RjFPCnlLNUdoRERYOG9WZkdLRjV1K2RlY0lzSDRZYVR3N21QM0dGeEpTcXYzKzBsVUZKb2k1TGM1ZGExNDlwOTBJZHMKaENFeHJvTDErN21yeUlrWFBlRk01VGdPOXIwcnZaYUJGT3ZWMnowZ3AzNVowK0w0V1BsYnVFak4vbHhQRmluKwpIbFVqcjhnUnNJM3FmSk9RRnkvOXJLSUpSMFkvOE9td3QvOG9UV2d5MW1kZUhtbWprN2oxbllzdkM5SlNRNlp2Ck1sZGxUVEtCM3poVGhWMStYV1lwNnJqZDVKVzF6YlZXRWtMTnhFN0dKVGhFVUczc3pnQlZHUDdwU1dUVVRzcVgKbkxSYndIT29xN2hId2c9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBcFZaOFhWeEpGZkRVNkpGQkp4Z2g3NFFGdnU3VGk4NFVtRVFRZjBSWVcyTXdXUXM0CkhYTnpOek1zb3FRc0twM3V5U2JxUEZSYkpoQWc3UzdzNC9HbzBadXFRNElKcFo5bHNiY0R0WVlvZi82cmR5NkUKOTRUK3FMUFJLc2MxWlFmbWtaTFg2a1JjeWJ4cVFsdUZPaWgzTWt6enFTQ0pFRXpyRFZaQlYreEJEeGZ6dFRJcQpqYW9OOWd3bGlSZTVNc1hRWFAxaWJCaVk3cXcvSU10VHhwcmQrbi9iRHQ5NjR2WS81VWM3bjhSKzEraGJxZ05BCjFsdEdabUtIdjRqQzJ4QkxENXRXUTJiWGVwMEM0OGc0S1BCZlhieFhSeC9aTHpJSU0yUE0zRmNvRE5NUmFkSzYKRHd3eWZQeUFBWnprYmM4MEJrdklqVEtXZHVadlpBUEpYbW9xZktVSkVDMk1ScVkxQS9jNHJuS1F5R2FZck1XWgo4QmtyWXFvaE1peWlEZjV1bFBZZ1o1dUhEd2p1cnVQTHlhVXhzZm12azhXUy9OTG1MaDVRYXNVYklCVEE2RUgxCmlpblBPZ0s1K1lHQWFLQ3lYaG5WTFIxRnVHTXBtclQzS1ZzNnR5NjR3RytSR3ZEdHRVVDYzOWRGNnN1RWUwMHUKSlNRMHJldXBhRVMyRy9KTHZZWUVnV3NhQisxcVVuNis4VURKcVYzdzZJSWlSaEpVZ0Qzd3ppU204S05CSk1JawpDS0pIVWw4YnZwdHY3ZDNZanBlY1NPTXhOL1ZqWllZb1dCZDIxcnNHd0FiTkJ0QTRobXczOEpNaUt4LzdaOXdUCmJYT2RSdmllK0tYcms3eStuclJFWEw5dzhtdlNBM0owQ3dyUnZNUnVUSlhWeDVTZWREMVVodHJieFJFQ0F3RUEKQVFLQ0FnQS85TGVBeWJ6L3Zyd3RCbHNraTBJOVMxMkpvUXExenM3S283R1orVThRY3NyMTl0QUxIR2lhRnJLUwphMTBtVXhkV09qWnJoZG9JWEQ3UVlOR0R6eXdWZ05pWTZvbGV4c3pvdExtN2t4ekJmanJIakhnazR3NDdKZXVvClY0ekEreEJtaVYzNklkMmVyOEtPenFZM2ZBVzNzR3FrcHBBK2ZQS0RvelQ5bE1jSjFxTVFHVXE2cCtoa29BZzUKQXJOQi82RDlCNHIxODRIYytVWW1JbURTdDM5Y2NlN0R6eERURUp4Z3pYQXoraWR5ejAvOThPbzR3Ty8zbE8rYgoySVEvaHdyeUM0MlAzdzFGUWMwblhZRFQzVCtXbTg5TEZQZkhPTnhSUEs2M0lRTytDanQzS3V1TC9KVGZJakZGCjduR3lSRytFYS9ZMUlEZHg0T3QvemJNc1VYY0RSdWlvM3hCb09WRmFxa2NnQXluS3I0bnZ6bHpzSkluakd2eDIKK3VyL01sQm5CWnZPUklBbXlSK3pzSjNKSUQzcmNnV01ZTkNzckdDMzJNblZnSkNvWlpiNU42SDJ4RmFnMUYvbwpLd1dmb0dlbGF5ckdWN3NXY2tnTkhNRWNtdlg3QWFWTDJLM3B6SElxNkxod1FJdGFYUXJVYmhkWll4czUyMnV4CnN2WVhHTUlDbWtJL0F4WGppTW9yQy80RjNsQzg1S3hTaWZueTJLaklZVFNYQlFMT3lwcUQvS1dBOFQ2R29xeFkKMVJPYWs1Q29rYzF3bEZpVWhUYW02U3pZc0htSlRUSXo0WTFjMmVjcVVmTGNiajJSaEFLaCttemJGZW04K216dApYcFlKOTUxVjY2TGhNc2s4QzJ4SDdzVFBxK0dFM05XYld1ejdGejJTQzJrbFlTSFl3UUtDQVFFQTFxQ3RQbUMvCjZuUjM3QU1rTmk4SkN4dk44aDRJZ0xDVUx1TURVNjN3UFBxTTYzQS9JdlBIcEVKVlE5WWJMckF5ZmorclZSTW8KR0cwZmt1LzVESUpUREdjaUk0UjZBbmEzWDRRQjhTVG80dDJEbDdjQmYwNVZQZjB1NEJNV3NseitZQjZtRlRVNQpVdEt6ck1WKzhWT2oxMkxzOU82a3FQdnlWYVpDYXI1NEdWY3Izc1ZYN1JrUy9wcTVlaW95STRQZ2g4NHRZdVJnCjBtSkJvOUtjZEZwMmQxWnhJbkQzbUtkMXdRdFlhL1lxSXRpai9xZnhuSkFmYU56Z1NRZ0wyS1ozazdNZnFRUmcKcEJNWDhRNTdqeVlqbVVQTGM2NFVtK1NlKzlpVmg3L3RqcWVPMHp6ejJjWlhrc0MzOW43Q3lBbFZCemhGdFdVVgozZ2FMY3pIbWFqVkZlUUtDQVFFQXhUVjd5ZXpMRWlMMjZDa0xxVzg2Nm5aU3dzRUZtbFpsWHN6eEg0K0JxaEhmCmtXWnVwb25HQ0VKdWhtTGR0bE4rWHprSHV1dzEwb0N3VlVEayttZkdRUlFvb1l1R3lOZTByeTRMYUZteDZNR1oKR0FpNkNZblIzbFJZZWF2aC9FZ1dPQ2ZXSzRhYUlQQTZBUjJNQnlTckVEdURoOE10aDZxaGhxcmpZTm4xOVNpWgorTFhxRjV2WTNQQ3BOQ2N1cCtlcXYrMXd4QXpIa0tLQ014czJmVVl3SXlpV2NzdyszYW1FVTZGWUN5MmdveStKCnlwRWgxQU5LMXhReWZ1WDR6TzhjNlhoUC8wQjdDazZSeUloZHp3OUtCdnU3MHFGL09uUVI5M0dzM3IxTTMvZVoKeFVBeGw3R1ZudGtZUERpREEvTWt1OXo5S3IxUnYyUnlKK2ZKV0ZvT1dRS0NBUUFQbWdaOTdsS0ZISXBMSWI5VQpJUDhyUzQ0Zzk0WHV0T2RRc1RmZ3NWZ3hWcFUvMkJ6KzBYSEZ3dnludmJ5a0hETFBjcGxseWNxMFc5cGJ1QTRHCmxzS3F1Q1NIS0c0bUY3TWt3bGZSeTdrU0pNQVlHem1FbzVFV3ZIelgxUXRsVTlVNTc0QnJNajlFZ2dTRm5xV24KclVqUHMyVStPTXJIYmVranlMNHpQRDFHdWt0NkdpWldHZWlEa1lQQ0dhY2paY2JBbUlBOEhCWGR0VDdJUmRzUgpxakhLWXdJK1dxL2s3T2RtYlFpMGNHU0h1Ky9QNXkxdEVCejRablgzV1JwaldWWi82aGwzRTlaaWx2QzZtUzdxCkxQK1JlSmdsaEpZQzd3K1BoeUwzaDBBaGlwU2JUbWI3Z2F1RUEzWmIrTUwzLzVXcXZMQjBpekNYdnlvTDZhaXkKTjhVaEFvSUJBQjg4Mm8vZ3AwWUhMYzhXZVZkc1hBdTVsR0J2RE1FbXdFWGs5cWpHSlliWDcrN3JKOG5QZHdQbAo2ZlgxZ1NNWlZLSW11WGU5Wk1Va1Iwb3B6bHR2eHJLV1M5MVM2WlcwdlZVbVdQNDlmdlhjZkxDVzZVa0xnS2ZUCituUERhemQzLzdVRGNtUlFuT2RzeGZOWlI4MzEyL2JsUm05aDFqdHdKc2ZiRjh0R216UXJLMEIvS0VaM0ZFSGoKQ1JwT3ZwQXdIUmJydUhvRmdETUQydFhYa0trRlRpaXpqQ2xBK3hCSGdzTndnaTY3R24vZXp0ZThaM3hhelNjRwpkdjBzMWwwMzN2K0laRHVOYmkveXhCcmNwdWRlaDU1Vmo2bk1sUWVnVFJ4QjhGMFQ1VEp3MlBXcXRuQk4yK0plCmh2MDdBbDNFek9QSkhIMEJvZ3BNRWQwS1ZSVmVwbmtDZ2dFQkFKdURqQ3ZSZ0lxNXFCUU91SVNnWHlXK2J0WWgKVDExd1NnSXZYSnlqYnNNUlBjeE13S00vRTZGOEM0MkM0WStUK3pDYXN1dW5Cc2p0UzRMZEFYSzRQR0xnOW5vLwp0UWUxZzJEamF4Z2pWdnNSbHpGYmFreE96RENjalFVdE1VWkh2aFc0TFlvQmZ4SGtwZEtHTW5ldWR5MWFicFM1CnJwbnRCYzRzVGYxeWI0ZmJ6NlZKZGgzK2xLRmhpRTFnaGcyb216N21JZE1jN3htNlA5U2lSZkhaV0IxNHRuZFcKczE5SlhlaEpsVkQ4ZlBzNUwzdWdOczFyWWZRTEdBQUlGTUc5U3EyMm5IQ2hQdjBxSWtlU3h4dldROFVLc2FJQgpUSjIwVTFFWk12Q3hzRjlNbXl3ZHlnaVhudXN0eTJDZWs1NFF1Y2tNWHNBQWVwWnNDU2VnZGhEMXFGWT0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", + "Store": "default" + } + ] + } +} \ No newline at end of file diff --git a/Traefik/Files/traefik_config/conf/authentik.yml b/Traefik/Files/traefik_config/conf/authentik.yml new file mode 100644 index 0000000..a765b8f --- /dev/null +++ b/Traefik/Files/traefik_config/conf/authentik.yml @@ -0,0 +1,19 @@ +http: + middlewares: + authentik: + forwardAuth: + address: http://authentik_server:9000/outpost.goauthentik.io/auth/traefik + trustForwardHeader: true + authResponseHeaders: + - X-authentik-username + - X-authentik-groups + - X-authentik-email + - X-authentik-name + - X-authentik-uid + - X-authentik-jwt + - X-authentik-meta-jwks + - X-authentik-meta-outpost + - X-authentik-meta-provider + - X-authentik-meta-app + - X-authentik-meta-version + - Authorization diff --git a/Traefik/Files/traefik_config/conf/iplocal.yml b/Traefik/Files/traefik_config/conf/iplocal.yml new file mode 100644 index 0000000..a31d700 --- /dev/null +++ b/Traefik/Files/traefik_config/conf/iplocal.yml @@ -0,0 +1,15 @@ +http: + middlewares: + ip-local: + ipWhiteList: + sourceRange: + - "192.168.1.1/16" + - "172.27.0.0/16" + +tcp: + middlewares: + ip-local: + ipWhiteList: + sourceRange: + - "192.168.1.1/16" + - "172.27.0.0/16" diff --git a/Traefik/Files/traefik_config/conf/metrics.yml b/Traefik/Files/traefik_config/conf/metrics.yml new file mode 100644 index 0000000..37b1418 --- /dev/null +++ b/Traefik/Files/traefik_config/conf/metrics.yml @@ -0,0 +1,8 @@ +http: + routers: + prometheus: + rule: "(Host(`traefik.alexlebens.net`) && Path(`/metrics`))" + entryPoints: websecure + service: prometheus@internal + middlewares: + - "ip-local@file" diff --git a/Traefik/Files/traefik_config/conf/themepark.yml b/Traefik/Files/traefik_config/conf/themepark.yml new file mode 100644 index 0000000..d008aff --- /dev/null +++ b/Traefik/Files/traefik_config/conf/themepark.yml @@ -0,0 +1,116 @@ +http: + middlewares: + sonarr-theme: + plugin: + theme-park: + app: sonarr + theme: nord + baseUrl: https://themepark.alexlebens.net + sonarr-nord-theme: + plugin: + theme-park: + app: sonarr + theme: nord + baseUrl: https://themepark.alexlebens.net + sonarr-hotpink-theme: + plugin: + theme-park: + app: sonarr + theme: hotpink + baseUrl: https://themepark.alexlebens.net + sonarr-aquamarine-theme: + plugin: + theme-park: + app: sonarr + theme: aquamarine + baseUrl: https://themepark.alexlebens.net + radarr-theme: + plugin: + theme-park: + app: radarr + theme: nord + baseUrl: https://themepark.alexlebens.net + radarr-nord-theme: + plugin: + theme-park: + app: radarr + theme: nord + baseUrl: https://themepark.alexlebens.net + radarr-hotpink-theme: + plugin: + theme-park: + app: radarr + theme: hotpink + baseUrl: https://themepark.alexlebens.net + radarr-aquamarine-theme: + plugin: + theme-park: + app: radarr + theme: aquamarine + baseUrl: https://themepark.alexlebens.net + radarr-space-gray-theme: + plugin: + theme-park: + app: radarr + theme: space-gray + baseUrl: https://themepark.alexlebens.net + radarr-dracula-theme: + plugin: + theme-park: + app: radarr + theme: dracula + baseUrl: https://themepark.alexlebens.net + lidarr-theme: + plugin: + theme-park: + app: lidarr + theme: nord + baseUrl: https://themepark.alexlebens.net + readarr-theme: + plugin: + theme-park: + app: readarr + theme: nord + baseUrl: https://themepark.alexlebens.net + readarr-nord-theme: + plugin: + theme-park: + app: readarr + theme: nord + baseUrl: https://themepark.alexlebens.net + readarr-space-gray-theme: + plugin: + theme-park: + app: readarr + theme: space-gray + baseUrl: https://themepark.alexlebens.net + readarr-aquamarine-theme: + plugin: + theme-park: + app: readarr + theme: aquamarine + baseUrl: https://themepark.alexlebens.net + prowlarr-theme: + plugin: + theme-park: + app: prowlarr + theme: nord + baseUrl: https://themepark.alexlebens.net + tautulli-theme: + plugin: + theme-park: + app: tautulli + theme: plex + baseUrl: https://themepark.alexlebens.net + qbittorrent-theme: + plugin: + theme-park: + app: qbittorrent + theme: nord + baseUrl: https://themepark.alexlebens.net + calibreweb-theme: + plugin: + theme-park: + app: calibreweb + theme: nord + baseUrl: https://themepark.alexlebens.net diff --git a/Traefik/Files/traefik_config/traefik.yml b/Traefik/Files/traefik_config/traefik.yml new file mode 100644 index 0000000..40f2e75 --- /dev/null +++ b/Traefik/Files/traefik_config/traefik.yml @@ -0,0 +1,124 @@ +################################################################ +# Global +################################################################ + +global: + checkNewVersion: true + sendAnonymousUsage: false + +################################################################ +# EntryPoints +################################################################ + +entryPoints: + web: + address: :80 + http: + middlewares: + - ip-local@file + + websecure: + address: :443 + forwardedHeaders: + trustedIPs: + - "192.168.1.1/16" + - "172.27.0.0/16" + proxyProtocol: + trustedIPs: + - "192.168.1.1/16" + - "172.27.0.0/16" + http: + tls: + options: default + certResolver: le-cloudflare + domains: + - main: "*.alexlebens.net" + sans: + - "alexlebens.net" + middlewares: + - ip-local@file + +################################################################ +# Certificate Resolvers +################################################################ + +certificatesResolvers: + le-cloudflare: + acme: + email: alexanderlebens@gmail.com + storage: /etc/traefik/acme/acme.json + # caServer: "https://acme-staging-v02.api.letsencrypt.org/directory" + preferredChain: "ISRG Root X1" + dnsChallenge: + provider: cloudflare + delayBeforeCheck: "3" + resolvers: + - "1.1.1.1" + - "1.0.0.1" + +################################################################ +# Traefik logs +################################################################ + +log: + level: INFO + +################################################################ +# Access logs +################################################################ + +accessLog: {} + +################################################################ +# API and Dashboard +################################################################ + +api: + insecure: false + dashboard: true + +################################################################ +# Ping +################################################################ + +# ping: + +################################################################ +# Metrics +################################################################ + +metrics: + prometheus: + addEntryPointsLabels: true + addRoutersLabels: true + addServicesLabels: true + buckets: + - 0.1 + - 0.3 + - 1.2 + - 5.0 + entryPoint: websecure + manualRouting: true + +################################################################ +# Providers +################################################################ + +providers: + docker: + endpoint: "unix:///var/run/docker.sock" + exposedByDefault: false + + file: + directory: "/etc/traefik/conf" + watch: true + +################################################################ +# Experimental +################################################################ + +experimental: + plugins: + theme-park: + moduleName: "github.com/packruler/traefik-themepark" + version: "v1.2.2" diff --git a/Traefik/README.md b/Traefik/README.md new file mode 100644 index 0000000..82b8088 --- /dev/null +++ b/Traefik/README.md @@ -0,0 +1,3 @@ +# Traefik + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Traefik/status.svg)](https://drone.alexlebens.net/alexlebens/Traefik) \ No newline at end of file diff --git a/Traefik/UptimeKuma/docker-1.json b/Traefik/UptimeKuma/docker-1.json new file mode 100644 index 0000000..248a2ca --- /dev/null +++ b/Traefik/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Traefik - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://traefik.alexlebens.net/dashboard/#/", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "traefik", + "docker_host": 1 +} \ No newline at end of file diff --git a/Traefik/UptimeKuma/http-1.json b/Traefik/UptimeKuma/http-1.json new file mode 100644 index 0000000..e67b5c4 --- /dev/null +++ b/Traefik/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Traefik - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://traefik.alexlebens.net/dashboard/#/", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Traefik/docker-compose.yml b/Traefik/docker-compose.yml new file mode 100644 index 0000000..e525486 --- /dev/null +++ b/Traefik/docker-compose.yml @@ -0,0 +1,55 @@ +services: + traefik: + command: traefik + container_name: traefik + environment: + CF_API_EMAIL: alexanderlebens@gmail.com + CF_API_KEY: f83de272d8c6f76a6d9074160780c924c0878 + PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + image: docker.io/traefik:2.9.6 + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.dashboard.entrypoints: websecure + traefik.http.routers.dashboard.rule: (Host(`traefik.alexlebens.net`) && (PathPrefix(`/api/`) || PathPrefix(`/dashboard/`))) + traefik.http.routers.dashboard.service: api@internal + traefik.http.routers.dashboard.tls: true + traefik.http.routers.dashboard.tls.certresolver: le-cloudflare + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + ports: + - 192.168.1.15:80:80 + - 192.168.1.15:443:443 + - 192.168.1.15:9000:9000 + privileged: true + restart: always + user: root + volumes: + - config:/etc/traefik + - log:/log + - /var/run/docker.sock:/var/run/docker.sock:ro + +networks: + traefik: + name: traefik + external: true + +volumes: + config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/traefik_config + + log: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/traefik_log \ No newline at end of file diff --git a/TubeArchivist/.drone.yml b/TubeArchivist/.drone.yml new file mode 100644 index 0000000..9e12c9f --- /dev/null +++ b/TubeArchivist/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: TubeArchivist + URL: tubearchivist.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for TubeArchivist failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for TubeArchivist failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for TubeArchivist succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for TubeArchivist failed. + when: + status: + - failure diff --git a/TubeArchivist/.env b/TubeArchivist/.env new file mode 100644 index 0000000..1894b24 --- /dev/null +++ b/TubeArchivist/.env @@ -0,0 +1,9 @@ +ES_URL=http://tube_archivist_es:9200 +REDIS_HOST=tube_archivist_redis +HOST_UID=1000 +HOST_GID=1000 +TA_HOST=tubearchivist.alexlebens.net +TA_USERNAME=tubearchivist +TA_PASSWORD='24wrsfxv@$WRSFXV' +ELASTIC_PASSWORD='35etdgcb#%ETDGCB' +TZ=America/Denver \ No newline at end of file diff --git a/TubeArchivist/.es.env b/TubeArchivist/.es.env new file mode 100644 index 0000000..70a5b69 --- /dev/null +++ b/TubeArchivist/.es.env @@ -0,0 +1,5 @@ +ELASTIC_PASSWORD='35etdgcb#%ETDGCB' +ES_JAVA_OPTS=-Xms512m -Xmx512m +xpack.security.enabled=true +discovery.type=single-node +path.repo=/usr/share/elasticsearch/data/snapshot \ No newline at end of file diff --git a/TubeArchivist/README.md b/TubeArchivist/README.md new file mode 100644 index 0000000..69cf6e1 --- /dev/null +++ b/TubeArchivist/README.md @@ -0,0 +1,3 @@ +# TubeArchivist + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/TubeArchivist/status.svg)](https://drone.alexlebens.net/alexlebens/TubeArchivist) \ No newline at end of file diff --git a/TubeArchivist/UptimeKuma/docker-1.json b/TubeArchivist/UptimeKuma/docker-1.json new file mode 100644 index 0000000..4c4e998 --- /dev/null +++ b/TubeArchivist/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "TubeArchivist ES - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://tubearchivist.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "tube_archivist_es", + "docker_host": 1 +} \ No newline at end of file diff --git a/TubeArchivist/UptimeKuma/docker-2.json b/TubeArchivist/UptimeKuma/docker-2.json new file mode 100644 index 0000000..5a687f8 --- /dev/null +++ b/TubeArchivist/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "TubeArchivist Redis - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://tubearchivist.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "tube_archivist_redis", + "docker_host": 1 +} \ No newline at end of file diff --git a/TubeArchivist/UptimeKuma/docker-3.json b/TubeArchivist/UptimeKuma/docker-3.json new file mode 100644 index 0000000..65c995a --- /dev/null +++ b/TubeArchivist/UptimeKuma/docker-3.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "TubeArchivist - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://tubearchivist.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "tube_archivist", + "docker_host": 1 +} \ No newline at end of file diff --git a/TubeArchivist/UptimeKuma/http-1.json b/TubeArchivist/UptimeKuma/http-1.json new file mode 100644 index 0000000..072bae3 --- /dev/null +++ b/TubeArchivist/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "TubeArchivist - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://tubearchivist.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/TubeArchivist/docker-compose.yml b/TubeArchivist/docker-compose.yml new file mode 100644 index 0000000..00b9f67 --- /dev/null +++ b/TubeArchivist/docker-compose.yml @@ -0,0 +1,105 @@ +services: + tube_archivist_es: + container_name: tube_archivist_es + env_file: + - .es.env + image: bbilly1/tubearchivist-es:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: unless-stopped + ulimits: + memlock: + soft: -1 + hard: -1 + volumes: + - es:/usr/share/elasticsearch/data + + tube_archivist_redis: + container_name: tube_archivist_redis + depends_on: + - tube_archivist_es + image: redislabs/rejson:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: unless-stopped + volumes: + - redis:/data + + tube_archivist: + container_name: tube_archivist + depends_on: + - tube_archivist_es + - tube_archivist_redis + env_file: + - .env + image: bbilly1/tubearchivist + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.tube_archivist.entrypoints: websecure + traefik.http.routers.tube_archivist.rule: Host(`tubearchivist.alexlebens.net`) + traefik.http.routers.tube_archivist.service: tube_archivist + traefik.http.services.tube_archivist.loadbalancer.server.port: 8000 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + privileged: true + restart: unless-stopped + volumes: + - media:/youtube + - cache:/cache + +networks: + traefik: + name: traefik + external: true + +volumes: +# media: +# driver: local +# driver_opts: +# type: none +# o: bind +# device: /var/lib/docker/volumes/partition/tube_archivist_media + + media: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: :/volume2/Storage/TubeArchivist + + cache: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/tube_archivist_cache + + redis: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/tube_archivist_redis + + es: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/tube_archivist_es diff --git a/UptimeKuma/.drone.yml b/UptimeKuma/.drone.yml new file mode 100644 index 0000000..1fff3ec --- /dev/null +++ b/UptimeKuma/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: UptimeKuma + URL: uptimekuma.alexlebens.net uptimekumaapi.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for UptimeKuma failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for UptimeKuma failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for UptimeKuma succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for UptimeKuma failed. + when: + status: + - failure diff --git a/UptimeKuma/README.md b/UptimeKuma/README.md new file mode 100644 index 0000000..9a2db4c --- /dev/null +++ b/UptimeKuma/README.md @@ -0,0 +1,3 @@ +# UptimeKuma + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/UptimeKuma/status.svg)](https://drone.alexlebens.net/alexlebens/UptimeKuma) \ No newline at end of file diff --git a/UptimeKuma/UptimeKuma/docker-1.json b/UptimeKuma/UptimeKuma/docker-1.json new file mode 100644 index 0000000..4d14856 --- /dev/null +++ b/UptimeKuma/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "UptimeKuma - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://uptimekuma.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "uptimekuma", + "docker_host": 1 +} \ No newline at end of file diff --git a/UptimeKuma/UptimeKuma/docker-2.json b/UptimeKuma/UptimeKuma/docker-2.json new file mode 100644 index 0000000..406d65f --- /dev/null +++ b/UptimeKuma/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "UptimeKuma API - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://uptimekumaapi.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "uptimekuma_api", + "docker_host": 1 +} \ No newline at end of file diff --git a/UptimeKuma/UptimeKuma/http-1.json b/UptimeKuma/UptimeKuma/http-1.json new file mode 100644 index 0000000..dcdb0c0 --- /dev/null +++ b/UptimeKuma/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "UptimeKuma API - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://uptimekumaapi.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/UptimeKuma/docker-compose.yml b/UptimeKuma/docker-compose.yml new file mode 100644 index 0000000..3075481 --- /dev/null +++ b/UptimeKuma/docker-compose.yml @@ -0,0 +1,73 @@ +services: + uptimekuma: + container_name: uptimekuma + image: louislam/uptime-kuma:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.uptimekuma.entrypoints: websecure + traefik.http.routers.uptimekuma.rule: Host(`uptimekuma.alexlebens.net`) + traefik.http.routers.uptimekuma.service: uptimekuma + traefik.http.services.uptimekuma.loadbalancer.server.port: 3001 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + privileged: true + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - app:/app/data + + uptimekuma_api: + container_name: uptimekuma_api + depends_on: + - uptimekuma + environment: + KUMA_SERVER: http://uptimekuma:3001 + KUMA_USERNAME: admin + KUMA_PASSWORD: 24wrsfxv@$$WRSFXV + ADMIN_PASSWORD: admin + image: medaziz11/uptimekuma_restapi:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.uptimekuma_api.entrypoints: websecure + traefik.http.routers.uptimekuma_api.rule: Host(`uptimekumaapi.alexlebens.net`) + traefik.http.routers.uptimekuma_api.service: uptimekuma_api + traefik.http.services.uptimekuma_api.loadbalancer.server.port: 8000 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + mem_limit: 1g + networks: + traefik: null + restart: always + privileged: true + volumes: + - db:/db + +networks: + traefik: + name: traefik + external: true + +volumes: + app: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/uptimekuma_app + + db: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/uptimekuma_db \ No newline at end of file diff --git a/Vikunja/.db.env b/Vikunja/.db.env new file mode 100644 index 0000000..cc7642a --- /dev/null +++ b/Vikunja/.db.env @@ -0,0 +1,4 @@ +MYSQL_ROOT_PASSWORD=supersupersecret +MYSQL_USER=vikunja +MYSQL_PASSWORD=supersecret +MYSQL_DATABASE=vikunja \ No newline at end of file diff --git a/Vikunja/.drone.yml b/Vikunja/.drone.yml new file mode 100644 index 0000000..4f72456 --- /dev/null +++ b/Vikunja/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Vikunja + URL: vikunja.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Vikunja failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Vikunja failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Vikunja succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Vikunja failed. + when: + status: + - failure diff --git a/Vikunja/.env b/Vikunja/.env new file mode 100644 index 0000000..4f3a35a --- /dev/null +++ b/Vikunja/.env @@ -0,0 +1,7 @@ +VIKUNJA_DATABASE_HOST='vikunja_mariadb' +VIKUNJA_DATABASE_PASSWORD='supersecret' +VIKUNJA_DATABASE_TYPE='mysql' +VIKUNJA_DATABASE_USER='vikunja' +VIKUNJA_DATABASE_DATABASE='vikunja' +VIKUNJA_SERVICE_JWTSECRET='24wrsfxv@$WRSFXV' +VIKUNJA_SERVICE_FRONTENDURL='https://vikunja.alexlebens.net/' \ No newline at end of file diff --git a/Vikunja/Files/vikunja_config/vikunja/config.yml b/Vikunja/Files/vikunja_config/vikunja/config.yml new file mode 100644 index 0000000..9c1ce72 --- /dev/null +++ b/Vikunja/Files/vikunja_config/vikunja/config.yml @@ -0,0 +1,11 @@ +auth: + local: + enabled: disabled + openid: + enabled: true + redirecturl: https://vikunja.alexlebens.net/auth/openid/ + providers: + - name: authentik + authurl: https://authentik.alexlebens.net/application/o/vikunja/ + clientid: 6b6e3f8fb3e530a7df4acc3ebdbad6633ca1c122 + clientsecret: ebaaac1145eb594817cc7d89d7d0e02832f0356a4d60b61da092cc5df6b8ff0f675df764e9397333a6a4650771fc008966ea4fef487035d5c89d40d1b0868ec6 diff --git a/Vikunja/README.md b/Vikunja/README.md new file mode 100644 index 0000000..8b58033 --- /dev/null +++ b/Vikunja/README.md @@ -0,0 +1,3 @@ +# Vikunja + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Vikunja/status.svg)](https://drone.alexlebens.net/alexlebens/Vikunja) \ No newline at end of file diff --git a/Vikunja/UptimeKuma/docker-1.json b/Vikunja/UptimeKuma/docker-1.json new file mode 100644 index 0000000..b98dfe2 --- /dev/null +++ b/Vikunja/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Vikunja MariaDB - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://vikunja.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "vikunja_mariadb", + "docker_host": 1 +} \ No newline at end of file diff --git a/Vikunja/UptimeKuma/docker-2.json b/Vikunja/UptimeKuma/docker-2.json new file mode 100644 index 0000000..4034e72 --- /dev/null +++ b/Vikunja/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Vikunja API - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://vikunja.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "vikunja_api", + "docker_host": 1 +} \ No newline at end of file diff --git a/Vikunja/UptimeKuma/docker-3.json b/Vikunja/UptimeKuma/docker-3.json new file mode 100644 index 0000000..492c991 --- /dev/null +++ b/Vikunja/UptimeKuma/docker-3.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Vikunja Frontend - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://vikunja.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "vikunja_frontend", + "docker_host": 1 +} \ No newline at end of file diff --git a/Vikunja/UptimeKuma/http-1.json b/Vikunja/UptimeKuma/http-1.json new file mode 100644 index 0000000..c55b8bf --- /dev/null +++ b/Vikunja/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Vikunja - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://vikunja.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Vikunja/docker-compose.yml b/Vikunja/docker-compose.yml new file mode 100644 index 0000000..2d9c4e2 --- /dev/null +++ b/Vikunja/docker-compose.yml @@ -0,0 +1,106 @@ +services: + mariadb: + command: + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci + - --max-connections=1000 + container_name: vikunja_mariadb + env_file: + - .db.env + image: mariadb:10 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.75 + restart: always + volumes: + - db:/data/db + - dbvar:/var/lib/mysql + + api: + container_name: vikunja_api + depends_on: + - mariadb + env_file: + - .env + image: vikunja/api + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.vikunja-api.entrypoints: websecure + traefik.http.routers.vikunja-api.rule: Host(`vikunja.alexlebens.net`) && PathPrefix(`/api/v1`, `/dav/`, `/.well-known/`) + traefik.http.routers.vikunja-api.service: vikunja-api + traefik.http.services.vikunja-api.loadbalancer.server.port: 3456 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.76 + restart: always + privileged: true + volumes: + - files:/app/vikunja/files + - config:/app/vikunja/.config + + frontend: + container_name: vikunja_frontend + environment: + VIKUNJA_API_URL: https://vikunja.alexlebens.net/api/v1 + image: vikunja/frontend + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.vikunja.entrypoints: websecure + traefik.http.routers.vikunja.rule: Host(`vikunja.alexlebens.net`) + traefik.http.routers.vikunja.service: vikunja + traefik.http.services.vikunja.loadbalancer.server.port: 80 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.77 + restart: unless-stopped + +networks: + traefik: + name: traefik + external: true + +volumes: + db: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/vikunja_db + + dbvar: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/vikunja_dbvar + + files: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/vikunja_files + + config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/vikunja_config diff --git a/Watchtower/.drone.yml b/Watchtower/.drone.yml new file mode 100644 index 0000000..9fffbca --- /dev/null +++ b/Watchtower/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Watchtower + URL: watchtower.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Watchtower failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Watchtower failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Watchtower succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Watchtower failed. + when: + status: + - failure diff --git a/Watchtower/.env b/Watchtower/.env new file mode 100644 index 0000000..15544d5 --- /dev/null +++ b/Watchtower/.env @@ -0,0 +1,5 @@ +TZ=America/Denver +WATCHTOWER_HTTP_API_METRICS=true +WATCHTOWER_HTTP_API_TOKEN=token +WATCHTOWER_CLEANUP=true +WATCHTOWER_POLL_INTERVAL=3600 \ No newline at end of file diff --git a/Watchtower/README.md b/Watchtower/README.md new file mode 100644 index 0000000..1e0bae3 --- /dev/null +++ b/Watchtower/README.md @@ -0,0 +1,3 @@ +# Watchtower + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Watchtower/status.svg)](https://drone.alexlebens.net/alexlebens/Watchtower) \ No newline at end of file diff --git a/Watchtower/UptimeKuma/docker-1.json b/Watchtower/UptimeKuma/docker-1.json new file mode 100644 index 0000000..f2d53bc --- /dev/null +++ b/Watchtower/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Watchtower - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://watchtower.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "watchtower", + "docker_host": 1 +} \ No newline at end of file diff --git a/Watchtower/UptimeKuma/http-1.json b/Watchtower/UptimeKuma/http-1.json new file mode 100644 index 0000000..de17c44 --- /dev/null +++ b/Watchtower/UptimeKuma/http-1.json @@ -0,0 +1,16 @@ +{ + "type": "http", + "name": "Watchtower - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "http://watchtower:8080/v1/metrics", + "accepted_statuscodes": [ + "200-299" + ], + "headers": "{'Authorization': 'Bearer token'}" +} \ No newline at end of file diff --git a/Watchtower/docker-compose.yml b/Watchtower/docker-compose.yml new file mode 100644 index 0000000..e98246b --- /dev/null +++ b/Watchtower/docker-compose.yml @@ -0,0 +1,22 @@ +services: + watchtower: + container_name: watchtower + env_file: + - .env + image: containrrr/watchtower:latest + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + privileged: true + restart: always + volumes: + - /var/run/docker.sock:/var/run/docker.sock + +networks: + traefik: + name: traefik + external: true \ No newline at end of file diff --git a/Yacht/.drone.yml b/Yacht/.drone.yml new file mode 100644 index 0000000..4d13196 --- /dev/null +++ b/Yacht/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: Yacht + URL: yacht.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for Yacht failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for Yacht failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Yacht succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for Yacht failed. + when: + status: + - failure diff --git a/Yacht/README.md b/Yacht/README.md new file mode 100644 index 0000000..2cab415 --- /dev/null +++ b/Yacht/README.md @@ -0,0 +1,3 @@ +# Yacht + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/Yacht/status.svg)](https://drone.alexlebens.net/alexlebens/Yacht) \ No newline at end of file diff --git a/Yacht/UptimeKuma/docker-1.json b/Yacht/UptimeKuma/docker-1.json new file mode 100644 index 0000000..75b723f --- /dev/null +++ b/Yacht/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "Yacht - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://yacht.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "yacht", + "docker_host": 1 +} \ No newline at end of file diff --git a/Yacht/UptimeKuma/http-1.json b/Yacht/UptimeKuma/http-1.json new file mode 100644 index 0000000..96ef116 --- /dev/null +++ b/Yacht/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "Yacht - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://yacht.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/Yacht/docker-compose.yml b/Yacht/docker-compose.yml new file mode 100644 index 0000000..16d140b --- /dev/null +++ b/Yacht/docker-compose.yml @@ -0,0 +1,37 @@ +services: + yacht: + container_name: yacht + image: selfhostedpro/yacht + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.yacht.entrypoints: websecure + traefik.http.routers.yacht.rule: Host(`yacht.alexlebens.net`) + traefik.http.routers.yacht.service: yacht + traefik.http.services.yacht.loadbalancer.server.port: 8000 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + privileged: true + restart: always + user: root + volumes: + - yacht_config:/config + - /var/run/docker.sock:/var/run/docker.sock + +networks: + traefik: + name: traefik + external: true + +volumes: + yacht_config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/yacht_config diff --git a/YourSpotify/.drone.yml b/YourSpotify/.drone.yml new file mode 100644 index 0000000..63806c6 --- /dev/null +++ b/YourSpotify/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: YourSpotify + URL: yourspotify.alexlebens.net yourspotifyapi.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for YourSpotify failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for YourSpotify failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for YourSpotify succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for YourSpotify failed. + when: + status: + - failure diff --git a/YourSpotify/.env b/YourSpotify/.env new file mode 100644 index 0000000..63689aa --- /dev/null +++ b/YourSpotify/.env @@ -0,0 +1,8 @@ +API_ENDPOINT=https://yourspotifyapi.alexlebens.net +CLIENT_ENDPOINT=https://yourspotify.alexlebens.net +SPOTIFY_PUBLIC=2ef3348a6ab94bf8bc8dfa66e481d444 +SPOTIFY_SECRET=964d902a03d744e9a922759ef1eab47d +CORS=all +MONGO_ENDPOINT=mongodb://yourspotify_mongo:27017/yourspotify +MAX_IMPORT_CACHE_SIZE=100000 +TIMEZONE=America/Denver \ No newline at end of file diff --git a/YourSpotify/README.md b/YourSpotify/README.md new file mode 100644 index 0000000..aae871f --- /dev/null +++ b/YourSpotify/README.md @@ -0,0 +1,3 @@ +# YourSpotify + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/YourSpotify/status.svg)](https://drone.alexlebens.net/alexlebens/YourSpotify) \ No newline at end of file diff --git a/YourSpotify/UptimeKuma/docker-1.json b/YourSpotify/UptimeKuma/docker-1.json new file mode 100644 index 0000000..3e007fd --- /dev/null +++ b/YourSpotify/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "YourSpotify MongoDB - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://yourspotify.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "yourspotify_mongo", + "docker_host": 1 +} \ No newline at end of file diff --git a/YourSpotify/UptimeKuma/docker-2.json b/YourSpotify/UptimeKuma/docker-2.json new file mode 100644 index 0000000..fe7819b --- /dev/null +++ b/YourSpotify/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "YourSpotify Server - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://yourspotifyapi.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "yourspotify_server", + "docker_host": 1 +} \ No newline at end of file diff --git a/YourSpotify/UptimeKuma/docker-3.json b/YourSpotify/UptimeKuma/docker-3.json new file mode 100644 index 0000000..5e55d0e --- /dev/null +++ b/YourSpotify/UptimeKuma/docker-3.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "YourSpotify Web - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://yourspotify.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "yourspotify_web", + "docker_host": 1 +} \ No newline at end of file diff --git a/YourSpotify/UptimeKuma/http-1.json b/YourSpotify/UptimeKuma/http-1.json new file mode 100644 index 0000000..ecc72d6 --- /dev/null +++ b/YourSpotify/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "YourSpotify Server - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://yourspotifyapi.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/YourSpotify/UptimeKuma/http-2.json b/YourSpotify/UptimeKuma/http-2.json new file mode 100644 index 0000000..c623e46 --- /dev/null +++ b/YourSpotify/UptimeKuma/http-2.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "YourSpotify Web - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://yourspotify.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/YourSpotify/docker-compose.yml b/YourSpotify/docker-compose.yml new file mode 100644 index 0000000..809079c --- /dev/null +++ b/YourSpotify/docker-compose.yml @@ -0,0 +1,85 @@ +services: + mongo: + container_name: yourspotify_mongo + environment: + - PUID=1000 + - PGID=1000 + image: mongo:4.4.8 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.50 + restart: always + volumes: + - data:/data/db + - configdata:/data/configdb + + server: + container_name: yourspotify_server + depends_on: + - mongo + env_file: + - .env + image: yooooomi/your_spotify_server + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.yourspotifyserver.entrypoints: websecure + traefik.http.routers.yourspotifyserver.rule: Host(`yourspotifyapi.alexlebens.net`) + traefik.http.routers.yourspotifyserver.service: yourspotifyserver + traefik.http.services.yourspotifyserver.loadbalancer.server.port: 8080 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.51 + restart: always + + web: + container_name: yourspotify_web + environment: + API_ENDPOINT: https://yourspotifyapi.alexlebens.net + image: yooooomi/your_spotify_client + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.yourspotify.entrypoints: websecure + traefik.http.routers.yourspotify.rule: Host(`yourspotify.alexlebens.net`) + traefik.http.routers.yourspotify.service: yourspotify + traefik.http.services.yourspotify.loadbalancer.server.port: 3000 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.52 + restart: unless-stopped + +networks: + traefik: + name: traefik + external: true + +volumes: + data: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/yourspotify_data + + configdata: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/yourspotify_configdata diff --git a/n8n/.drone.yml b/n8n/.drone.yml new file mode 100644 index 0000000..6f3f905 --- /dev/null +++ b/n8n/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: n8n + URL: n8n.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for n8n failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for n8n failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for n8n succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for n8n failed. + when: + status: + - failure diff --git a/n8n/.env b/n8n/.env new file mode 100644 index 0000000..782fd5c --- /dev/null +++ b/n8n/.env @@ -0,0 +1,17 @@ +GENERIC_TIMEZONE=America/Denver +TZ=America/Denver +SSL_EMAIL=alexanderlebens@gmail.com + +DATA_FOLDER=/root/n8n/ +NODE_ENV=production +DOMAIN_NAME=alexlebens.net +SUBDOMAIN=n8n +WEBHOOK_URL=https://n8n.alexlebens.net/ + +N8N_BASIC_AUTH_USER=alexlebens +N8N_BASIC_AUTH_PASSWORD='24wrsfxv@$WRSFXV' +N8N_METRICS=true +N8N_BASIC_AUTH_ACTIVE=false +N8N_HOST=n8n.alexlebens.net +N8N_PORT=5678 +N8N_PROTOCOL=http diff --git a/n8n/README.md b/n8n/README.md new file mode 100644 index 0000000..c17e2e8 --- /dev/null +++ b/n8n/README.md @@ -0,0 +1,3 @@ +# n8n + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/n8n/status.svg)](https://drone.alexlebens.net/alexlebens/n8n) \ No newline at end of file diff --git a/n8n/UptimeKuma/docker-1.json b/n8n/UptimeKuma/docker-1.json new file mode 100644 index 0000000..db7fd88 --- /dev/null +++ b/n8n/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "n8n - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://n8n.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "n8n", + "docker_host": 1 +} \ No newline at end of file diff --git a/n8n/UptimeKuma/http-1.json b/n8n/UptimeKuma/http-1.json new file mode 100644 index 0000000..bd9c27e --- /dev/null +++ b/n8n/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "n8n - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://n8n.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/n8n/docker-compose.yml b/n8n/docker-compose.yml new file mode 100644 index 0000000..62aa239 --- /dev/null +++ b/n8n/docker-compose.yml @@ -0,0 +1,45 @@ +services: + n8n: + container_name: n8n + env_file: + - .env + image: n8nio/n8n:latest + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.n8n.entrypoints: websecure + traefik.http.routers.n8n.rule: Host(`n8n.alexlebens.net`) + traefik.http.routers.n8n.service: n8n + traefik.http.routers.n8n.middlewares: authentik@file + traefik.http.services.n8n.loadbalancer.server.port: 5678 + traefik.http.middlewares.n8n.headers.SSLRedirect: true + traefik.http.middlewares.n8n.headers.STSSeconds: 315360000 + traefik.http.middlewares.n8n.headers.browserXSSFilter: true + traefik.http.middlewares.n8n.headers.contentTypeNosniff: true + traefik.http.middlewares.n8n.headers.forceSTSHeader: true + traefik.http.middlewares.n8n.headers.SSLHost: alexlebens.net + traefik.http.middlewares.n8n.headers.STSIncludeSubdomains: true + traefik.http.middlewares.n8n.headers.STSPreload: true + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: unless-stopped + volumes: + - n8n:/home/node + +networks: + traefik: + name: traefik + external: true + +volumes: + n8n: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/n8n diff --git a/qBittorrent/.drone.yml b/qBittorrent/.drone.yml new file mode 100755 index 0000000..9f1e3c8 --- /dev/null +++ b/qBittorrent/.drone.yml @@ -0,0 +1,110 @@ +--- +kind: pipeline +type: docker +name: deploy + +environment: + PACKAGE: qBittorrent + URL: qbittorrent.alexlebens.net + +steps: + - name: Tests + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - /scripts/tests.sh + + - name: Nofification > Discord | Tests - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose validation for qBittorrent failed. + when: + status: + - failure + + - name: Configuration + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/configuration.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + UPTIMEKUMA_NAME: + from_secret: uptimekuma_name + UPTIMEKUMA_PASSWORD: + from_secret: uptimekuma_password + UPTIMEKUMA_URL: + from_secret: uptimekuma_url + when: + branch: + - main + + - name: Nofification > Discord | Configuration - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Configuration for qBittorrent failed. + when: + status: + - failure + + - name: Deploy + image: ps03fd.alexlebens.net:5000/droneimage:latest + commands: + - mkdir ~/.ssh/ + - echo "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $HOST_IP >> ~/.ssh/known_hosts + - /scripts/deploy.sh + environment: + SSH_KEY: + from_secret: ssh_key_ps03fd_drone + DOCKER_HOST: + from_secret: docker_host_ps03fd + HOST_IP: + from_secret: host_ip_ps03fd + when: + branch: + - main + + - name: Nofification > Discord | Deploy - Success + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for qBittorrent succeeded + when: + status: + - sucess + + - name: Nofification > Discord | Deploy - Failure + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + username: DroneCI - ps03fd + message: Docker compose deployment for qBittorrent failed. + when: + status: + - failure diff --git a/qBittorrent/.env b/qBittorrent/.env new file mode 100755 index 0000000..0c53300 --- /dev/null +++ b/qBittorrent/.env @@ -0,0 +1,8 @@ +VPN_ENABLED=yes +VPN_TYPE=wireguard +LAN_NETWORK=192.168.1.0/24,172.27.0.0/16,172.24.0.0/16 +RESTART_CONTAINER=no +ADDITIONAL_PORTS=54944 +UMASK=002 +PUID=1024 +GUID=65536 \ No newline at end of file diff --git a/qBittorrent/.exp.env b/qBittorrent/.exp.env new file mode 100755 index 0000000..c9ca0b6 --- /dev/null +++ b/qBittorrent/.exp.env @@ -0,0 +1,4 @@ +QBITTORRENT_PORT=8080 +QBITTORRENT_HOST=172.27.1.20 +QBITTORRENT_USER='torrent' +QBITTORRENT_PASS='24wrsfxv@$WRSFXV' \ No newline at end of file diff --git a/qBittorrent/.unp.env b/qBittorrent/.unp.env new file mode 100755 index 0000000..7ecb41c --- /dev/null +++ b/qBittorrent/.unp.env @@ -0,0 +1,37 @@ +TZ=America/Denver +# General config +UN_DEBUG=false +UN_LOG_FILE= +UN_LOG_FILES=10 +UN_LOG_FILE_MB=10 +UN_INTERVAL=2m +UN_START_DELAY=1m +UN_RETRY_DELAY=5m +UN_MAX_RETRIES=3 +UN_PARALLEL=3 +UN_FILE_MODE=0777 +UN_DIR_MODE=0777 +# Sonarr Config +UN_SONARR_0_URL=http://sonarr:8989 +UN_SONARR_0_API_KEY=7f0dfeea4b9f410d96b5ffa2f809d1e8 +UN_SONARR_0_PATHS_0=/mnt/store/Torrent/FINISHED/SONARR +UN_SONARR_0_PROTOCOLS=torrent +UN_SONARR_0_TIMEOUT=10s +UN_SONARR_0_DELETE_ORIG=false +UN_SONARR_0_DELETE_DELAY=30m +# Radarr Config +UN_RADARR_0_URL=http://radarr:7878 +UN_RADARR_0_API_KEY=e6e3d6f4aafe4e499d970cfcbf042db9 +UN_RADARR_0_PATHS_0=/mnt/store/Torrent/FINISHED/RADARR +UN_RADARR_0_PROTOCOLS=torrent +UN_RADARR_0_TIMEOUT=10s +UN_RADARR_0_DELETE_ORIG=false +UN_RADARR_0_DELETE_DELAY=30m +# Lidarr Config +UN_LIDARR_0_URL=http://lidarr:8686 +UN_LIDARR_0_API_KEY=d25bd6d24f4e4b90a21fc5b70bcb9fd9 +UN_LIDARR_0_PATHS_0=/mnt/store/Torrent/FINISHED/RADARR +UN_LIDARR_0_PROTOCOLS=torrent +UN_LIDARR_0_TIMEOUT=10s +UN_LIDARR_0_DELETE_ORIG=false +UN_LIDARR_0_DELETE_DELAY=30m \ No newline at end of file diff --git a/qBittorrent/Files/qbittorrent_config/qBittorrent/config/categories.json b/qBittorrent/Files/qbittorrent_config/qBittorrent/config/categories.json new file mode 100755 index 0000000..7ea7a0e --- /dev/null +++ b/qBittorrent/Files/qbittorrent_config/qBittorrent/config/categories.json @@ -0,0 +1,56 @@ +{ + "ALPHA": { + "save_path": "/mnt/store/Torrent/FINISHED/ALPHA" + }, + "Avistaz": { + "save_path": "/mnt/store/Torrent/FINISHED/AVISTAZ" + }, + "CRT": { + "save_path": "/mnt/store/Torrent/FINISHED/CRT" + }, + "Cinemaz": { + "save_path": "/mnt/store/Torrent/FINISHED/CINEMAZ" + }, + "Save": { + "save_path": "/mnt/store/Torrent/FINISHED/SAVE" + }, + "TorrentLeech": { + "save_path": "/mnt/store/Torrent/FINISHED/TORRENTLEECH" + }, + "books-readarr-books": { + "save_path": "/mnt/store/Torrent/FINISHED/READARR-BOOKS" + }, + "books-readarr-audio": { + "save_path": "/mnt/store/Torrent/FINISHED/READARR-AUDIO" + }, + "movies-radarr": { + "save_path": "/mnt/store/Torrent/FINISHED/RADARR" + }, + "movies-radarr-anime": { + "save_path": "/mnt/store/Torrent/FINISHED/RADARR-ANIME" + }, + "movies-radarr-art": { + "save_path": "/mnt/store/Torrent/FINISHED/RADARR-ART" + }, + "movies-radarr-documentaries": { + "save_path": "/mnt/store/Torrent/FINISHED/RADARR-DOCU" + }, + "movies-radarr-standup": { + "save_path": "/mnt/store/Torrent/FINISHED/RADARR-SU" + }, + "music-lidarr": { + "save_path": "/mnt/store/Torrent/FINISHED/LIDARR" + }, + "prowlarr": { + "save_path": "/mnt/store/Torrent/FINISHED/SAVE" + }, + "tv-sonarr": { + "save_path": "/mnt/store/Torrent/FINISHED/SONARR" + }, + "tv-sonarr-anime": { + "save_path": "/mnt/store/Torrent/FINISHED/SONARR-ANIME" + }, + "tv-sonarr-documentaries": { + "save_path": "/mnt/store/Torrent/FINISHED/SONARR-DOCU" + } +} \ No newline at end of file diff --git a/qBittorrent/Files/qbittorrent_config/qBittorrent/config/qBittorrent.conf b/qBittorrent/Files/qbittorrent_config/qBittorrent/config/qBittorrent.conf new file mode 100755 index 0000000..c1b262a --- /dev/null +++ b/qBittorrent/Files/qbittorrent_config/qBittorrent/config/qBittorrent.conf @@ -0,0 +1,106 @@ +[Application] +MemoryWorkingSetLimit=2048 + +[AutoRun] +OnTorrentAdded\Enabled=false +OnTorrentAdded\Program= +enabled=false +program= + +[BitTorrent] +Session\AlternativeGlobalDLSpeedLimit=1000 +Session\AlternativeGlobalUPSpeedLimit=1000 +Session\BTProtocol=TCP +Session\DHTEnabled=true +Session\DefaultSavePath=/mnt/store/Torrent/FINISHED/SAVE +Session\DisableAutoTMMByDefault=false +Session\DisableAutoTMMTriggers\CategorySavePathChanged=false +Session\DisableAutoTMMTriggers\DefaultSavePathChanged=false +Session\DiskCacheTTL=600 +Session\DiskQueueSize=2097152 +Session\ExcludedFileNames= +Session\GlobalDLSpeedLimit=51200 +Session\GlobalMaxRatio=-1 +Session\GlobalUPSpeedLimit=20500 +Session\IgnoreLimitsOnLAN=true +Session\Interface=wg0 +Session\InterfaceAddress=10.64.2.107 +Session\InterfaceName=wg0 +Session\LSDEnabled=true +Session\MaxActiveCheckingTorrents=3 +Session\MaxConnections=-1 +Session\MaxConnectionsPerTorrent=50 +Session\MaxRatioAction=2 +Session\MaxUploads=-1 +Session\MaxUploadsPerTorrent=10 +Session\PeXEnabled=true +Session\Port=54944 +Session\Preallocation=true +Session\QueueingSystemEnabled=false +Session\SSRFMitigation=false +Session\TempPath=/mnt/store/Torrent/DOWNLOADING +Session\TempPathEnabled=true +Session\TorrentExportDirectory=/mnt/store/Torrent/TORRENT/SAVE +Session\UseAlternativeGlobalSpeedLimit=false +Session\UseRandomPort=true +Session\ValidateHTTPSTrackerCertificate=false +Session\uTPRateLimited=false + +[Core] +AutoDeleteAddedTorrentFile=Never + +[Meta] +MigrationVersion=4 + +[Network] +PortForwardingEnabled=false +Proxy\OnlyForTorrents=false + +[Preferences] +Advanced\RecheckOnCompletion=true +Advanced\trackerPort=9000 +Advanced\trackerPortForwarding=false +Connection\ResolvePeerCountries=true +DynDNS\DomainName=changeme.dyndns.org +DynDNS\Enabled=false +DynDNS\Password= +DynDNS\Service=DynDNS +DynDNS\Username= +General\Locale= +MailNotification\email= +MailNotification\enabled=false +MailNotification\password= +MailNotification\req_auth=true +MailNotification\req_ssl=false +MailNotification\sender=qBittorrent_notification@example.com +MailNotification\smtp_server=smtp.changeme.com +MailNotification\username= +WebUI\Address=172.27.1.20 +WebUI\AlternativeUIEnabled=false +WebUI\AuthSubnetWhitelist=192.168.1.0/24, 172.27.0.0/16, 172.24.0.0/16 +WebUI\AuthSubnetWhitelistEnabled=false +WebUI\BanDuration=0 +WebUI\CSRFProtection=false +WebUI\ClickjackingProtection=false +WebUI\CustomHTTPHeaders="content-security-policy: default-src 'self'; style-src 'self' 'unsafe-inline' themepark.alexlebens.net raw.githubusercontent.com use.fontawesome.com; img-src 'self' themepark.alexlebens.net raw.githubusercontent.com data:; script-src 'self' 'unsafe-inline'; object-src 'none'; form-action 'self'; frame-ancestors 'self'; font-src use.fontawesome.com;\n" +WebUI\CustomHTTPHeadersEnabled=true +WebUI\HTTPS\CertificatePath= +WebUI\HTTPS\Enabled=false +WebUI\HTTPS\KeyPath= +WebUI\HostHeaderValidation=false +WebUI\LocalHostAuth=true +WebUI\MaxAuthenticationFailCount=0 +WebUI\Password_PBKDF2="@ByteArray(Cs3hXfaExC4CSb2veRYppg==:c9Idm6dkoAAumrSsWq5w+SCjkZmkre2SrO602MHBEaxUoaUNI5ucUAFZ4uiydNFt/5Og3hjnTLPHQOA9U/Oyvw==)" +WebUI\Port=8080 +WebUI\ReverseProxySupportEnabled=false +WebUI\RootFolder= +WebUI\SecureCookie=true +WebUI\ServerDomains=* +WebUI\SessionTimeout=3600 +WebUI\TrustedReverseProxiesList= +WebUI\UseUPnP=false +WebUI\Username=torrent + +[RSS] +AutoDownloader\DownloadRepacks=false +AutoDownloader\SmartEpisodeFilter=s(\\d+)e(\\d+), (\\d+)x(\\d+), "(\\d{4}[.\\-]\\d{1,2}[.\\-]\\d{1,2})", "(\\d{1,2}[.\\-]\\d{1,2}[.\\-]\\d{4})" diff --git a/qBittorrent/Files/qbittorrent_config/qBittorrent/config/watched_folders.json b/qBittorrent/Files/qbittorrent_config/qBittorrent/config/watched_folders.json new file mode 100755 index 0000000..cfc4256 --- /dev/null +++ b/qBittorrent/Files/qbittorrent_config/qBittorrent/config/watched_folders.json @@ -0,0 +1,18 @@ +{ + "/mnt/store/Torrent/TORRENT/IMPORT": { + "add_torrent_params": { + "category": "Save", + "download_limit": -1, + "download_path": "/mnt/store/Torrent/FINISHED/SAVE", + "operating_mode": "AutoManaged", + "ratio_limit": -2, + "save_path": "", + "seeding_time_limit": -2, + "skip_checking": false, + "tags": [ + ], + "upload_limit": -1 + }, + "recursive": false + } +} diff --git a/qBittorrent/Files/qbittorrent_config/wireguard/all/us-den-wg-001.conf b/qBittorrent/Files/qbittorrent_config/wireguard/all/us-den-wg-001.conf new file mode 100644 index 0000000..97d8174 --- /dev/null +++ b/qBittorrent/Files/qbittorrent_config/wireguard/all/us-den-wg-001.conf @@ -0,0 +1,9 @@ +[Interface] +PrivateKey = aKuw2LfrVCdIcs+ex8TeEjhSoC91+P9a83lEy6Y7rFI= +Address = 10.64.2.107/32,fc00:bbbb:bbbb:bb01::1:26a/128 +DNS = 10.64.0.1 + +[Peer] +PublicKey = 3clcc9092sgEsFGrUfcCBUzT9tN6uy12t77uTmSLqwc= +AllowedIPs = 0.0.0.0/0,::0/0 +Endpoint = 198.44.128.194:54944 \ No newline at end of file diff --git a/qBittorrent/Files/qbittorrent_config/wireguard/all/us-den-wg-002.conf b/qBittorrent/Files/qbittorrent_config/wireguard/all/us-den-wg-002.conf new file mode 100644 index 0000000..449e307 --- /dev/null +++ b/qBittorrent/Files/qbittorrent_config/wireguard/all/us-den-wg-002.conf @@ -0,0 +1,9 @@ +[Interface] +PrivateKey = aKuw2LfrVCdIcs+ex8TeEjhSoC91+P9a83lEy6Y7rFI= +Address = 10.64.2.107/32,fc00:bbbb:bbbb:bb01::1:26a/128 +DNS = 10.64.0.1 + +[Peer] +PublicKey = jh3kAesaULbfC0h7VHwNPiTrz04vPC0Aa4kwRjy2+2Q= +AllowedIPs = 0.0.0.0/0,::0/0 +Endpoint = 198.44.128.162:54944 \ No newline at end of file diff --git a/qBittorrent/Files/qbittorrent_config/wireguard/all/us-den-wg-003.conf b/qBittorrent/Files/qbittorrent_config/wireguard/all/us-den-wg-003.conf new file mode 100644 index 0000000..c051bca --- /dev/null +++ b/qBittorrent/Files/qbittorrent_config/wireguard/all/us-den-wg-003.conf @@ -0,0 +1,9 @@ +[Interface] +PrivateKey = aKuw2LfrVCdIcs+ex8TeEjhSoC91+P9a83lEy6Y7rFI= +Address = 10.64.2.107/32,fc00:bbbb:bbbb:bb01::1:26a/128 +DNS = 10.64.0.1 + +[Peer] +PublicKey = v7CG+wctmTw9LxuWBp3tGARithgbDU7nZZduSefkqzg= +AllowedIPs = 0.0.0.0/0,::0/0 +Endpoint = 198.44.128.130:54944 \ No newline at end of file diff --git a/qBittorrent/Files/qbittorrent_config/wireguard/all/us-den-wg-101.conf b/qBittorrent/Files/qbittorrent_config/wireguard/all/us-den-wg-101.conf new file mode 100644 index 0000000..e556b01 --- /dev/null +++ b/qBittorrent/Files/qbittorrent_config/wireguard/all/us-den-wg-101.conf @@ -0,0 +1,9 @@ +[Interface] +PrivateKey = aKuw2LfrVCdIcs+ex8TeEjhSoC91+P9a83lEy6Y7rFI= +Address = 10.64.2.107/32,fc00:bbbb:bbbb:bb01::1:26a/128 +DNS = 10.64.0.1 + +[Peer] +PublicKey = 74U+9EQrMwVOafgXuSp8eaKG0+p4zjSsDe3J7+ojhx0= +AllowedIPs = 0.0.0.0/0,::0/0 +Endpoint = 37.19.210.1:54944 \ No newline at end of file diff --git a/qBittorrent/Files/qbittorrent_config/wireguard/all/us-den-wg-103.conf b/qBittorrent/Files/qbittorrent_config/wireguard/all/us-den-wg-103.conf new file mode 100644 index 0000000..a94f8a9 --- /dev/null +++ b/qBittorrent/Files/qbittorrent_config/wireguard/all/us-den-wg-103.conf @@ -0,0 +1,9 @@ +[Interface] +PrivateKey = aKuw2LfrVCdIcs+ex8TeEjhSoC91+P9a83lEy6Y7rFI= +Address = 10.64.2.107/32,fc00:bbbb:bbbb:bb01::1:26a/128 +DNS = 10.64.0.1 + +[Peer] +PublicKey = Az+PGHQ0xFElmRBv+PKZuRnEzKPrPtUpRD3vpxb4si4= +AllowedIPs = 0.0.0.0/0,::0/0 +Endpoint = 37.19.210.27:54944 \ No newline at end of file diff --git a/qBittorrent/Files/qbittorrent_config/wireguard/wg0.conf b/qBittorrent/Files/qbittorrent_config/wireguard/wg0.conf new file mode 100755 index 0000000..97d8174 --- /dev/null +++ b/qBittorrent/Files/qbittorrent_config/wireguard/wg0.conf @@ -0,0 +1,9 @@ +[Interface] +PrivateKey = aKuw2LfrVCdIcs+ex8TeEjhSoC91+P9a83lEy6Y7rFI= +Address = 10.64.2.107/32,fc00:bbbb:bbbb:bb01::1:26a/128 +DNS = 10.64.0.1 + +[Peer] +PublicKey = 3clcc9092sgEsFGrUfcCBUzT9tN6uy12t77uTmSLqwc= +AllowedIPs = 0.0.0.0/0,::0/0 +Endpoint = 198.44.128.194:54944 \ No newline at end of file diff --git a/qBittorrent/Files/qbittorrent_unpackerr_config/unpackerr.conf b/qBittorrent/Files/qbittorrent_unpackerr_config/unpackerr.conf new file mode 100755 index 0000000..7ad9d61 --- /dev/null +++ b/qBittorrent/Files/qbittorrent_unpackerr_config/unpackerr.conf @@ -0,0 +1,210 @@ +### GENERAL + +debug = false +quiet = false +activity = false +log_queues = "1m" +# log_file = '/tmp/unpackerr.log' +log_files = 10 +log_file_mb = 10 +interval = "2m" +start_delay = "5m" +retry_delay = "5m" +parallel = 1 +file_mode = "0777" +dir_mode = "0777" + + +### SONARR + +# Primary Sonarr +[[sonarr]] +url = "http://sonarr:8989" +api_key = "7f0dfeea4b9f410d96b5ffa2f809d1e8" +paths = ['/mnt/store/Torrent/FINISHED/SONARR'] +protocols = "torrent" +timeout = "10s" +delete_delay = "15m" +delete_orig = false +syncthing = false + +# Anime Sonarr +[[sonarr]] +url = "http://sonarr_anime:8989" +api_key = "a2f10e70559c4ee3b8ff1d6cdc5a41f1" +paths = ['/mnt/store/Torrent/FINISHED/SONARR-ANIME'] +protocols = "torrent" +timeout = "10s" +delete_delay = "15m" +delete_orig = false +syncthing = false + +# Documentary Sonarr +[[sonarr]] +url = "http://sonarr_documentaries:8989" +api_key = "3ed988c3731b45ad8124b7d55b620d6b" +paths = ['/mnt/store/Torrent/FINISHED/SONARR-DOCU'] +protocols = "torrent" +timeout = "10s" +delete_delay = "15m" +delete_orig = false +syncthing = false + + +### RADARR + +# Primary Radarr +[[radarr]] +url = "http://radarr:7878" +api_key = "e6e3d6f4aafe4e499d970cfcbf042db9" +paths = ['/mnt/store/Torrent/FINISHED/RADARR'] +protocols = "torrent" +timeout = "10s" +delete_delay = "5m" +delete_orig = false +syncthing = false + +# Anime Radarr +[[radarr]] +url = "http://radarr_anime:7878" +api_key = "fb126bad31d64d43bb669ad81329954d" +paths = ['/mnt/store/Torrent/FINISHED/RADARR-ANIME'] +protocols = "torrent" +timeout = "10s" +delete_delay = "5m" +delete_orig = false +syncthing = false + +# Art Radarr +[[radarr]] +url = "http://radarr_art:7878" +api_key = "32365893c4234f8a9ad96d68d6e7a520" +paths = ['/mnt/store/Torrent/FINISHED/RADARR-ART'] +protocols = "torrent" +timeout = "10s" +delete_delay = "5m" +delete_orig = false +syncthing = false + +# Documentary Radarr +[[radarr]] +url = "http://radarr_documentaries:7878" +api_key = "fd03f47363324096a56d0a453623420b" +paths = ['/mnt/store/Torrent/FINISHED/RADARR-DOCU'] +protocols = "torrent" +timeout = "10s" +delete_delay = "5m" +delete_orig = false +syncthing = false + +# Stand Up Radarr +[[radarr]] +url = "http://radarr_standup:7878" +api_key = "c7c425b3fbcf4112895aceec7729f4d1" +paths = ['/mnt/store/Torrent/FINISHED/RADARR-SU'] +protocols = "torrent" +timeout = "10s" +delete_delay = "5m" +delete_orig = false +syncthing = false + + +### LIDARR + +# Primary Lidarr +[[lidarr]] +url = "http://lidarr:8686" +api_key = "d25bd6d24f4e4b90a21fc5b70bcb9fd9" +paths = ['/mnt/store/Torrent/FINISHED/LIDARR'] +protocols = "torrent" +timeout = "10s" +delete_delay = "5m" +delete_orig = false +syncthing = false + + +### READARR + +# Readarr Books +[[readarr]] +url = "http://readarr_books:8787" +api_key = "1c1b9d5e69ec4b2aa1a85301d48d1573" +paths = ['/mnt/store/Torrent/FINISHED/READARR-BOOKS'] +protocols = "torrent" +timeout = "10s" +delete_delay = "5m" +delete_orig = false +syncthing = false + +# Readarr Audio +[[readarr]] +url = "http://readarr_audio:8787" +api_key = "3be1176f6e6b461fa4f5eab9d39fd29f" +paths = ['/mnt/store/Torrent/FINISHED/READARR-AUDIO'] +protocols = "torrent" +timeout = "10s" +delete_delay = "5m" +delete_orig = false +syncthing = false + + +### OTHER + +#[[folder]] +# path = '/some/folder/to/watch' +## Path to extract files to. The default (leaving this blank) is the same as `path` (above). +# extract_path = "" +## Delete extracted or original files this long after extraction. +## The default is 0. Set to 0 to disable all deletes. Uncomment it to enable deletes. Uses Go Duration. +# delete_after = "10m" +## Delete extracted files after successful extraction? true/false, no quotes. Honors delete_after. +# delete_files = false +## Delete original items after successful extraction? true/false, no quotes. Honors delete_after. +# delete_original = false +## Disable extraction log (unpackerred.txt) file creation? true/false, no quotes. +# disable_log = false +## Move extracted files into original folder? If false, files go into an _unpackerred folder. +# move_back = false +## Set this to true if you want this app to extract ISO files with .iso extension. +# extract_isos = false + + +################ +### Webhooks ### +################ +# Sends a webhook when an extraction queues, starts, finishes, and/or is deleted. +# Created to integrate with notifiarr.com. +# Also works natively with Discord.com, Telegram.org, and Slack.com webhooks. +# Can possibly be used with other services by providing a custom template_path. +###### Don't forget to uncomment [[webhook]] and url at a minimum !!!! +#[[webhook]] +# url = "https://notifiarr.com/api/v1/notification/unpackerr/api_key_from_notifiarr_com" +# name = "" # Set this to hide the URL in logs. +# silent = false # do not log success (less log spam) +# events = [0] # list of event ids to include, 0 == all. +## Advanced Optional Webhook Configuration +# nickname = "" # Used in Discord and Slack templates as bot name, in Telegram as chat_id. +# channel = "" # Also passed into templates. Used in Slack templates for destination channel. +# exclude = [] # list of apps to exclude, ie. ["radarr", "lidarr"] +# template_path = "" # Override internal webhook template for discord.com or other hooks. +# template = "" # Override automatic template detection. Values: notifiarr, discord, telegram, gotify, pushover, slack +# ignore_ssl = false # Set this to true to ignore the SSL certificate on the server. +# timeout = "10s" # You can adjust how long to wait for a server response. +# content_type = "application/json" # If your custom template uses another MIME type, set this. + + +##################### +### Command Hooks ### +##################### +# Executes a script or command when an extraction queues, starts, finishes, and/or is deleted. +# All data is passed in as environment variables. Try /usr/bin/env to see what variables are available. +###### Don't forget to uncomment [[cmdhook]] and url at a minimum !!!! +#[[cmdhook]] +# command = '/my/cool/app' # Path to command or script. +# shell = false # Runs the command inside /bin/sh ('nix) or cmd.exe (Windows). +# name = "" # Provide an optional name for logging. +# silent = false # Hides command output from logs. +# events = [0] # list of event ids to include, 0 == all. +## Optional Command Hook Configuration +# exclude = [] # list of apps to exclude, ie. ["radarr", "lidarr"] +# timeout = "10s" # You can adjust how long to wait for a server response. \ No newline at end of file diff --git a/qBittorrent/README.md b/qBittorrent/README.md new file mode 100755 index 0000000..d1c425d --- /dev/null +++ b/qBittorrent/README.md @@ -0,0 +1,3 @@ +# qBittorrent + +[![Build Status](https://drone.alexlebens.net/api/badges/alexlebens/qBittorrent/status.svg)](https://drone.alexlebens.net/alexlebens/qBittorrent) \ No newline at end of file diff --git a/qBittorrent/UptimeKuma/docker-1.json b/qBittorrent/UptimeKuma/docker-1.json new file mode 100755 index 0000000..345bf22 --- /dev/null +++ b/qBittorrent/UptimeKuma/docker-1.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "qBittorrent - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://qbittorrent.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "qbittorrent", + "docker_host": 1 +} \ No newline at end of file diff --git a/qBittorrent/UptimeKuma/docker-2.json b/qBittorrent/UptimeKuma/docker-2.json new file mode 100755 index 0000000..e5bca82 --- /dev/null +++ b/qBittorrent/UptimeKuma/docker-2.json @@ -0,0 +1,17 @@ +{ + "type": "docker", + "name": "qBittorrent Exporter - Docker", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://qbittorrent.alexlebens.net:9000/metrics", + "accepted_statuscodes": [ + "200-299" + ], + "docker_container": "qbittorrent_exporter", + "docker_host": 1 +} \ No newline at end of file diff --git a/qBittorrent/UptimeKuma/http-1.json b/qBittorrent/UptimeKuma/http-1.json new file mode 100755 index 0000000..8e2e7f3 --- /dev/null +++ b/qBittorrent/UptimeKuma/http-1.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "qBittorrent - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "https://qbittorrent.alexlebens.net", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/qBittorrent/UptimeKuma/http-2.json b/qBittorrent/UptimeKuma/http-2.json new file mode 100755 index 0000000..e68c7e3 --- /dev/null +++ b/qBittorrent/UptimeKuma/http-2.json @@ -0,0 +1,15 @@ +{ + "type": "http", + "name": "qBittorrent Exporter - Web", + "interval": 60, + "retryInterval": 20, + "maxretries": 1, + "notificationIDList": [ + 3, + 4 + ], + "url": "http://qbittorrent_exporter:8000/metrics", + "accepted_statuscodes": [ + "200-299" + ] +} \ No newline at end of file diff --git a/qBittorrent/docker-compose.yml b/qBittorrent/docker-compose.yml new file mode 100755 index 0000000..06cabc2 --- /dev/null +++ b/qBittorrent/docker-compose.yml @@ -0,0 +1,143 @@ +services: + qbittorrent: + cap_add: + - NET_ADMIN + - SYS_MODULE + container_name: qbittorrent + env_file: + - .env + image: dyonr/qbittorrentvpn + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.qbittorrent.entrypoints: websecure + traefik.http.routers.qbittorrent.rule: Host(`qbittorrent.alexlebens.net`) + traefik.http.routers.qbittorrent.service: qbittorrent + traefik.http.routers.qbittorrent.middlewares: qbittorrent-theme@file + traefik.http.services.qbittorrent.loadbalancer.server.port: 8080 + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.20 + privileged: true + restart: always + sysctls: + - net.ipv6.conf.all.disable_ipv6=0 + - net.ipv4.conf.all.src_valid_mark=1 + user: root + volumes: + - config:/config + - downloads:/downloads + - torrent_nfs:/mnt/store/Torrent + + qbittorrent_exporter: + container_name: qbittorrent_exporter + depends_on: + - qbittorrent + env_file: + - .exp.env + image: esanchezm/prometheus-qbittorrent-exporter + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: + ipv4_address: 172.27.1.21 + restart: always + + unpackerr: + container_name: qbittorrent_unpackerr + env_file: + - .unp.env + image: hotio/unpackerr + logging: + driver: json-file + options: + max-size: 50m + max-file: "3" + networks: + traefik: null + restart: always + privileged: true + user: root + security_opt: + - no-new-privileges:true + volumes: + - unpconfig:/config + - unplogs:/tmp + - torrent_nfs_finished:/mnt/store/Torrent/FINISHED + +networks: + traefik: + name: traefik + external: true + +volumes: + config: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/qbittorrent_config + + downloads: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/qbittorrent_downloads + + unplogs: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/qbittorrent_unpackerr + + unpconfig: + driver: local + driver_opts: + type: none + o: bind + device: /var/lib/docker/volumes/partition/qbittorrent_unpackerr_config + +# torrent_cifs_finished: +# driver: local +# driver_opts: +# type: cifs +# o: username=storage,password=24wrsfxv@$$WRSFXV,file_mode=0777,dir_mode=0777 +# device: //192.168.1.194/Storage/Torrent/FINISHED + +# torrent_nfs_downloading: +# driver: local +# driver_opts: +# type: nfs +# o: addr=192.168.1.194,nfsvers=4 +# device: :/volume2/Storage/Torrent/DOWNLOADING + +# torrent_nfs_torrent: +# driver: local +# driver_opts: +# type: nfs +# o: addr=192.168.1.194,nfsvers=4 +# device: :/volume2/Storage/Torrent/TORRENT + + torrent_nfs: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: :/volume2/Storage/Torrent + + torrent_nfs_finished: + driver: local + driver_opts: + type: nfs + o: addr=192.168.1.194,nfsvers=4 + device: :/volume2/Storage/Torrent/FINISHED