Portainer Templates logo

Portainer Templates

Jump

Stack

Dashboard

Jump is yet another self-hosted startpage for your server designed to be simple, stylish, fast and secure.

Image details

Pulls: 175k
Architecture: amd64, arm64, arm/v7
Image size: 23 MB
Latest: v1.4.1
User: daledavies
Created: Feb 09, 2022
Updated: 2 years ago
Status: active

Source details

Stars: 607
Forks: 42
Language: PHP
License: MIT
Updated: 2 years ago

Configuration

Type
Compose
Platform
linux
Image
daledavies/jump
Ports
9123:8080
Volumes
/backgrounds : /portainer/Files/AppData/Config/jumper/backgrounds/favicon : /portainer/Files/AppData/Config/jumper/favicon/search : /portainer/Files/AppData/Config/jumper/search/sites : /portainer/Files/AppData/Config/jumper/sites
Env vars
SITENAME=Custom site nameOWMAPIKEY=0a1b2c3d4e5f6a7b8c9d0a1bLATLONG=51.509865,-0.118092
Source

Template by xneo1·Source

Standalone Install

Select an install method, to see config/commands for deploying Jump

Installation method

Install on Portainer

Import all app templates into your Portainer instance, for easy 1-click deploys

  1. Ensure both Docker and Portainer are installed, and up-to-date
  2. Log into your Portainer web UI
  3. Under Settings → App Templates, paste the below URL
  4. Head to Home → App Templates, and the list of apps will show up
  5. Select Jump, fill in any config options, and hit Deploy

Template Import URL

https://raw.githubusercontent.com/Lissy93/portainer-templates/main/templates.json
Show Me demo
Original stackfile

The compose file this template deploys, straight from its repo:

services:
    web:
        image: daledavies/jump
        ports:
            - 9123:8080
        volumes:
            - /portainer/Files/AppData/Config/jumper/backgrounds:/backgrounds
            - /portainer/Files/AppData/Config/jumper/favicon:/favicon
            - /portainer/Files/AppData/Config/jumper/search:/search
            - /portainer/Files/AppData/Config/jumper/sites:/sites
        environment:
            SITENAME: 'Custom site name'
            OWMAPIKEY: '0a1b2c3d4e5f6a7b8c9d0a1b'
            LATLONG: '51.509865,-0.118092'

Or deploy it directly from the source:

git clone https://github.com/xneo1/portainer_templates
cd portainer_templates
docker compose -f Template/Stack/jump.yml up -d

More install options in our documentation, or see daledavies/jump for app-specific guidance.

Jump

Jump is a self-hosted startpage and real-time status page for your server designed to be simple, stylish, fast and secure.
https://github.com/daledavies/jump

Features

  • Fast, easy to deploy, secure.
  • Easily add sites and use custom icons, or let Jump fetch their original favicons.
  • Categorise sites with tags across multiple pages.
  • Real-time status monitoring for each site.
  • Use your own background images or get random background images from Unsplash.
  • Fast search by name, tag, url with keyboard shortcut.
  • Custom list of search engines accessed via search box.
  • Open Weather Map integration for local time and weather.
  • Several layout options, including responsive UI for mobile devices.
  • Easily enable/disable all configuration options, tailor Jump to suit your needs.

Demo - jumpdemo.daledavies.co.uk

Note - the demo instance is hosted on a render.com free tier so may take a few seconds to wake up.

Installation

Docker Compose

Get the container image from Docker Hub (https://hub.docker.com/r/daledavies/jump).
The following will start Jump and serve the page at http://localhost:8123 with a custom site name, Open Weather Map support, and volumes to map Jump's "backgrounds", "favicon", "search" and "sites" directories to local directories on your machine (OWMAPIKEY and LATLONG values below are just for example)...
version: '3'
services:
    web:
        image: daledavies/jump
        ports:
            - 8123:8080
        volumes:
            - ./backgrounds:/backgrounds
            - ./favicon:/favicon
            - ./search:/search
            - ./sites:/sites
        environment:
            SITENAME: 'Custom site name'
            OWMAPIKEY: '0a1b2c3d4e5f6a7b8c9d0a1b'
            LATLONG: '51.509865,-0.118092'

You can use the following optional environment variables to configure/customise your Jump site...
  • SITENAME - Custom site name.
  • SHOWCLOCK: 'false' - Hide the clock.
  • AMPMCLOCK: 'true' - Show 12 hour clock format if true.
  • SHOWGREETING: 'false' - Show the label "#home" instead of a friendly greeting message.
  • CUSTOMGREETING: 'Some other greeting message' - Show a custom greeting message instead.
  • SHOWSEARCH : 'false' - Hide the search button (disable search).
  • ALTLAYOUT: 'true' - Display list of sites using an alternative layout.
  • CUSTOMWIDTH: 1000 - Set a custom with for the page container/site list.
  • BGBLUR: 50 - Background image blur percentage.
  • BGBRIGHT: 90 - Background image brightness percentage.
  • UNSPLASHAPIKEY - An API key for Unsplash, enables fetching random background images from Unsplash.
  • UNSPLASHCOLLECTIONS - List of Unsplash collection ID's (separated by commas) to select random images from.
  • ALTBGPROVIDER - An alternative background provider url.
  • OWMAPIKEY - An API key for Open Weather Map, LATLONG (below) must also be defined.
  • LATLONG - A latitude and longitude for the default location (e.g. "51.509865,-0.118092").
  • METRICTEMP: 'true' - Metric (C) or imperial (F) temperature units.
  • CHECKSTATUS: 'false' - Disable checking site availability status.
  • STATUSCACHE: 5 - Duration in minutes to cache site availability status.
  • NOINDEX: 'true' - Include a robots noindex meta tag in site header.
  • WWWURL - Useful if Jump is hosted in a sub-directory (e.g. "/startpage").
  • DISABLEIPV6 - Disable IPV6 if required.
  • DOCKERSOCKET - Mounted docker socket location, for Docker integration without a proxy (e.g "/var/run/docker.sock").
  • DOCKERPROXYURL - Docker proxy URL, for Docker integration with a proxy (e.g. "dockerproxy:2375").
  • DOCKERONLYSITES: 'false' - Set to true if you want to only use docker integration and not define a sites.json.
  • LANGUAGE: 'en' - Set to your chosen language code.
  • CACHEBYPASS: 'true' - Bypass all caches, useful for testing changes.
  • DEBUG: 'true' - Enable debug mode.

NOTE: The OWMAPIKEY and LATLONG config options must be defined together. DOCKERSOCKET and DOCKERPROXYURL are mutually exclusive.

Volume Mapping

You can map the "backgrounds", "favicon", "search" and "sites" directories to local directories as shown in the Docker Compose example above. Your local directories will be populated with Jump's default files when the container is next started unless the local directories already contain files, in which case the local files will be used by Jump instead.

Docker

The same can be achieved just using Docker CLI...
docker run -d -p 8123:8080 \
--volume <path/to/backgrounds>:/backgrounds \
--volume <path/to/favicon>:/favicon \
--volume <path/to/sites>:/sites \
--volume <path/to/search>:/search \
--env SITENAME='Custom site name' \
--env OWMAPIKEY='<open weather api key>' \
--env LATLONG='<lat,long>' \
--name jump docker.io/daledavies/jump

Without Docker

Clone this repository and copy everything within the jumpapp directory to your server, edit config.php accordingly.
Install dependencies via composer by running the following command within the web root...
composer install --no-dev

Make sure you have created a cache directory and given the web user permission to write to it, the cache directory should match your config.php entry for cachedir.

Configuration

Open Weather Map

You can configure Jump to get local time and weather updates by adding an Open Weather Map API key to config.php or passing the OWMAPIKEY environment variable to the Docker container (as described above).
You will also need to provide a default LATLONG string (e.g. "51.509865,-0.118092"), Jump will use this until you press the location button and allow permission to get your location from the web browser.

Sites

The sites.json file is where you can define default configuration for sites and add a list of sites manually to the startpage, this is great for adding sites that are hosted anywhere on the web.
Jump can also integrate with Docker to automatically list any sites you have running on the same Docker host.

Site defaults and manual configuration

Edit the /sites/sites.json file to include your own sites on the startpage...
{
    "default": {
        "nofollow": true,
        "icon": "my-default-icon.png",
        "newtab": false
    },
    "sites": [
        {
            "name": "Github",
            "url" : "https://github.com/daledavies/jump",
            "description": "This is an example description",
            "nofollow": false,
            "newtab": true
        },
        {
            "name": "Docker Hub",
            "url" : "https://hub.docker.com/r/daledavies/jump"
        },
        {
            "name": "Bitwarden",
            "url" : "https://bitwarden.example.com",
            "description": "This is another example of a site with a description",
            "icon": "bitwarden.png",
            "tags": ["stuff"]
        },
        {
            "name": "Gitea",
            "url" : "https://git.example.com",
            "icon": "gitea.png",
            "tags": ["stuff"]
        },
        {
            "name": "Nextcloud",
            "url" : "https://cloud.example.com",
            "icon": "nextcloud.png",
            "tags": ["home", "stuff", "things"]
        }
        {
            "name": "Google",
            "url" : "https://www.google.com",
            "nofollow": false
        },
        {
            "name": "Teapot",
            "url" : "https://www.google.com/pagedoesnotexist",
            "status": {
                "allowed_status_codes": [418],
                "request_method": "GET",
                "url": "https://www.google.com/teapot",
                "verify_cert": false
            }
        }
    ]
}

  • name and url are mandatory.
  • description, tags, nofollow, newtab, icon and status are optional.
Tags
Sites can be categorised using tags, for each site in your sites.json file you can list multiple tags as shown in the example above. Sites that have no tags are included on the home screen, however for sites with multiple tags you can specify the "home" tag to include them on the home screen.
The tag selector button will only appear in the top right of the page if you have tagged sites, clicking this will open a popup menu showing all the tags referenced in your sites.json file.
Default Options
Jump has a built-in default icon for sites that do not specify their own although you can override this and specify your own as shown above in the default section.
You can also override nofollow and newtab to be true for all sites.
Icons
You can provide custom icons for your sites by placing them in the /sites/icons/ directory and referencing the filename in sites.json using the icon option. If you do not provide a custom icon for a site then Jump will attempt to retrieve that site's favicon, if it can't find one then the default icon will be shown.
Jump also supports Dashboard Icons. To use these pick the icon you wish to use from the Dashboard Icons repository and add it's file name using the icon option, removing the file extension. For example... adguard-home.
nofollow
On a per-site basis use "nofollow": true to include rel="nofollow" on specific site links, if this is set as a global default then "nofollow": false can be used to remove rel="nofollow" for individual sites.
newtab
On a per-site basis use "newtab": true to open specific site links in a new browser tab.
status
Options to control how status checking works can be defined for each site...
  • allowed_status_codes: A list of additional status codes (in the 4XX and 5XX ranges) that could represent the site is online, for example if the site responds with "418 I'm a teapot".
  • request_method: By default Jump will make a HEAD request when checking a site's status, you can use this option to specify GET instead.
  • url: An alternate status URL to check instead of the main site URL.
  • verify_cert: Disable SSL certificate verification, useful for sites with self-signed certs.

Docker Integration

It is highly recommended to use a docker socket proxy when setting up Docker integration, this does not directly expose your host's docker API to Jump.
Using a proxy
# Configure docker socket proxy container
dockerproxy:
    image: tecnativa/docker-socket-proxy:latest
    environment:
        - CONTAINERS=1 # Allow access to view containers
        - POST=0 # Make the connection read only
    volumes:
        - /var/run/docker.sock:/var/run/docker.sock:ro # Read only mount for local socket

# Configure Jump to use docker socket proxy
web:
    image: daledavies/jump
    ports:
        - 8123:8080
    volumes:
        - ./backgrounds:/backgrounds
        - ./favicon:/favicon
        - ./search:/search
        - ./sites:/sites
    environment:
        SITENAME: 'Custom site name'
        DOCKERPROXYURL: 'dockerproxy:2375' # Matches proxy hostname and ports from above
    depends_on:
        - dockerproxy # Ensure dockerproxy is available before starting jump
Configuring docker sites for Jump
Then each for each docker service you with to list on your startpage, configure labels as follows. Each label below matches the options found in the manual configuration section above...
somesite:
    image: dockerimage
    labels:
        jump.name: 'Test Site'
        jump.url: 'https://test.site'
        jump.description: 'This is a site for testing'
        jump.tags: 'home, stuff, things'
        jump.status.allowed_status_codes: '418, 500'
        jump.status.request_method: 'GET'
        jump.status.verify_cert: false

Search

Edit the /search/searchengines.json file to customise the list of search engines available from the search dropdown, the first search engine in the list will be the default...
[
    {
        "name": "Google",
        "url": "https://www.google.co.uk/search?q="
    },
    {
        "name": "DuckDuckGo",
        "url": "https://duckduckgo.com/?q="
    },
    {
        "name": "Bing",
        "url": "https://www.bing.com/search?q="
    }
]

For quick access to the search from the keyboard you can open the search bar using the ctrl-shift-/ keyboard shortcut and start typing straight away.

Background Images

To use your own background images just copy them to the /backgrounds/ directory, Jump will pick up on them automatically ans show a random image every time the page loads.
If instead you want to use Unsplash for random background images add an Unsplash API key to config.php or pass the UNSPLASHAPIKEY environment variable to the Docker container. You can provide a comma separated list of collection ID's using the unsplashcollections option in config.php or by passing them to the Docker container via the UNSPLASHCOLLECTIONS environment variable.

Favicon

After mapping the favicon directory as shown in the Docker Compose or Docker examples above, replace the default icon.png file with whatever PNG icon image you want (ensuring that the filename is always icon.png).

Language

Jump has been translated into the following languages so far, to use one of these languages just pass the appropriate language code from the list below via the language option in config.php or the LANGUAGE environment variable...
  • cs - Czech
  • de - German
  • es - Spanish
  • it - Italian
  • nl - Dutch
  • pt - Portuguese
  • ru - Russian
  • ua - Ukrainian

More translations are always welcome! If you'd like to contribute please see the existing examples and create a pull request.

Debugging

Occasionally things don't work out as expected! If you get an error and want to find out a bit more information you can use the built in debug option. To enable this set debug to true in config.php or via the DEBUG environment variable.
When resolving problems it can also help to use the cachebypass option, this will disable all caching in Jump.

Serve Jump on your own domain behind Caddy, Nginx or Traefik. Fill in your domain and copy the result. It's a starting point, some apps need their own base URL or extra headers set too.

Proxying jump.example.com to http://web:8080

Add this to your Caddyfile

jump.example.com {
	reverse_proxy http://web:8080
}

Check the logs first

Nine times out of ten the logs tell you exactly what went wrong.

  • In Portainer, go to Containers, click the container, then Logs. Or run docker logs <container>
  • Exit codes help too: 137 means killed, usually out of memory. 126 or 127 means the command inside the image is broken.

Port already in use

If deployment fails with "Bind for 0.0.0.0:9123 failed: port is already allocated", something else on your server is using that port.

  • Find what's using it: sudo ss -tlnp | grep :9123
  • Stop the other service, or pick a different host port. In 9123:8080 only the left number is yours to change, the right one belongs to the app.

Running but the page won't load

The container is up but nothing appears in your browser.

  • Use your server's real IP: http://your-server-ip:9123. The 0.0.0.0 link Portainer shows isn't a real address.
  • Give it a minute after first deploy, web can take a while to initialise.
  • Make sure your firewall allows the port, e.g. sudo ufw allow 9123

Permission denied on volumes

If the logs show "permission denied", the app can't write to its data folder on the host.

  • Fix the ownership: sudo chown -R 1000:1000 /portainer/Files/AppData/Config/jumper/backgrounds (and the same for the other mapped folders)

Image won't pull

Test the pull directly on the host: docker pull daledavies/jump

  • "manifest unknown" means the tag no longer exists. This template uses latest, so try pinning a specific version instead.
  • "toomanyrequests" is the Docker Hub rate limit. Log in with docker login to raise it.
  • "no space left on device" means a full disk. Reclaim space with docker system prune

"exec format error"

This means the image was built for a different CPU architecture than your server.

  • This image supports: amd64, arm64, arm/v7
  • Check yours with uname -m: x86_64 is amd64, aarch64 is arm64. Raspberry Pi and other ARM boards are the usual culprits.

Stack won't deploy

Compose stacks fail fast on small mistakes, and Portainer shows the reason just above the editor.

  • YAML only accepts spaces for indentation, a single tab breaks the whole file.

Raise an issue

Found something which isn't working as it should? Here's how to report it.

A Compose stack

Jump is a Compose stack, a set of containers defined in one file and brought up together by Portainer, then started and stopped as a single app.

The app image

An image is the app packed up ready to go, everything Jump needs bundled into one download. This template pulls daledavies/jump, which Docker fetches once (about 23 MB) and then starts your own copy from.

Where the image comes from

Docker pulls its images from registries, public libraries of ready-built apps. Jump's comes from Docker Hub, published by daledavies.

Version tags

The bit after the colon in the image name is the version tag. Here it's latest, which always points at the newest build, so a redeploy can bump you to a newer release without you asking. Newest right now is v1.4.1. Pin a specific tag if you would rather stay on one version.

Which machines it runs on

Every image is built for particular CPU types. This one ships for amd64, arm64, arm/v7, so it runs on both regular x86 servers and ARM boards like a Raspberry Pi.

Ports

A port is the door the app answers on. A mapping like 9123:8080 means it's reachable on port 9123 of your server, where the left number is yours to change and the right one belongs to the app. Once it's running, open http://your-server-ip:9123 in a browser. It opens:

  • 9123:8080, likely the web interface

Volumes

A volume is where Jump keeps its files so they survive an update or a restart. Without one, anything it saves would sit inside the container and vanish the moment it's recreated. This template mounts:

  • /backgrounds from /portainer/Files/AppData/Config/jumper/backgrounds on the host
  • /favicon from /portainer/Files/AppData/Config/jumper/favicon on the host
  • /search from /portainer/Files/AppData/Config/jumper/search on the host
  • /sites from /portainer/Files/AppData/Config/jumper/sites on the host

Environment variables

Environment variables are the settings you hand over when you deploy, things like a password or a timezone. Jump takes 3 of them, all with defaults you can leave alone or tweak:

  • SITENAME, defaults to Custom site name
  • OWMAPIKEY, defaults to 0a1b2c3d4e5f6a7b8c9d0a1b
  • LATLONG, defaults to 51.509865,-0.118092

Networking

Nothing custom is set, so Jump sits on Docker's default bridge network: its own private space that reaches the outside world only through the ports it publishes.

Container name

Once it's deployed, Portainer names the container web. That's what you'll spot in the containers list and use in commands like docker logs web.

Platform

The platform is linux, the kind of system the container is built to run on. Docker and Portainer handle this on a normal Linux server.

Open source license

Jump is open source, released under the MIT license. In plain terms the code is out in the open, so you're free to run it and change it to fit what you need.

Portainer app templates

Zooming out, this whole page comes from a Portainer app template: a short recipe telling Portainer how to set Jump up. Add the template list to Portainer once, then deploying Jump is a click rather than a wall of config.