diff --git a/apps/transmission-vpn/config.json b/apps/transmission-vpn/config.json new file mode 100644 index 00000000..ef0aee7b --- /dev/null +++ b/apps/transmission-vpn/config.json @@ -0,0 +1,171 @@ +{ + "$schema": "../schema.json", + "name": "Transmission (VPN)", + "available": true, + "exposable": true, + "port": 9091, + "requirements": { + "ports": [ + 51413 + ] + }, + "id": "transmission-vpn", + "tipi_version": 1, + "version": "5.0.2", + "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..ffe77893 --- /dev/null +++ b/apps/transmission-vpn/docker-compose.yml @@ -0,0 +1,79 @@ +services: + transmission-vpn: + image: haugene/transmission-openvpn:5.0.2 + 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