This docker will use Ngrok to create a tunnel between your internal plex server to an outside url. Then will update the plex "Custom server access URLs" with the random Ngrok URL using PlexAPI. This allows you to login to plex.tv from any device and have a direct connection to your home plex server. Works from behind Carrier Grade NAT/double NAT and possibly VPN's.
Variable needed are:
Open TCP port 4040 in the Unraid ngrok docker web interface
NGROK_PORT
= 32400
NGROK_AUTH
= Ngrok Authtoken from their website after you've created an account
PLEX_TOKEN
= Plex Authtoken
PLEX_BASE_URL
= Plex server url like http://192.168.0.21:32400
NGROK_PROTOCOL
= set as TCP
Below is the original docker info from wernight. This is a fork with a custom python script, PlexAPI and python 3 installed.
A Docker image for ngrok v2, introspected tunnels to localhost. It's based on the excellent work of wizardapps/ngrok and fnichol/ngrok.
- Small: Built using busybox.
- Simple: Just link as
http
orhttps
in most cases, see below; exposes ngrok server4040
port. - Secure: Runs as non-root user with a random UID
6737
(to avoid mapping to an existing UID).
To see command-line options, run docker run --rm wernight/ngrok ngrok --help
.
Supposing you've an Apache or Nginx Docker container named web_service_container
listening on port 80:
$ docker run --rm -it --link web_service_container wernight/ngrok ngrok http web_service_container:80
Please consider using directly the command-line arguments of Ngrok.
If you use the default CMD
(i.e. don't specify the ngrok command-line but only wernight/ngrok
),
then you can use instead envrionment variables magic below.
You simply have to link the Ngrok container to the application under the app
or http
or https
aliases, and all of the configuration will be done for you by default.
Additionally, you can specify one of several environment variable (via -e
) to configure your Ngrok tunnel:
NGROK_AUTH
- Authentication key for your Ngrok account. This is needed for custom subdomains, custom domains, and HTTP authentication.NGROK_SUBDOMAIN
- Name of the custom subdomain to use for your tunnel. You must also provide the authentication token.NGROK_HOSTNAME
- Paying Ngrok customers can specify a custom domain. Only one subdomain or domain can be specified, with the domain taking priority.NGROK_USERNAME
- Username to use for HTTP authentication on the tunnel. You must also specify an authentication token.NGROK_PASSWORD
- Password to use for HTTP authentication on the tunnel. You must also specify an authentication token.NGROK_PROTOCOL
- Can either beHTTP
orTCP
, and it defaults toHTTP
if not specified. If set toTCP
, Ngrok will allocate a port instead of a subdomain and proxy TCP requests directly to your application.NGROK_PORT
- Port to expose (defaults to80
forHTTP
protocol).NGROK_REGION
- Location of the ngrok tunnel server; can beus
(United States, default),eu
(Europe),ap
(Asia/Pacific) orau
(Australia)NGROK_BINDTLS
- Toggle tunneling only HTTP or HTTPS traffic. Whentrue
, Ngrok only opens the HTTPS endpoint. Whenfalse
, Ngrok only opens the HTTP endpoint
-
We'll set up a simple example HTTP server in a docker container named
www
:$ docker run -v /usr/share/nginx/html --name www_data busybox true $ docker run --rm --volumes-from www_data busybox /bin/sh -c 'echo "<h1>Yo</h1>" > /usr/share/nginx/html/index.html' $ docker run -d -p 80 --volumes-from www_data --name www nginx $ curl $(docker port www 80) <h1>Yo</h1>
-
Now we'll link that HTTP server into an ngrok container to expose it on the internet:
$ docker run -d -p 4040 --link www:http --name www_ngrok wernight/ngrok
-
You can now access the API to find the assigned domain:
$ curl $(docker port www_ngrok 4040)/api/tunnels
or access the web UI to see requests and responses:
$ xdg-open http://$(docker port www_ngrok 4040)
For common cases you may want to create an alias in your ~/.profile
(or ~/.bashrc
, ~/.zshrc
, or equivalent):
function docker-ngrok() {
docker run --rm -it --link "$1":http wernight/ngrok ngrok http http:80
}
# For ZSH with Oh-My-Zsh! and 'docker' plugin enabled, you can also enable auto-completion:
#compdef __docker_containers docker-ngrok
Then to run the simple example just do docker-ngrok web_service_container
.
For non dockerized http targets consider this helper function:
function expose-ngrok() {
docker run --rm --net=host -e NGROK_PORT="$1" wernight/ngrok
}
and then visit localhost:4040 for receiving the links.
Report issues/questions/feature requests on GitHub Issues.
Pull requests are very welcome!