A very simple static homepage for your server.

Overview

Homer's donut
Homer

A dead simple static HOMepage for your servER to keep your services on hand, from a simple yaml configuration file.

DemoChatGetting started

License: Apache 2 Gitter chat Download homer static build Awesome

Table of Contents

Features

  • yaml file configuration
  • Installable (pwa)
  • Search
  • Grouping
  • Theme customization
  • Offline heathcheck
  • keyboard shortcuts:
    • / Start searching.
    • Escape Stop searching.
    • Enter Open the first matching result (respects the bookmark's _target property).
    • Alt/Option + Enter Open the first matching result in a new tab.

Getting started

Homer is a full static html/js dashboard, generated from the source in /src using webpack. It's meant to be served by an HTTP server, it will not work if you open dist/index.html directly over file:// protocol.

See documentation for information about the configuration (assets/config.yml) options.

Using docker

To launch container:

docker run -d \
  -p 8080:8080 \
  -v </your/local/assets/>:/www/assets \
  --restart=always \
  b4bz/homer:latest

Default assets will be automatically installed in the /www/assets directory. Use UID and/or GID env var to change the assets owner (docker run -e "UID=1000" -e "GID=1000" [...]).

Using docker-compose

The docker-compose.yml file must be edited to match your needs. Set the port and volume (equivalent to -p and -v arguments):

volumes:
  - /your/local/assets/:/www/assets
ports:
  - 8080:8080

To launch container:

cd /path/to/docker-compose.yml
docker-compose up -d

Default assets will be automatically installed in the /www/assets directory. Use UID and/or GID env var to change the assets owner, also in docker-compose.yml:

environment:
  - UID=1000
  - GID=1000

Using the release tarball (prebuilt, ready to use)

Download and extract the latest release (homer.zip) from the release page, rename the assets/config.yml.dist file to assets/config.yml, and put it behind a webserver.

wget https://github.com/bastienwirtz/homer/releases/latest/download/homer.zip
unzip homer.zip
cd homer
cp assets/config.yml.dist assets/config.yml
npx serve # or python -m http.server 8010 or apache, nginx ...

Build manually

# Using yarn (recommended)
yarn install
yarn build

# **OR** Using npm
npm install
npm run build

Then your dashboard is ready to use in the /dist directory.

Roadmap

  • Add new themes.
  • Add support for custom service card (add custom feature to some service / app link)
Issues
  • chown operation not permitted

    chown operation not permitted

    chown: /www/assets/house-icon.png: Operation not permitted
    chown: /www/assets/icons/android-chrome-maskable-512x512.png: Operation not permitted
    chown: /www/assets/icons/apple-touch-icon-60x60.png: Operation not permitted
    chown: /www/assets/icons/apple-touch-icon.png: Operation not permitted
    chown: /www/assets/icons/safari-pinned-tab.svg: Operation not permitted
    chown: /www/assets/icons/favicon-16x16.png: Operation not permitted
    chown: /www/assets/icons/apple-touch-icon-152x152.png: Operation not permitted
    chown: /www/assets/icons/msapplication-icon-144x144.png: Operation not permitted
    chown: /www/assets/icons/android-chrome-maskable-192x192.png: Operation not permitted
    chown: /www/assets/icons/apple-touch-icon-180x180.png: Operation not permitted
    chown: /www/assets/icons/mstile-150x150.png: Operation not permitted
    chown: /www/assets/icons/android-chrome-192x192.png: Operation not permitted
    chown: /www/assets/icons/android-chrome-512x512.png: Operation not permitted
    chown: /www/assets/icons/favicon-32x32.png: Operation not permitted
    chown: /www/assets/icons/apple-touch-icon-76x76.png: Operation not permitted
    chown: /www/assets/icons/apple-touch-icon-120x120.png: Operation not permitted
    chown: /www/assets/icons: Operation not permitted
    chown: /www/assets/icons: Operation not permitted
    chown: /www/assets/manifest.json: Operation not permitted
    chown: /www/assets/tools/grafana.png: Operation not permitted
    chown: /www/assets/tools/sample.png: Operation not permitted
    chown: /www/assets/tools/prometheus.png: Operation not permitted
    chown: /www/assets/tools/sample2.png: Operation not permitted
    chown: /www/assets/tools: Operation not permitted
    chown: /www/assets/tools: Operation not permitted
    /entrypoint.sh: exec: line 15: su-exec: not found
    
    opened by timmillwood 29
  • Clone repository - Blank page

    Clone repository - Blank page

    Hi!

    It's meant to be stupid simple & zero maintenance required. Just copy the static files somewhere, and visit the index.html

    Call me stupid, but I clone the repository, open the index.html in my browser and nothing happens. It's all blank.

    I'm doing something wrong? Of course I'm doing something wrong, but I don't know what.

    Thanks in advance!

    opened by esturniolo 15
  • Feature Request: Enable different 'pages' via multiple configs?

    Feature Request: Enable different 'pages' via multiple configs?

    Was wondering if it would be possible to augment the getConfig function to take in a parameter from the URL to possibly load a different config (and default to config.yml)? This would enable you to have navigation links within the system to other pages.

    opened by brandoncorry 15
  • json to get external IP in message section failing

    json to get external IP in message section failing

    I'm trying to get the external IP address to show in the messages section using json. however for some reason it's not getting it. I wasn't sure if this was a bug or by design (or that I just don't know what I'm doing)?

    I'm using the service to get the "ip" property. http://ifconfig.co/json

    which returns:

    {
      "ip": "123.123.123.123",
      "ip_decimal": 1289021378,
      "country": "United States",
      "country_iso": "US",
      "country_eu": false,
      "region_name": "some state",
      "region_code": "ST",
      "metro_code": 123,
      "zip_code": "12354",
      "city": "Some city",
      "latitude": 0.0,
      "longitude": 0.0,
      "time_zone": "America/somewhere",
      "asn": "AS00000",
      "asn_org": "my provider",
      "hostname": "my hostname",
      "user_agent": {
        "product": "Mozilla",
        "version": "5.0",
        "comment": "(Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0",
        "raw_value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0"
      }
    }
    

    7PfbUFFasH

    message:
      url: http://ifconfig.co/json
      mapping:
        content: 'ip'
      title: "External IP"
      content: "Could not get external IP"
    

    I thought maybe it was something weird with the service I was using so I decided to try: ifconfig.me/all.json

    which returns the property ip_addr, however I had the same result.

    opened by tupcakes 13
  • Create Radarr, Sonarr & Medusa services

    Create Radarr, Sonarr & Medusa services

    Description

    Creates Radarr, Sonarr and Medusa services based on the one done for Pi-Hole, which displays the notification bubbles from those applications.

    Example: image

    Notifications bubbles display the number of notification of each type :

    • News
    • Activity
    • Warning
    • Error

    So the user doesn't need to open those applications to know if a notification is pending.

    Type of change

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

    Checklist:

    • [x] I've read & comply with the contributing guidelines
    • [x] I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.
    • [ ] I have made corresponding changes the documentation (README.md).
    • [x] I've checked my modifications for any breaking changes, especially in the config.yml file

    Comments on the code

    It is a copy paste of PiHole service with some edits.

    Medusa

    It requests /api/v2/config to fetch the current status of the application in json format. This path is append to the item url in config.yml so url must be the root url of Medusa application. Then it displays News (grey), Warning (orange) or Error (red) bubble with number in it. Just like in the Medusa application itself. Two lines are needed in the config.yml :

    type: "Medusa"
    apikey: "01234deb70424befb1f4ef6a23456789"
    

    The Medusa API key can be found in General configuration > Interface. It is needed to access Medusa API.

    Radarr / Sonarr

    It requests /api/health and /api/queue to fetch the current status of the application in json format. This path is append to the item url in config.yml so url must be the root url of Radarr/Sonarr application. Then it displays Activity (blue), Warning (orange) or Error (red) bubble with number in it. Just like in the Radarr/Sonarr application itself. Two lines are needed in the config.yml :

    type: "Radarr" or "Sonarr"
    apikey: "01234deb70424befb1f4ef6a23456789"
    

    The Radarr/Sonarr API key can be found in Settings > General. It is needed to access the API.

    Maybe a wiki or a documentation will be needed to explain how to setup all services that can be added to homer. This PR is an update of the PR #16 from feb 2020.

    opened by twolaw 11
  • [PWA] start_url in manifest.json points to /assets path

    [PWA] start_url in manifest.json points to /assets path

    Expected Behavior

    When adding an instance of homer to the homescreen of a mobile device, the default starting URL should point to the root address. (e.g. domain.tld if homer is set as the root homepage)

    Actual Behavior

    For home screen links created in iOS 13 and Android 10 using Safari and Chrome respectively, the URL for the homer service instead defaults to domain.tld/assets

    Similarly using Chrome's desktop dev tools, the Start URL for a homer instance is "." which upon clicking will take you to the /assets path.

    This is due to an undefined scope causing the default URL to map to the directory where manifest.json is located. From web.dev's nice run down on manifest documents:

    If you don't include a scope in your manifest, then the default implied scope is the directory that your web app manifest is served from.

    Steps to Reproduce the Problem

    1. Open up Chrome web browser and navigate to a homer instance.
    2. Open the developer tools (ctrl+shift+i) and switch to the Application tab.
    3. In the Manifest section, click on the Start URL value and see where it takes you.

    Possible Solution

    1. Add a "scope" property to manifest.json with a value of "/" to set the root of the PWA
    2. Change "start_url" to "/" to be more explicit.

    Specifications

    • Version: Release v20.06.1 using the Dockerfile included in the repo to build the Docker image
    • Platform: Ubuntu 20.04 & Docker 19.03.8
    • Subsystem: Traefik 2.2.1 as a reverse proxy
    opened by CoordSpace 10
  • Missing favicon

    Missing favicon

    Favicon used to work before, and pinning the site as an app in chrome (android or desktop) showed an icon. I don't see the favicon anymore. Did anything change ? The path is still the same ? I have a favicon.png in assets folder. Thanks.

    opened by simonporte 9
  • Docker installation, config.yml being bound to directory?

    Docker installation, config.yml being bound to directory?

    Using the docker run command from the readme, changing the directories and adding the -d option.

    docker run -d -p 8803:8080 -v /container/config.yml:/www/config.yml -v /container/assets/:/www/assets b4bz/homer:latest

    (copy assets directory to local assets directory)

    Local /container/config.yml is created as a directory.

    If I remove the local config.yml directory and manually replace it with a default config file, I get errors about binding a volume to a file.

    If I create the config.yml prior to creating the container, I get a "404 page not found" error.

    opened by blasphemite 9
  • [Feature] Easily allow change of favicon

    [Feature] Easily allow change of favicon

    Hello,

    Having the favicon match the logo in the header would be a nice adition. In the folder icons we have all the icons, but there are a lot of resolutions, so manually changing that is a lot of work.

    opened by 33Fraise33 9
  • config.yml file

    config.yml file

    I edit config.yml file but i can't see any changes. am i missing something ?

    bug 
    opened by goncaloCB 9
  • New Sonarr service CORS error

    New Sonarr service CORS error

    The Sonarr service isn't working for me and gives the below error in browser (MS Edge).

    Access to fetch at 'http://192.168.1.2:8002/api/queue' from origin 'http://192.168.1.2:8001' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'.

    Error in UI: Connection error to Sonarr API, check url and apikey in config.yml

    I'm running Homer and Sonarr in docker containers, locally on port 8001 and 8002 respectively. I am running another app Overseerr, the same setup in a container on another local port, and that does interact with the Sonarr API without issue. These are running on a Synology DS918+ NAS if that makes a difference. No reverse proxy for these services.

    My config.yml entry is as follows:

    - name: "Sonarr"
      logo: "assets/tools/sonarr.svg"
      subtitle: "TV Collector"
      url: "http://192.168.1.2:8002"
      type: "Sonarr"
      apikey: "<MyAPIKey>"
    

    docker-compose entries:

    homer:
            image: b4bz/homer
            container_name: homer
            environment:
                - UID=${PUID}
                - GID=${PGID}
            volumes:
                - ${PATH_CONFIG}/homer:/www/assets
            ports:
                - 8001:8080
            restart: unless-stopped
    
    sonarr:
            image: ghcr.io/linuxserver/sonarr:latest
            container_name: sonarr
            environment:
                - PUID=${PUID}
                - PGID=${PGID}
                - TZ=${TZ}
            volumes:
                - ${PATH_CONFIG}/sonarr:/config
                - ${PATH_MEDIA}:/media
            ports:
                - 8002:8989
            restart: unless-stopped
    
    opened by beastbox-io 5
  • Documentation for ping service is wrong

    Documentation for ping service is wrong

    https://github.com/bastienwirtz/homer/blob/main/docs/customservices.md#ping

    I just went to check to see what the ping service was all about and theres a copy paste error here. I would open a PR but I dont know what to put there instead, oops!

    opened by xconverge 0
  • Custom services in Docker

    Custom services in Docker

    How can i use the cutsom services e.g. Radarr, Sonarr etc. in Docker?

    I can't see the src/components/ folder in the mounted www/assets/ folder and when adding type"Sonarr" to my Sonarr entry it makes it disappear

    opened by danielshughes 5
  • Adding Mealie service

    Adding Mealie service

    Description

    I have added a component for the Mealie service. When providing an api key (which is optional) it will show today's planned meal if one is planned. Otherwise it will show the number of recipes Mealie is keeping organized (this does not require an api key).

    I added documentation for the service to the configuration.md.

    Type of change

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

    Checklist:

    • [x] I've read & comply with the contributing guidelines
    • [x] I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.
    • [x] I have made corresponding changes the documentation (README.md).
    • [x] I've checked my modifications for any breaking changes, especially in the config.yml file
    opened by waschinski 0
  • Add Collapsible Service Groups

    Add Collapsible Service Groups

    Description

    This change adds functionality to collapse service groups.

    • Each group can have its own collapsible panel
    • Clicking the group heading hides/shows the list of services for that group, and saves the state in localstorage
    • Individual groups can be configured to become collapsible with the collapsed config attribute, and the default (open/closed) state can be specified

    Fixes #161

    Type of change

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

    Checklist:

    • [x] I've read & comply with the contributing guidelines
    • [x] I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.
    • [x] I have made corresponding changes the documentation (README.md).
    • [x] I've checked my modifications for any breaking changes, especially in the config.yml file
    opened by Aidan-B 4
  • Improving Adguard Home service

    Improving Adguard Home service

    Description

    Changes to Adguard Home service:

    • Showing x.x% blocked instead of the subtitle similar to how the PiHole service is doing it.
    • The status text will no longer be true/false but enabled/disabled/unknown.
    • Endpoints require to be logged in so fetch does now send cookies in order to prevent 403s.
    • If data can't be fetched from endpoints a new status unknown will be shown.

    Type of change

    • [x] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

    Checklist:

    • [x] I've read & comply with the contributing guidelines
    • [ ] I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.
    • [ ] I have made corresponding changes the documentation (README.md).
    • [x] I've checked my modifications for any breaking changes, especially in the config.yml file
    opened by waschinski 0
  • Google Analytics?

    Google Analytics?

    Hello! I came across this project from the Awesome Self-Hosted list, and I really like it.

    Is there any way to integrate Google Analytics? I saw you have workbox-google-analytics in your yarn.lock, but I'm not sure if that's relevant, nor how to add the gtag to the site.

    Thank you!

    opened by eburgueno 2
  • Refactors groups layout to solve horizontal layout problem in #152

    Refactors groups layout to solve horizontal layout problem in #152

    Description

    This PR fixes problem with horizontal layouts described in issue #152

    To solve it, it refactors refactors the horizontal layout completely. Also, as Service's Groups titles are identical, this PR takes that code out to a new component called ServiceGroupTitle.

    Fixes #152

    Type of change

    • [x] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

    Checklist:

    • [x] I've read & comply with the contributing guidelines
    • [x] I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.
    • [ ] I have made corresponding changes the documentation (README.md).
    • [x] I've checked my modifications for any breaking changes, especially in the config.yml file
    opened by luixal 0
  • Added feature for subfolder hosting

    Added feature for subfolder hosting

    By setting the SUBFOLDER env var, you can host Homer in a subfolder behind a reverse proxy.

    Description

    I would like to host Homer behind a reverse proxy (traefik) in a subfolder. With using the StripPrefix middleware, the index page is loading but couldnt load any assets, because they had still absolute urls. To get this working, I have added a little modification to the entrypoint.sh script, which adds a symbolic link to the /www directory. This symbolic link has the name of the subfolder and points to the /www directory itself. So the application is available under yourdomain.com/ and yourdomain.com//.

    Fixes # (issue)

    Type of change

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

    Checklist:

    • [x] I've read & comply with the contributing guidelines
    • [x] I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.
    • [x] I have made corresponding changes the documentation (README.md).
    • [x] I've checked my modifications for any breaking changes, especially in the config.yml file
    opened by boerniee 0
  • Overrides/hides services based on detected domain

    Overrides/hides services based on detected domain

    Description

    This PR introduces an optional feature to detect what "domain" the user is on (e.g. local, remote, vps, etc.) based on user-configured rules, and allows overriding properties & hiding services based on this.

    For example, the domain can be detected as "local" if browser address bar hostname matches either of "127.0.0.1", "localhost", or if "http://127.0.0.1:8080" pings successfully.

    Screenshot-20210620224930-479x185

    The following are implemented:

    • Rules to detect domain based on:
      • Browser address bar URL (detects domain from user-defined hostname list, or full URL via regex)
      • URL pinging (matches domain group based on URL list ping success)
    • Show the detected domain on top-right corner
    • Flag to show/hide services
    • Override service properties if domain matched

    Configuration additions are described in docs/configuration.md.

    Type of change

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

    Checklist:

    • [x] I've read & comply with the contributing guidelines
    • [x] I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.
    • [x] I have made corresponding changes the documentation (README.md).
    • [x] I've checked my modifications for any breaking changes, especially in the config.yml file
    opened by acmelaw 0
Releases(v21.07.1)
Owner
Bastien Wirtz
Bastien Wirtz
一套java后端自动生成接口并支持用例测试的工具(Tools that run in an operational or development environment)

apiface (一套由java开发的接口文档工具) Tools that run in an operational or development environment

null 17 Jun 9, 2021
webchat via WebSockets/WebRTC that allows messaging/video call/screen sharing

Live demo: pychat.org, video Table of contents About When should I use pychat How to host pychat Run test docker image Run prod docker image Native se

Andrew 172 Jul 23, 2021
A B/S mode system monitor for linux (demo http://199.247.1.240:2048)

中文说明 sysmon Sysmon is a C/S mode system monitor for Linux distribution. With server side daemon, you can remotely watch usage of your system resources

何培勤 110 Jul 26, 2021
:sailboat: Vuejs and Firebase based CMS

Tamiat CMS Tamiat headless CMS Made with ❤︎ by Mahmoud Nouman and contributors Support our development with What It Looks Like Getting Started To get

Tamiat CMS 520 Jul 6, 2021
A web based RSS Aggregator

News-Weaver A simple web based RSS Aggregator A work in progress Inspired by: https://github.com/GetStream/Winds NOTE: Due to restrictions imposed by

Rudrangshu Nandi 24 Apr 9, 2021
ALCF Concept to Clinic Challenge

ALCF Concept to Clinic Challenge We’re calling on a global community of data scientists, engineers, designers, and researchers to build an open source

DrivenData 367 Jul 13, 2021
🏩 A simple process manager for developers. Start apps from your browser and access them using local domains

hotel Start apps from your browser and use local domains/https automatically Tip: if you don't enable local domains, hotel can still be used as a cata

null 9.7k Jul 26, 2021
A framework written in Vue.js for creating command-line like interfaces in web browsers.

promptie A framework for creating command-line like interfaces in web browsers Promptie gives you useful and convenient API's to simulate a CLI like i

Ali Bardakci 80 Mar 8, 2021
Use the LEO outlining editor to create a Vue.js webapp.

LeoVue Use the Open Source Leo Outlining Editor to create tree-based websites. Content items can be text, markdown, or html with Vue components. Tree

Joe Orr 116 Jul 14, 2021
This repository contains a base networking framework for building a realtime quiz platform with Ably. This project uses VueJS on the client-side and NodeJS on the server-side and is scalable as you need.

A scalable, full-stack live quiz framework built with VueJS and NodeJS This repository contains a scalable framework for building a real-time quiz app

Ably Labs 23 Jul 14, 2021
this is mock server (Vue + TypeScript + Electron)

MockUp Server DownLoad Mac, Windows: https://github.com/joon610/mockup-server/releases ※im' not Apple Developer. so you need clone repo and then build

joon 121 Jul 26, 2021
VUE3 流莺书签

写在前面 什么是流莺书签 “流莺”是我非常喜欢的一个词,本指四处飞翔鸣唱的莺鸟,就像我本身也是一个很随性的人。“流莺书签”是一个用来统一存放、管理收藏网址的网站,虽然浏览器本身自带收藏夹功能,并且还能创建多个文件夹,但我个人觉得查找起来依然很费劲,并且它长的很丑。所以我就想做一个好用又好看的收藏夹,

alanhzw 113 Jul 18, 2021
🐣 vue GUI generator

vuegg vue.js GUI generator [ Mockups and code in one go! ] About vuegg Scaffold vuejs projects by dragging-dropping components directly into the visua

vuegg 2k Jul 24, 2021
A HashiCorp Vault UI written with VueJS and Vault native Go API

Goldfish Vault UI - Live Demo Share this repo with your colleagues! What is this? Goldfish - A HashiCorp Vault UI and workflow tool. pic.twitter.com/u

Tony Cai 2.2k Jul 21, 2021