diff --git a/apps/2fauth/metadata/logo.jpg b/apps/2fauth/metadata/logo.jpg index d7f78b82..20b8d393 100644 Binary files a/apps/2fauth/metadata/logo.jpg and b/apps/2fauth/metadata/logo.jpg differ diff --git a/apps/__tests__/apps.test.ts b/apps/__tests__/apps.test.ts index 30814148..98e154a7 100644 --- a/apps/__tests__/apps.test.ts +++ b/apps/__tests__/apps.test.ts @@ -31,6 +31,8 @@ const networkExceptions = [ "plex", "zerotier", "gladys", + "scrypted", + "homebridge", ]; const getAppConfigs = (): AppConfig[] => { const apps: AppConfig[] = []; diff --git a/apps/homebridge/config.json b/apps/homebridge/config.json new file mode 100644 index 00000000..428cee6d --- /dev/null +++ b/apps/homebridge/config.json @@ -0,0 +1,15 @@ +{ + "$schema": "../schema.json", + "name": "Home Bridge", + "available": true, + "port": 8581, + "tipi_version": 1, + "version": "latest", + "id": "homebridge", + "categories": ["automation"], + "description": "HomeKit support for the impatient.", + "short_desc": "HomeKit support for the impatient. ", + "author": "ArneNaessens", + "source": "https://github.com/homebridge/homebridge", + "form_fields": [] +} diff --git a/apps/homebridge/docker-compose.yml b/apps/homebridge/docker-compose.yml new file mode 100644 index 00000000..94a8ed84 --- /dev/null +++ b/apps/homebridge/docker-compose.yml @@ -0,0 +1,18 @@ + +version: '3' +services: + homebridge: + container_name: homebridge + image: homebridge/homebridge:latest + restart: unless-stopped + privileged: true + network_mode: host + environment: + - TZ=${TZ} + volumes: + - ${APP_DATA_DIR}/data/homebridge:/homebridge + logging: + driver: json-file + options: + max-size: "10mb" + max-file: "1" \ No newline at end of file diff --git a/apps/homebridge/metadata/description.md b/apps/homebridge/metadata/description.md new file mode 100644 index 00000000..e18756ed --- /dev/null +++ b/apps/homebridge/metadata/description.md @@ -0,0 +1,22 @@ +# Homebridge + + +**Homebridge** is a lightweight NodeJS server you can run on your home network that emulates the iOS HomeKit API. It supports Plugins, which are community-contributed modules that provide a basic bridge from HomeKit to various 3rd-party APIs provided by manufacturers of "smart home" devices. + +Since Siri supports devices added through HomeKit, this means that with Homebridge you can ask Siri to control devices that don't have any support for HomeKit at all. For instance, using just some of the available plugins, you can say: + +- _Siri, unlock the back door._ \[pictured to the right\] +- _Siri, open the garage door._ +- _Siri, turn on the coffee maker._ +- _Siri, turn on the living room lights._ +- _Siri, good morning!_ + +You can explore all available plugins at the NPM website by [searching for the keyword `homebridge-plugin`](https://www.npmjs.com/search?q=homebridge-plugin). + +## [](https://github.com/homebridge/homebridge#community)Community + +The official Homebridge Discord server and Reddit community are where users can discuss Homebridge and ask for help. + + [![Homebridge Discord](https://camo.githubusercontent.com/11240ac552626b069352ce3b64e2502aff52aa97481699fc281dfa678eb141ca/68747470733a2f2f646973636f72646170702e636f6d2f6170692f6775696c64732f3433323636333333303238313232363237302f7769646765742e706e673f7374796c653d62616e6e657232)](https://discord.gg/kqNCe2D) [![Homebridge Reddit](https://github.com/homebridge/homebridge/raw/master/.github/homebridge-reddit.svg?sanitize=true)](https://www.reddit.com/r/homebridge/) + +HomeKit communities can also be found on both [Discord](https://discord.gg/RcV7fa8) and [Reddit](https://www.reddit.com/r/homekit). \ No newline at end of file diff --git a/apps/homebridge/metadata/logo.jpg b/apps/homebridge/metadata/logo.jpg new file mode 100644 index 00000000..222da0a6 Binary files /dev/null and b/apps/homebridge/metadata/logo.jpg differ diff --git a/apps/linkwarden/metadata/logo.jpg b/apps/linkwarden/metadata/logo.jpg index 752347f9..f4ac17a8 100644 Binary files a/apps/linkwarden/metadata/logo.jpg and b/apps/linkwarden/metadata/logo.jpg differ diff --git a/apps/portainer/config.json b/apps/portainer/config.json index 7ae34755..dadffbe4 100644 --- a/apps/portainer/config.json +++ b/apps/portainer/config.json @@ -6,8 +6,8 @@ "exposable": true, "https": true, "id": "portainer", - "tipi_version": 12, - "version": "2.18.4-alpine", + "tipi_version": 13, + "version": "2.19.0-alpine", "categories": [ "utilities" ], diff --git a/apps/portainer/docker-compose.yml b/apps/portainer/docker-compose.yml index 57e943e8..12b8352f 100644 --- a/apps/portainer/docker-compose.yml +++ b/apps/portainer/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: portainer: - image: portainer/portainer-ce:2.18.4-alpine + image: portainer/portainer-ce:2.19.0-alpine container_name: portainer restart: unless-stopped ports: diff --git a/apps/scrypted/config.json b/apps/scrypted/config.json new file mode 100644 index 00000000..cb995980 --- /dev/null +++ b/apps/scrypted/config.json @@ -0,0 +1,24 @@ +{ + "$schema": "../schema.json", + "name": "Scrypted", + "port": 10443, + "available": true, + "exposable": false, + "https": true, + "id": "scrypted", + "tipi_version": 4, + "version": "18-jammy-full.s6-v0.41.0", + "categories": ["security"], + "description": "Scrypted is a high performance home video integration and automation platform", + "short_desc": "High performance home video integration and automation platform", + "author": "Koush", + "source": "https://github.com/koush/scrypted", + "form_fields": [ + { + "type": "random", + "label": "Scrypted Bearer Token", + "min": 32, + "env_variable": "SCRYPTED_BEARER_TOKEN" + } + ] +} diff --git a/apps/scrypted/docker-compose.yml b/apps/scrypted/docker-compose.yml new file mode 100644 index 00000000..732127ee --- /dev/null +++ b/apps/scrypted/docker-compose.yml @@ -0,0 +1,27 @@ +version: "3" + +services: + scrypted: + container_name: scrypted + image: koush/scrypted:18-jammy-full.s6-v0.41.0 + privileged: true + volumes: + - ${APP_DATA_DIR}/data/scrypted/database:/server/volume + - ${ROOT_FOLDER_HOST}/media/data/NVR/scrypted:/nvr + #- /var/run/dbus:/var/run/dbus + #- /var/run/avahi-daemon/socket:/var/run/avahi-daemon/socket + environment: + - SCRYPTED_WEBHOOK_UPDATE_AUTHORIZATION=${SCRYPTED_BEARER_TOKEN} + - SCRYPTED_DOCKER_AVAHI=false + #- SCRYPTED_WEBHOOK_UPDATE=${APP_PROTOCOL:-http}://${APP_DOMAIN}/v1/update + devices: + - /dev/bus/usb:/dev/bus/usb + - /dev/dri:/dev/dri + restart: unless-stopped + network_mode: host + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "10" + diff --git a/apps/scrypted/metadata/description.md b/apps/scrypted/metadata/description.md new file mode 100644 index 00000000..d083e2cd --- /dev/null +++ b/apps/scrypted/metadata/description.md @@ -0,0 +1,23 @@ +# Install Info + +When installing the NVR Plugin, you can set the NVR Storage path as `/nvr`. See below where that folder is mounted! +## Folder Info + +| Root Folder | Container Folder | +|-------------------------------|------------------| +| /runtipi/app-data/nvr/data/scrypted/database | /server/volume | +| /runtipi/media/data/NVR/scrypted | /nvr | + +# Scrypted + +Scrypted is a high performance home video integration platform and NVR with smart detections. [Instant, low latency, streaming](https://streamable.com/xbxn7z) to HomeKit, Google Home, and Alexa. Supports most cameras. [Learn more](https://docs.scrypted.app). + +[![](https://user-images.githubusercontent.com/73924/252752480-57e1d556-cd3d-4448-81f9-a6c51b6513de.png)](https://user-images.githubusercontent.com/73924/252752480-57e1d556-cd3d-4448-81f9-a6c51b6513de.png) + +## Installation and Documentation + +Installation and camera onboarding instructions can be found in the [docs](https://docs.scrypted.app). + +## Community + +Scrypted has active communities on [Discord](https://discord.gg/DcFzmBHYGq), [Reddit](https://reddit.com/r/scrypted), and [Github](https://github.com/koush/scrypted). Check them out if you have questions! \ No newline at end of file diff --git a/apps/scrypted/metadata/logo.jpg b/apps/scrypted/metadata/logo.jpg new file mode 100644 index 00000000..e1844c06 Binary files /dev/null and b/apps/scrypted/metadata/logo.jpg differ diff --git a/apps/stirling-pdf/config.json b/apps/stirling-pdf/config.json index 11db4928..f93174dc 100644 --- a/apps/stirling-pdf/config.json +++ b/apps/stirling-pdf/config.json @@ -1,20 +1,19 @@ { - "$schema": "../schema.json", - "name": "Stirling-PDF", - "port": 8234, - "available": true, - "exposable": true, - "id": "stirling-pdf", - "tipi_version": 1, - "version": "0.13.0", - "categories": [ - "data", - "utilities" - ], - "description": "Locally hosted web application that allows you to perform various operations on PDF files.", - "short_desc": "Powerful locally hosted web based PDF manipulation tool.", - "author": "Frooodle", - "source": "https://github.com/Frooodle/Stirling-PDF/", - "form_fields": [] - } - \ No newline at end of file + "$schema": "../schema.json", + "name": "Stirling-PDF", + "port": 8234, + "available": true, + "exposable": true, + "id": "stirling-pdf", + "tipi_version": 2, + "version": "0.13.1", + "categories": [ + "data", + "utilities" + ], + "description": "Locally hosted web application that allows you to perform various operations on PDF files.", + "short_desc": "Powerful locally hosted web based PDF manipulation tool.", + "author": "Frooodle", + "source": "https://github.com/Frooodle/Stirling-PDF/", + "form_fields": [] +} diff --git a/apps/stirling-pdf/docker-compose.yml b/apps/stirling-pdf/docker-compose.yml index ec57f2ff..3cb74f54 100644 --- a/apps/stirling-pdf/docker-compose.yml +++ b/apps/stirling-pdf/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: stirling-pdf: - image: ghcr.io/frooodle/s-pdf:0.13.0 + image: ghcr.io/frooodle/s-pdf:0.13.1 restart: unless-stopped container_name: stirling-pdf privileged: true diff --git a/apps/stirling-pdf/metadata/logo.jpg b/apps/stirling-pdf/metadata/logo.jpg index 5ee8682a..7ce76488 100644 Binary files a/apps/stirling-pdf/metadata/logo.jpg and b/apps/stirling-pdf/metadata/logo.jpg differ diff --git a/apps/transmission-vpn/config.json b/apps/transmission-vpn/config.json new file mode 100644 index 00000000..22efa3c0 --- /dev/null +++ b/apps/transmission-vpn/config.json @@ -0,0 +1,342 @@ +{ + "$schema": "../schema.json", + "name": "Transmission (VPN)", + "available": true, + "exposable": true, + "port": 9091, + "requirements": { + "ports": [ + 51413 + ] + }, + "id": "transmission-vpn", + "tipi_version": 2, + "version": "5.1.0", + "categories": [ + "utilities", + "security" + ], + "description": "Transmission is running only when OpenVPN has an active tunnel. It has built-in support for many popular VPN providers to make the setup easier.", + "short_desc": "BitTorrent client with VPN support.", + "author": "haugene", + "source": "https://github.com/haugene/docker-transmission-openvpn", + "form_fields": [ + { + "type": "numeric", + "label": "Container > UserID (UID)", + "placeholder": "1000", + "env_variable": "TRANSMISSION_PUID" + }, + { + "type": "numeric", + "label": "Container > GroupID (PGID)", + "placeholder": "1000", + "env_variable": "TRANSMISSION_PGID" + }, + { + "type": "boolean", + "label": "Container > Create TUN device", + "env_variable": "TRANSMISSION_CREATE_TUN_DEVICE" + }, + { + "type": "text", + "label": "OpenVPN > Local Network", + "placeholder": "10.0.0.0/8,172.16.0.0/12,192.168.0.0/16", + "env_variable": "TRANSMISSION_OVPN_LOCAL_NETWORK" + }, + { + "type": "text", + "label": "OpenVPN > Username", + "required": true, + "env_variable": "TRANSMISSION_OVPN_USERNAME" + }, + { + "type": "password", + "label": "OpenVPN > Password", + "required": true, + "env_variable": "TRANSMISSION_OVPN_PASSWORD" + }, + { + "type": "text", + "label": "OpenVPN > Default Provider Config", + "required": true, + "placeholder": "france,sweden,austria,italy,belgium", + "env_variable": "TRANSMISSION_OVPN_CONFIG" + }, + { + "label": "OpenVPN > Provider", + "type": "text", + "required": true, + "options": [ + { + "label": "Anonine", + "value": "ANONINE" + }, + { + "label": "AnonVPN", + "value": "ANONVPN" + }, + { + "label": "BlackVPN", + "value": "BLACKVPN" + }, + { + "label": "BTGuard", + "value": "BTGUARD" + }, + { + "label": "Cryptostorm", + "value": "CRYPTOSTORM" + }, + { + "label": "ExpressVPN", + "value": "EXPRESSVPN" + }, + { + "label": "FastestVPN", + "value": "FASTESTVPN" + }, + { + "label": "FreeVPN", + "value": "FREEVPN" + }, + { + "label": "FrootVPN", + "value": "FROOT" + }, + { + "label": "FrostVPN", + "value": "FROSTVPN" + }, + { + "label": "Getflix", + "value": "GETFLIX" + }, + { + "label": "GhostPath", + "value": "GHOSTPATH" + }, + { + "label": "Giganews", + "value": "GIGANEWS" + }, + { + "label": "HideMe", + "value": "HIDEME" + }, + { + "label": "HideMyAss", + "value": "HIDEMYASS" + }, + { + "label": "IntegrityVPN", + "value": "INTEGRITYVPN" + }, + { + "label": "IPVanish", + "value": "IPVANISH" + }, + { + "label": "IronSocket", + "value": "IRONSOCKET" + }, + { + "label": "Ivacy", + "value": "IVACY" + }, + { + "label": "IVPN", + "value": "IVPN" + }, + { + "label": "Mullvad", + "value": "MULLVAD" + }, + { + "label": "NordVPN", + "value": "NORDVPN" + }, + { + "label": "OctaneVPN", + "value": "OCTANEVPN" + }, + { + "label": "OVPN", + "value": "OVPN" + }, + { + "label": "Privado", + "value": "PRIVADO" + }, + { + "label": "Private Internet Access", + "value": "PIA" + }, + { + "label": "PrivateVPN", + "value": "PRIVATEVPN" + }, + { + "label": "ProtonVPN", + "value": "PROTONVPN" + }, + { + "label": "proXPN", + "value": "PROXPN" + }, + { + "label": "PureVPN", + "value": "PUREVPN" + }, + { + "label": "RA4W VPN", + "value": "RA4W" + }, + { + "label": "SaferVPN", + "value": "SAFERVPN" + }, + { + "label": "SlickVPN", + "value": "SLICKVPN" + }, + { + "label": "SlickVPNCore", + "value": "SLICKVPNCORE" + }, + { + "label": "Smart DNS Proxy", + "value": "SMARTDNSPROXY" + }, + { + "label": "SmartVPN", + "value": "SMARTVPN" + }, + { + "label": "Surfshark", + "value": "SURFSHARK" + }, + { + "label": "TigerVPN", + "value": "TIGER" + }, + { + "label": "TorGuard", + "value": "TORGUARD" + }, + { + "label": "Trust.Zone", + "value": "TRUSTZONE" + }, + { + "label": "TunnelBear", + "value": "TUNNELBEAR" + }, + { + "label": "VPN.AC", + "value": "VPNAC" + }, + { + "label": "VPNArea.com", + "value": "VPNAREA" + }, + { + "label": "VPNBook.com", + "value": "VPNBOOK" + }, + { + "label": "VPNFacile", + "value": "VPNFACILE" + }, + { + "label": "VPN.ht", + "value": "VPNHT" + }, + { + "label": "VPNTunnel", + "value": "VPNTUNNEL" + }, + { + "label": "VPNUnlimited", + "value": "VPNUNLIMITED" + }, + { + "label": "VyprVpn", + "value": "VYPRVPN" + }, + { + "label": "Windscribe", + "value": "WINDSCRIBE" + }, + { + "label": "ZoogVPN", + "value": "ZOOGVPN" + } + ], + "env_variable": "TRANSMISSION_OVPN_PROVIDER" + }, + { + "type": "boolean", + "label": "OpenVPN > Use VPN DNS", + "env_variable": "TRANSMISSION_PEER_DNS" + }, + { + "label": "Transmission > WebUI", + "type": "text", + "required": true, + "options": [ + { + "label": "Combustion", + "value": "combustion" + }, + { + "label": "Kettu", + "value": "kettu" + }, + { + "label": "Web-Control", + "value": "transmission-web-control" + }, + { + "label": "Flood", + "value": "flood-for-transmission" + }, + { + "label": "Shift", + "value": "shift" + }, + { + "label": "Transmissionic", + "value": "transmissionic" + } + ], + "env_variable": "TRANSMISSION_WEBUI" + }, + { + "type": "boolean", + "label": "Transmission > Enable DHT", + "env_variable": "TRANSMISSION_DHT_ENABLED" + }, + { + "type": "boolean", + "label": "Transmission > Enable LPD", + "env_variable": "TRANSMISSION_LPD_ENABLED" + }, + { + "type": "boolean", + "label": "Transmission > Enable PEX", + "env_variable": "TRANSMISSION_PEX_ENABLED" + }, + { + "type": "boolean", + "label": "Transmission > Enable Blocklist", + "env_variable": "TRANSMISSION_BLOCKLIST_ENABLED" + }, + { + "type": "text", + "label": "Transmission > Blocklist URL", + "placeholder": "http://list.iblocklist.com/?list=bt_level1&fileformat=p2p&archiveformat=gz", + "env_variable": "TRANSMISSION_BLOCKLIST_URL" + } + ] +} diff --git a/apps/transmission-vpn/data/config/.gitkeep b/apps/transmission-vpn/data/config/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/transmission-vpn/docker-compose.yml b/apps/transmission-vpn/docker-compose.yml new file mode 100644 index 00000000..03bfd6e8 --- /dev/null +++ b/apps/transmission-vpn/docker-compose.yml @@ -0,0 +1,79 @@ +services: + transmission-vpn: + image: haugene/transmission-openvpn:5.1.0 + container_name: transmission-vpn + cap_add: + - NET_ADMIN + devices: + - /dev/net/tun + dns: + - ${DNS_IP} + environment: + - PUID=${TRANSMISSION_PUID-1000} + - PGID=${TRANSMISSION_PGID-1000} + - TZ=${TZ-Europe/Paris} + - USER=${TRANSMISSION_USERNAME} + - PASS=${TRANSMISSION_PASSWORD} + - OPENVPN_PROVIDER=${TRANSMISSION_OVPN_PROVIDER-NORDVPN} + - OPENVPN_CONFIG=${TRANSMISSION_OVPN_CONFIG} + - OPENVPN_USERNAME=${TRANSMISSION_OVPN_USERNAME} + - OPENVPN_PASSWORD=${TRANSMISSION_OVPN_PASSWORD} + - OPENVPN_OPTS=--inactive 3600 --ping 10 --ping-exit 60 --pull-filter ignore ping + - LOCAL_NETWORK=${TRANSMISSION_OVPN_LOCAL_NETWORK-10.0.0.0/8,172.16.0.0/12,192.168.0.0/16} + - TRANSMISSION_WEB_UI=${TRANSMISSION_WEBUI} + - LOG_TO_STDOUT=true + - GLOBAL_APPLY_PERMISSIONS=false + - CREATE_TUN_DEVICE=${TRANSMISSION_CREATE_TUN_DEVICE-false} + - PEER_DNS=${TRANSMISSION_PEER_DNS-false} + - TRANSMISSION_DOWNLOAD_DIR=/media/torrents/complete + - TRANSMISSION_INCOMPLETE_DIR_ENABLED=true + - TRANSMISSION_INCOMPLETE_DIR=/media/torrents/incomplete + - TRANSMISSION_PREALLOCATION=1 + - TRANSMISSION_DHT_ENABLED=${TRANSMISSION_DHT_ENABLED-false} + - TRANSMISSION_LPD_ENABLED=${TRANSMISSION_LPD_ENABLED-false} + - TRANSMISSION_PEX_ENABLED=${TRANSMISSION_PEX_ENABLED-false} + - TRANSMISSION_BLOCKLIST_ENABLED=${TRANSMISSION_BLOCKLIST_ENABLED-true} + - TRANSMISSION_BLOCKLIST_URL=${TRANSMISSION_BLOCKLIST_URL-http://list.iblocklist.com/?list=bt_level1&fileformat=p2p&archiveformat=gz} + + volumes: + - ${APP_DATA_DIR}/data/config:/config + - ${ROOT_FOLDER_HOST}/media/torrents:/media/torrents + ports: + - ${APP_PORT}:9091 + - 51413:51413 + - 51413:51413/udp + restart: unless-stopped + networks: + - tipi_main_network + sysctls : + - net.ipv6.conf.all.disable_ipv6=0 + logging: + driver: json-file + options: + max-size: 10m + labels: + # Main + traefik.enable: true + traefik.http.middlewares.transmission-web-redirect.redirectscheme.scheme: https + traefik.http.services.transmission.loadbalancer.server.scheme: http + traefik.http.services.transmission.loadbalancer.server.port: 9091 + # Web + traefik.http.routers.transmission-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.transmission-insecure.entrypoints: web + traefik.http.routers.transmission-insecure.service: transmission + traefik.http.routers.transmission-insecure.middlewares: transmission-web-redirect + # Websecure + traefik.http.routers.transmission.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.transmission.entrypoints: websecure + traefik.http.routers.transmission.service: transmission + traefik.http.routers.transmission.tls.certresolver: myresolver + # Local domain + traefik.http.routers.transmission-local-insecure.rule: Host(`transmission.${LOCAL_DOMAIN}`) + traefik.http.routers.transmission-local-insecure.entrypoints: web + traefik.http.routers.transmission-local-insecure.service: transmission + traefik.http.routers.transmission-local-insecure.middlewares: transmission-web-redirect + # Local domain secure + traefik.http.routers.transmission-local.rule: Host(`transmission.${LOCAL_DOMAIN}`) + traefik.http.routers.transmission-local.entrypoints: websecure + traefik.http.routers.transmission-local.service: transmission + traefik.http.routers.transmission-local.tls: true diff --git a/apps/transmission-vpn/metadata/description.md b/apps/transmission-vpn/metadata/description.md new file mode 100644 index 00000000..94776ed0 --- /dev/null +++ b/apps/transmission-vpn/metadata/description.md @@ -0,0 +1,54 @@ +## Recommended VPN +This container is heavily tested using +[NordVPN, get 3 months free here.](https://ref.nordvpn.com/EQNOEHVwOCW) + +## Features + * Choose your Web UI ! + * Support many OpenVPN providers ([complete list](https://haugene.github.io/docker-transmission-openvpn/supported-providers/)) + * Works with traefik ! + * Pre-configured for Tipi. + * Healthcheck + * Highly configurable. + +## Documentation + +Don't hesitate to read related docs available here: https://haugene.github.io/docker-transmission-openvpn/ + +## VPN Provider Settings +You can configure specific settings to your provider by creating a `docker-compose.yml` file in your `user-config` directory. +| Directory | File | +|-------------------------------|------------------| +| /runtipi/user-config/transmission-vpn/ | docker-compose.yml | + +With the following content by e.g. for NordVPN: +``` +services: + transmission-vpn: + environment: + - NORDVPN_COUNTRY=FR + - NORDVPN_CATEGORY=legacy_p2p # Servers optimized for P2P usage + - NORDVPN_PROTOCOL=tcp + - NORDVPN_SERVER=fr000.nordvpn.com +``` +Instructions for NordVPN can be found here: https://haugene.github.io/docker-transmission-openvpn/provider-specific/ + +For other's supported providers: https://haugene.github.io/docker-transmission-openvpn/supported-providers/ + +## Fast, easy, and free BitTorrent client + +Docker container running Transmission torrent client with WebUI over an OpenVPN tunnel + +Transmission is a fast, easy, and free BitTorrent client. It comes in several flavors: + * A native macOS GUI application + * GTK+ and Qt GUI applications for Linux, BSD, etc. + * A headless daemon for servers and routers + * A web UI for remote controlling any of the above + +Visit [https://transmissionbt.com/](https://transmissionbt.com/) for more information. + +## Folder Info + +| Root Folder | Container Folder | +|-------------------------------|------------------| +| /runtipi/app-data/transmission/data/config | /config | +| /runtipi/media/torrents | /media/torrents | diff --git a/apps/transmission-vpn/metadata/logo.jpg b/apps/transmission-vpn/metadata/logo.jpg new file mode 100644 index 00000000..ca44baf0 Binary files /dev/null and b/apps/transmission-vpn/metadata/logo.jpg differ