GithubHelp home page GithubHelp logo

gethomepage / homepage Goto Github PK

View Code? Open in Web Editor NEW
16.0K 62.0 904.0 27.44 MB

A highly customizable homepage (or startpage / application dashboard) with Docker and service API integrations.

Home Page: https://gethomepage.dev/

License: GNU General Public License v3.0

Dockerfile 0.38% JavaScript 97.77% CSS 1.46% Shell 0.29% Starlark 0.11%
homepage nextjs node react self-hosted startpage docker

homepage's Introduction

A modern, fully static, fast, secure fully proxied, highly customizable application dashboard with integrations for over 100 services and translations into multiple languages. Easily configured via YAML files or through docker label discovery.

GitHub Workflow Status (with event)     Discord     GitHub Sponsors

Features

With features like quick search, bookmarks, weather support, a wide range of integrations and widgets, an elegant and modern design, and a focus on performance, Homepage is your ideal start to the day and a handy companion throughout it.

  • Fast - The site is statically generated at build time for instant load times.
  • Secure - All API requests to backend services are proxied, keeping your API keys hidden. Constantly reviewed for security by the community.
  • For Everyone - Images built for AMD64, ARM64, ARMv7, and ARMv6.
  • Full i18n - Support for over 40 languages.
  • Service & Web Bookmarks - Add custom links to the homepage.
  • Docker Integration - Container status and stats. Automatic service discovery via labels.
  • Service Integration - Over 100 service integrations, including popular starr and self-hosted apps.
  • Information & Utility Widgets - Weather, time, date, search, and more.
  • And much more...

Docker Integration

Homepage has built-in support for Docker, and can automatically discover and add services to the homepage based on labels. See the Docker Service Discovery page for more information.

Service Widgets

Homepage also has support for over 100 3rd party services, including all popular starr apps, and most popular self-hosted apps. Some examples include: Radarr, Sonarr, Lidarr, Bazarr, Ombi, Tautulli, Plex, Jellyfin, Emby, Transmission, qBittorrent, Deluge, Jackett, NZBGet, SABnzbd, etc. As well as service integrations, Homepage also has a number of information providers, sourcing information from a variety of external 3rd party APIs. See the Service page for more information.

Information Widgets

Homepage has built-in support for a number of information providers, including weather, time, date, search, glances and more. System and status information presented at the top of the page. See the Information Providers page for more information.

Customization

Homepage is highly customizable, with support for custom themes, custom CSS & JS, custom layouts, formatting, localization and more. See the Settings page for more information.

Getting Started

For configuration options, examples and more, please check out the homepage documentation.

With Docker

Using docker compose:

version: "3.3"
services:
  homepage:
    image: ghcr.io/gethomepage/homepage:latest
    container_name: homepage
    environment:
      PUID: 1000 -- optional, your user id
      PGID: 1000 -- optional, your group id
    ports:
      - 3000:3000
    volumes:
      - /path/to/config:/app/config # Make sure your local config directory exists
      - /var/run/docker.sock:/var/run/docker.sock:ro # optional, for docker integrations
    restart: unless-stopped

or docker run:

docker run --name homepage \
  -e PUID=1000 \
  -e PGID=1000 \
  -p 3000:3000 \
  -v /path/to/config:/app/config \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  --restart unless-stopped \
  ghcr.io/gethomepage/homepage:latest

With Node

First, clone the repository:

git clone https://github.com/gethomepage/homepage.git

Then install dependencies and build the production bundle (I'm using pnpm here, you can use npm or yarn if you like):

pnpm install
pnpm build

If this is your first time starting, copy the src/skeleton directory to config/ to populate initial example config files.

Finally, run the server in production mode:

pnpm start

or development mode:

pnpm dev

Configuration

Please refer to the homepage documentation website for more information. Everything you need to know about configuring Homepage is there. Please read everything carefully before asking for help, as most questions are answered there or are simple YAML configuration issues.

Development

Install NPM packages, this project uses pnpm (and so should you!):

pnpm install

Start the development server:

pnpm dev

Open http://localhost:3000 to start.

This is a Next.js application, see their documentation for more information.

Documentation

The homepage documentation is available at https://gethomepage.dev/.

Homepage uses Material for MkDocs for documentation. To run the documentation locally, first install the dependencies:

pip install -r requirements.txt

Then run the development server:

mkdocs serve # or build, to build the static site

Support & Suggestions

If you have any questions, suggestions, or general issues, please start a discussion on the Discussions page.

Contributing & Contributors

Contributions are welcome! Please see the CONTRIBUTING.md file for more information.

Thanks to the over 200 contributors who have helped make this project what it is today!

Especially huge thanks to @shamoon, who has been the backbone of this community from the very start.

homepage's People

Contributors

aidenpwnz avatar amadeusgraves avatar benphelps avatar denispapec avatar dependabot[bot] avatar fneiraj avatar gantoine avatar github-actions[bot] avatar godd6366 avatar hunkyn avatar itsjustmechris avatar jameswynn avatar jazzfisch avatar juanmanuelbc avatar kefir2105 avatar ling0412 avatar lucadev avatar milotype avatar modem7 avatar mspzyzh avatar nicedc avatar nonoss117 avatar ringwraith911 avatar shamoon avatar smexhy avatar tarow avatar theshaun avatar weblate avatar williamwoldum avatar xicopitz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

homepage's Issues

API Error Radarr / Sonarr works fine

I used this template, and as you can see Sonarr works fine. But for some reason Radarr is reporting API error.
I made sure api and all other data is correct in services.yaml file. Am i missing something?

Screenshot from 2022-09-08 20-29-26

Services Widget

Hi having an issue with services widgets. When I test locally on 192. address I can hit sonar, Speedtest and rutorrent for example.

I was planning to use the local ip and port as I have authelia and is would then bypass it.

- Media Services:
    - ruTorrent:
       icon: rutorrent.png
       href: https://rutorrent.mydomain.com
       description: Torrent Client
       container: rutorrent
       widget:
          type: rutorrent
          url: http://192.168.1.10:8080
          username: false # optional, false if not used
          password: false # optional, false if not used
    - Sonarr:
       icon: sonarr.png
       href: https://sonarr.mydomain.com
       description: Series management
       container: sonarr
       widget:
          type: sonarr
          url: http://192.168.1.10:8989
          key: <api key>
    - Radarr:
       icon: radarr.png
       href: https://radarr.mydomain.com
       description: Movie manager
       container: radarr

But when I access it via domain address rutorrent pulls fine but sonarr and Speedtest just show api error

Any ideas why it can't access local ip when accessed in this way.

Client should not crash if the API key for services is not valid

Reproduce: just use any invalid key in Radarr (or any other services), then refresh the homepage

Expected: unable to see info of the service, only an indicator/logo telling that the config for the service is invalid

Observed: cannot view the page, the client crashes.

Application error: a client-side exception has occurred (see the browser console for more information).

[Feature Request] GPU Memory/Utilization

Would like to have a widget that would display the local resource utilization for GPU similar to nvidia-smi command:

# nvidia-smi
Wed Sep  7 18:03:58 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 515.65.01    Driver Version: 515.65.01    CUDA Version: 11.7     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Quadro P2000        Off  | 00000000:01:00.0 Off |                  N/A |
| 44%   30C    P8     5W /  75W |      2MiB /  5120MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

Unable to start homepage in Docker: TypeError: handler is not a function

Docker command:
docker run --rm -it -p 3000:3000 -v $(pwd)/homepage/config:/app/config -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/benphelps/homepage:main

http://localhost:3000/ will return internal server error

Docker logs:

TypeError: handler is not a function
    at Server.<anonymous> (/app/server.js:19:11)
    at Server.emit (node:events:513:28)
    at parserOnIncoming (node:_http_server:980:12)
    at HTTPParser.parserOnHeadersComplete (node:_http_common:128:17)
TypeError: handler is not a function
    at Server.<anonymous> (/app/server.js:19:11)
    at Server.emit (node:events:513:28)
    at parserOnIncoming (node:_http_server:980:12)
    at HTTPParser.parserOnHeadersComplete (node:_http_common:128:17)
TypeError: handler is not a function
    at Server.<anonymous> (/app/server.js:19:11)
    at Server.emit (node:events:513:28)
    at parserOnIncoming (node:_http_server:980:12)
    at HTTPParser.parserOnHeadersComplete (node:_http_common:128:17)
TypeError: handler is not a function
    at Server.<anonymous> (/app/server.js:19:11)
    at Server.emit (node:events:513:28)
    at parserOnIncoming (node:_http_server:980:12)
    at HTTPParser.parserOnHeadersComplete (node:_http_common:128:17)
TypeError: handler is not a function
    at Server.<anonymous> (/app/server.js:19:11)
    at Server.emit (node:events:513:28)
    at parserOnIncoming (node:_http_server:980:12)
    at HTTPParser.parserOnHeadersComplete (node:_http_common:128:17)
TypeError: handler is not a function
    at Server.<anonymous> (/app/server.js:19:11)
    at Server.emit (node:events:513:28)
    at parserOnIncoming (node:_http_server:980:12)
    at HTTPParser.parserOnHeadersComplete (node:_http_common:128:17)

[Feature Request] Add auth header to widget requests

Hi, loving Homepage so far but I have one question - is it possible to add some sort of way to allow Homepage to pull data from Pi-hole etc when it's behind auth & a reverse proxy?

I run Pi-hole behind Authelia and Nginx Proxy Manager - meaning that when going to pihole.mydomain.com, I have to sign in with a username & password before I see the Pi-hole admin page.
Authelia can bypass auth based on headers and URL paths - for example I currently bypass auth for Pi-hole's /admin/api.php so Homepage can pull data. I'm not too keen on this for privacy reasons however.
If I could supply a header and value in Homepage and then add that to my Authelia config, it would ensure that Homepage's API requests to Pi-hole only bypass the username/password prompt. I don't think any actual authentication keys or whatever is needed here - as long as the value of the header is unique & known to Homepage and Authelia, the request can be specifically allowed through.

Thanks, I hope this is possible - and I'm more than happy to assist in testing it :)

Link opened even if empty in configuration

Hello.

I like the idea of your homepage, but there's one thing that is annoying me as a whole.
I want to check up on some services, like if they're running or not.
Therefore I've put no href on them - they should not be clickable.

Also, as a bonus question:
Is it possible for me to develop my own widgets and put on my own icons for my services?

Cheers!

.

.

NZBGet API Error

Did I miss something? getting API Error

  • Download Clients:
    • NZBGet:
      icon: nzbget.png
      href: url here
      description: NZB Download Client
      container: nzbget
      widget:
      type: nzbget
      url: url here
      username: nzbget
      password: tegbzn6789

Radarr and Sonarr API Error

For Radarr and Sonarr I'm getting API error.. what could be the reason? I put it like this in the yaml file

- Radarr:
    icon: radarr.png
    href: url here
    description: Movies Managment
    container: radarr
    widget:
      type: radarr
      url: http://192.168.1.2:7878
      api: apikeyhere

- Sonarr:
    icon: sonarr.png
    href: url here
    description: Series Managment
    container: sonarr
    widget:
      type: sonarr
      url: http://192.168.1.2:8989
      api: apikeyhere

Feature request: Hide API keys from API calls

Awesome work @benphelps :).

This is a simple request but I think it will cost a lot of time & redesign to do, so feel free to consider the feature or just close it if it's not what you plan to do with this project.

Why:

  • I want to host the homepage publicly on the internet but I don't want to expose my API keys of my services. Currently if we inspect the network requests we will know all the API keys.
  • If I want to only show my homepage publicly but my services are not public, the API call from frontend will fail. For example, I can configure it to call to http://sonarr:8989, if it's within the Docker network then it can call, but from my FE it won't be able to.

It would be great if we can use backend to relay the API calls.

[Feature Request] Site up or down indicator

Similar to what uptime kuma would do it would be nice to use the green light you use for container status to indicate if a website is up or down (404 / 502 / 300 / etc). I use uptime kuma as the example but it doesn't need to be that sophisticated a simple yes/no of if a site is up or down would be helpful.

Exception when container has "host" network

First off, awesome work @benphelps! I wanted to report an issue that if the container is network: host an exception occurs when you click on the green indicator light.

Application error: a client-side exception has occurred (see the browser console for more information).

Browser Console

framework-b3ca2e9a9574e304.js:1 
    TypeError: Cannot read properties of undefined (reading 'eth0')
    at N (index-19044850d7adb1f3.js:1:3883)
    at Eo (framework-b3ca2e9a9574e304.js:1:63191)
    at Pu (framework-b3ca2e9a9574e304.js:1:74879)
    at xi (framework-b3ca2e9a9574e304.js:1:121314)
    at bs (framework-b3ca2e9a9574e304.js:1:109367)
    at gs (framework-b3ca2e9a9574e304.js:1:109295)
    at vs (framework-b3ca2e9a9574e304.js:1:109158)
    at as (framework-b3ca2e9a9574e304.js:1:105938)
    at ls (framework-b3ca2e9a9574e304.js:1:104489)
    at S (framework-b3ca2e9a9574e304.js:1:138448)

Feature Request - Disk space units.

For the disk space. I would like to change the units. I passed in my main storage which is about 35TB. right now it shows:

20421 GB free
16918 GB used

Haven't at least two decimals and TB would be nice to see.

Pi-hole Widget CORS

I have added the Pi-hole widget to each of my Pi-hole entries on Homepage and both are saying "PiHole API Error". The message below is given in Chrome's console.

homepage.lan/:1 Access to fetch at 'http://192.168.3.4:8181/admin/api.php' from origin 'http://homepage.lan' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

Widget for services are not working

Hello
widget for services are not working.

Logs:

Listening on port 3000
services.yaml was copied to the config folder
bookmarks.yaml was copied to the config folder
widgets.yaml was copied to the config folder
docker.yaml was copied to the config folder
YAMLException: end of the stream or a document separator is expected (14:1)

 11 | #     customdata:
 12 | #       url: https://startpage. ...
 13 | #       abbr: G # Can be omitte ...
 14 | widget:
------^
 15 |   type: speedtest
 16 |   url: http://192.168.1.4:8261
    at generateError (file:///app/node_modules/.pnpm/[email protected]/node_modules/js-yaml/dist/js-yaml.mjs:1273:10)
    at throwError (file:///app/node_modules/.pnpm/[email protected]/node_modules/js-yaml/dist/js-yaml.mjs:1277:9)
    at readDocument (file:///app/node_modules/.pnpm/[email protected]/node_modules/js-yaml/dist/js-yaml.mjs:2735:5)
    at loadDocuments (file:///app/node_modules/.pnpm/[email protected]/node_modules/js-yaml/dist/js-yaml.mjs:2778:5)
    at Object.load$1 [as load] (file:///app/node_modules/.pnpm/[email protected]/node_modules/js-yaml/dist/js-yaml.mjs:2804:19)
    at handler (/app/.next/server/pages/api/widgets.js:53:69)
    at async Object.apiResolver (/app/node_modules/.pnpm/[email protected]_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/server/api-utils/node.js:184:9)
    at async NextNodeServer.runApi (/app/node_modules/.pnpm/[email protected]_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/server/next-server.js:403:9)
    at async Object.fn (/app/node_modules/.pnpm/[email protected]_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/server/base-server.js:493:37)
    at async Router.execute (/app/node_modules/.pnpm/[email protected]_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/server/router.js:222:36) {
  reason: 'end of the stream or a document separator is expected',
  mark: {
    name: null,
    buffer: '# For configuration options and examples, please see:\n' +
      '# https://github.com/benphelps/homepage/wiki/Information-Widgets\n' +
      '\n' +
      '- resources:\n' +
      '    cpu: true\n' +
      '    memory: true\n' +
      '    disk: /\n' +
      '# - search: # Searchbar in widgets area\n' +
      '#     provider: custom # Can be google, duckduckgo, bing or custom.\n' +
      '#     target: _blank # Can be _blank, _top, _self or _parent.\n' +
      '#     customdata:\n' +
      '#       url: https://startpage.com/search?q= # Required for custom provider. Remember to add the q param as per your provider.\n' +
      '#       abbr: G # Can be omitted. Only the first 2 characters will be considered.\n' +
      'widget:\n' +
      '  type: speedtest\n' +
      '  url: http://192.168.1.4:8261\n',
    position: 573,
    line: 13,
    column: 0,
    snippet: ' 11 | #     customdata:\n' +
      ' 12 | #       url: https://startpage. ...\n' +
      ' 13 | #       abbr: G # Can be omitte ...\n' +
      ' 14 | widget:\n' +
      '------^\n' +
      ' 15 |   type: speedtest\n' +
      ' 16 |   url: http://192.168.1.4:8261'
  }
}
YAMLException: end of the stream or a document separator is expected (14:1)

 11 | #     customdata:
 12 | #       url: https://startpage. ...
 13 | #       abbr: G # Can be omitte ...
 14 | widget:
------^
 15 |   type: speedtest
 16 |   url: http://192.168.1.4:8261
    at generateError (file:///app/node_modules/.pnpm/[email protected]/node_modules/js-yaml/dist/js-yaml.mjs:1273:10)
    at throwError (file:///app/node_modules/.pnpm/[email protected]/node_modules/js-yaml/dist/js-yaml.mjs:1277:9)
    at readDocument (file:///app/node_modules/.pnpm/[email protected]/node_modules/js-yaml/dist/js-yaml.mjs:2735:5)
    at loadDocuments (file:///app/node_modules/.pnpm/[email protected]/node_modules/js-yaml/dist/js-yaml.mjs:2778:5)
    at Object.load$1 [as load] (file:///app/node_modules/.pnpm/[email protected]/node_modules/js-yaml/dist/js-yaml.mjs:2804:19)
    at handler (/app/.next/server/pages/api/widgets.js:53:69)
    at async Object.apiResolver (/app/node_modules/.pnpm/[email protected]_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/server/api-utils/node.js:184:9)
    at async NextNodeServer.runApi (/app/node_modules/.pnpm/[email protected]_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/server/next-server.js:403:9)
    at async Object.fn (/app/node_modules/.pnpm/[email protected]_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/server/base-server.js:493:37)
    at async Router.execute (/app/node_modules/.pnpm/[email protected]_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/server/router.js:222:36) {
  reason: 'end of the stream or a document separator is expected',
  mark: {
    name: null,
    buffer: '# For configuration options and examples, please see:\n' +
      '# https://github.com/benphelps/homepage/wiki/Information-Widgets\n' +
      '\n' +
      '- resources:\n' +
      '    cpu: true\n' +
      '    memory: true\n' +
      '    disk: /\n' +
      '# - search: # Searchbar in widgets area\n' +
      '#     provider: custom # Can be google, duckduckgo, bing or custom.\n' +
      '#     target: _blank # Can be _blank, _top, _self or _parent.\n' +
      '#     customdata:\n' +
      '#       url: https://startpage.com/search?q= # Required for custom provider. Remember to add the q param as per your provider.\n' +
      '#       abbr: G # Can be omitted. Only the first 2 characters will be considered.\n' +
      'widget:\n' +
      '  type: speedtest\n' +
      '  url: http://192.168.1.4:8261\n',
    position: 573,
    line: 13,
    column: 0,
    snippet: ' 11 | #     customdata:\n' +
      ' 12 | #       url: https://startpage. ...\n' +
      ' 13 | #       abbr: G # Can be omitte ...\n' +
      ' 14 | widget:\n' +
      '------^\n' +
      ' 15 |   type: speedtest\n' +
      ' 16 |   url: http://192.168.1.4:8261'
  }
}
Listening on port 3000

Feature Request - Disk space from other servers

Feature Request:
Please would you add the ability to report free disk space from other servers on the network. Homepage currently displays the disk space, cpu and memory usage of my Docker VM but it would be useful to see those same measures (particularly disk space) for the physical servers on my network.

Thank you

[Feature Request] Logins

Heya,

Would it be possible to at some point add a login method (preferably something like oauth for things like Google login), so that we can show/hide certain things on the dashboard without putting the dashboard fully behind a login?

E.g.:

Without login/public:
Shows Group A, C, D.
Shows bookmarks Social, Development

With Login:
Shows Group A, B, C, D.
Shows bookmarks Social, Development, Entertainment

In config file, proposed suggestion is a new boolean such as "private:true" or similar for each section.

Question about text alignment

The screenshots show the cards being aligned towards the left, but upon running the latest docker image via docker-compose, it seems to be centered. Is there a configuration setting I'm missing? I can't seem to find it in the wiki.

New install configs not being generated

Hi,

just installed with yarn, and after yarn start when I navigate to the webpage the console gets spammed with the below

  errno: -2,
  code: 'ENOENT',
  syscall: 'copyfile',
  path: '/opt/homepage/src/skeleton/widgets.yaml',
  dest: '/opt/homepage/config/widgets.yaml'
}
[Error: ENOENT: no such file or directory, open '/opt/homepage/config/widgets.yaml'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: '/opt/homepage/config/widgets.yaml'
}
error copying config [Error: ENOENT: no such file or directory, copyfile '/opt/homepage/src/skeleton/bookmarks.yaml' -> '/opt/homepage/config/bookmarks.yaml'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'copyfile',
  path: '/opt/homepage/src/skeleton/bookmarks.yaml',
  dest: '/opt/homepage/config/bookmarks.yaml'
}
[Error: ENOENT: no such file or directory, open '/opt/homepage/config/bookmarks.yaml'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: '/opt/homepage/config/bookmarks.yaml'
}
error copying config [Error: ENOENT: no such file or directory, copyfile '/opt/homepage/src/skeleton/widgets.yaml' -> '/opt/homepage/config/widgets.yaml'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'copyfile',
  path: '/opt/homepage/src/skeleton/widgets.yaml',
  dest: '/opt/homepage/config/widgets.yaml'
}
[Error: ENOENT: no such file or directory, open '/opt/homepage/config/widgets.yaml'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: '/opt/homepage/config/widgets.yaml'
}
error copying config [Error: ENOENT: no such file or directory, copyfile '/opt/homepage/src/skeleton/services.yaml' -> '/opt/homepage/config/services.yaml'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'copyfile',
  path: '/opt/homepage/src/skeleton/services.yaml',
  dest: '/opt/homepage/config/services.yaml'
}
[Error: ENOENT: no such file or directory, open '/opt/homepage/config/services.yaml'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: '/opt/homepage/config/services.yaml'
}

There is no /config directory or .yaml files being generated

OpenWeatherMap is leaking apikey

I tested and found that Openweathermap widget is still not using new proxy yet, so it's leaking API key. This costs money due to subscription so I think it's very sensitive.

Local icons don't show

I have mapped a volume to /public/icons as instructed, but the icon will not show up.

In the folder I have a file otmonitor.png, if I add this as /icons/opentherm.png in the yaml, it shows as a broken image in the homepage.

PS. love your work, only thing which upsets me is that the links are not centered identially depending on the presence of a status indicator and/or an icon.

[Feature Request] Docker labels for services

Would it be possible to use compose file labels to define the Docker services side of things?

E.g.

  homepage:
    image: ghcr.io/benphelps/homepage:latest
    container_name: Homepage
    labels: 
      ## Homepage Dashboard
      - homepage.name=Netboot.XYZ
      - homepage.category=System
      - homepage.url=192.168.0.6:3000
      - homepage.icon=https://raw.githubusercontent.com/modem7/MiscAssets/master/Icons/HeimdallIcons/netboot.png
    ports:
      - 8045:3000
    volumes:
      - $USERDIR/Homepage:/app/config
      - /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations

URL should be optional, as the URL should be able to be grabbed from the Docker socket link.

I have a similar setup with the Flame dashboard, which gives the following (with Traefik integration):
image

This would reduce the amount of dependency on external config files, and allow for auto-updating of services when they are added/remove/modified.

Jellyfin NaN Bitrate

Hey,

Maybe I missed another issue on here, but my Jellyfin Widget is working really nice the only thing thats not working is the bitrate indicator. For some reason when a user is playing something it will default to NaN. Might be a setting on my Jellyfin that is messing with the indicator but I'm not sure.

Thanks in advance

Local icons not loading. getting 404

Hi, i did as the docs, mounted the folder icons into /app/public/icons uploaded some icons the then set it in service.
but the icon is not loading

docker-compose.yml

version: "3.3"
services:
  homepage:
    image: ghcr.io/benphelps/homepage:latest
    volumes:
      - ./config:/app/config
      - ./icons:/app/public/icons

services.yaml

- My First Group:
    - Portainer:
        icon: /icons/portainer.svg
        href: "URL"
        description: Portainer
        server: docker
        container: Portainer

Here is the result
image

console error the third line
image

LOTS of 500 Errors in Console

When I look at the console, I see this when I open or refresh the dashboard:

image

This is what my services.yaml file looks like (with keys and urls redacted):

image

Any idea what's causing so many 500 errors?

Feature Request: Plex Integration

Similar to the Emby support currently existing, Plex support would be great! I've seen on some other homepages I've tried that this integration may be easiest via Tautulli because of something to do with the Plex api, or lack thereof (I'm not a programmer and I don't remember the exact issue).

[Feature Request] Allow variables in config file

Would it be possible to allow variables in the config files?

E.g.

- Media:
    - Sonarr:
        href: http://192.168.0.254:8989
        #description: Homepage is awesome
        server: myserver
        container: Sonarr
        widget:
          type: sonarr
          url: http://192.168.0.254:8989 # no slash at the end
          key: $SONARRKEY

Then in the compose file, we can do something like:

  homepage:
    image: ghcr.io/benphelps/homepage:latest
    container_name: Homepage
    environment:
      - SONARRKEY=xNYcIvYlbEiBXiIXJo3HDw32
    ports:
      - 8045:3000
    volumes:
      - $USERDIR/Homepage:/app/config
      - /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations

(note: key used was randomly generated for this request)

Tautulli - Service Showing "NaN Bitrate"

Hello,

I have recently deployed 'Homepage' within my home environment and I'm loving it so far!

I am however having an issue with the Tautulli Service Widget. The page recognizes that the container is up, but wont show any "Playing", "Transcoding" data and "Bitrate" is showing as 'NaN Bitrate'.

My Plex instance is not containerized. This is its own dedicated VM due to how my storage is set up within my personal environment, however the Tautulli instance is dockerized and this works fine as it can communicate with the Plex server itself.

Below is an excerpt from my "services.yaml";

- Media Monitoring:
    - Tautulli:
        icon: https://raw.githubusercontent.com/walkxhub/dashboard-icons/master/png/tautulli.png
        href: https://<REDACTED>
        description: Media Library
        server: https://<REDACTED>
        container: tautulli
        widget:
            type: tautulli
            url: https://<REDACTED>
            key: SOMEAPIKEYHERE

Just for clarity as well, my Plex instance does sit behind NGINX Proxy Mgr with a self-signed cert. Tatulli can see the local IP and WAN IP for the Plex server too.

Many thanks for your help in advance!

[Bug] Jellyfin: TypeError: Cannot read properties of undefined (reading 'MediaSources')

Awesome work lately @benphelps! Another error to report. Using the "latest" docker tag and was playing a show via Jellyfin and this error popped up. I am using the Jellyfin widget.

Using Image:

ghcr.io/benphelps/homepage:latest@sha256:5314689c255705e71615030534e1efdfd0356def9daa32b604666ecf1fe27e59

Error in Browser Console

framework-b3ca2e9a9574e304.js:1 TypeError: Cannot read properties of undefined (reading 'MediaSources')
    at index-eb06fe45eb940f9e.js:1:6901
    at Array.reduce (<anonymous>)
    at jellyfin (index-eb06fe45eb940f9e.js:1:6840)
    at Eo (framework-b3ca2e9a9574e304.js:1:63191)
    at Pu (framework-b3ca2e9a9574e304.js:1:74879)
    at xi (framework-b3ca2e9a9574e304.js:1:121314)
    at bs (framework-b3ca2e9a9574e304.js:1:109367)
    at gs (framework-b3ca2e9a9574e304.js:1:109295)
    at vs (framework-b3ca2e9a9574e304.js:1:109158)
    at as (framework-b3ca2e9a9574e304.js:1:105938)

Jellyfin: TypeError: c.filter is not a function

Updated to the new v0.2.0. Getting this error with my jellyfin widget

Navigate URL: {URL}/api/services/proxy?type=jellyfin&group=Media&service=Jellyfin&endpoint=Sessions

{"error":"Unkown proxy service type"}
framework-b3ca2e9a9574e304.js:1 TypeError: c.filter is not a function
  at g (index-52903fa49e6384e8.js:1:2056)
  at Eo (framework-b3ca2e9a9574e304.js:1:63191)
  at Pu (framework-b3ca2e9a9574e304.js:1:74879)
  at xi (framework-b3ca2e9a9574e304.js:1:121314)
  at bs (framework-b3ca2e9a9574e304.js:1:109367)
  at gs (framework-b3ca2e9a9574e304.js:1:109295)
  at vs (framework-b3ca2e9a9574e304.js:1:109158)
  at as (framework-b3ca2e9a9574e304.js:1:105938)
  at ls (framework-b3ca2e9a9574e304.js:1:104489)
  at S (framework-b3ca2e9a9574e304.js:1:138448)

YAML Config:

- Jellyfin:
  icon: jellyfin.png # Icon, see: https://github.com/walkxcode/dashboard-icons or public/icons
  href: REDACTED
  description: Media Server
  server: &docker groot-docker
  container: jellyfin
  widget:
    type: jellyfin
    url: REDACTED
    key: REDACTED

Locatization, we need translations of this proyect. Spanish, German, French....

I have seen the project and it attracts me a lot, the only problem is that it is not internationalized, that is to say, translated into other languages. I have been looking at the code and I have seen that internationalization is not implemented. I think this is one of the most urgent functionality because it is discarding the public who speak languages other than English.

Jellyseerr widget

Hello @benphelps !
I implemented the jellyseerr widget in #34 but I guess I messed up something. The widgets works indeed when using the pnpm. But when using the dockerized app it doesn't work since the request is returning a 500 internal server error.
I already tried to google it but no avail. Do you have any tips or ideas what could be the cause and how to solve it?

Thanks!

Disk Resources Widget doesn't work for samba mount

Great work! This is an awesome homepage/dashboard app. Going to log a couple of issues. Put it on the back burner if you wish, just wanted to log the behavior I am seeing. Thanks again.

Expected Behavior

If I use the following config, I expect to see the disk information for the chosen mount:

- resources:
    disk: /mnt/myMount

Actual Behavior

It shows the information for the primary disk, mounted at "/", instead

Steps to Reproduce the Problem

  1. mount a samba share on your system
  2. write widget config to show information for this mount

Specifications

  • Version: First release
  • Device/OS: RPI4 - Ubuntu 22.04 aarch64

ELIFECYCLE  Command failed.

Not being a programmer so apologies for my ignorance

pnpm install
Lockfile is up to date, resolution step is skipped
Packages: +322
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 322, reused 322, downloaded 0, added 0, done
node_modules/.pnpm/[email protected]/node_modules/cpu-features: Running install script...
node_modules/.pnpm/[email protected]/node_modules/core-js-pure: Running postinstall script...
node_modules/.pnpm/[email protected]/node_modules/sharp: Running install script...
 ELIFECYCLE  Command failed.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.