From a33c16cefc401be339f24e9aa59d79b8c6d91cf4 Mon Sep 17 00:00:00 2001 From: okxlin Date: Wed, 24 Apr 2024 00:42:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0dashy=E5=88=B0=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/dashy/3.0.0/.env.sample | 2 + apps/dashy/3.0.0/data.yml | 10 +++++ apps/dashy/3.0.0/data/item-icons/.gitkeep | 0 apps/dashy/3.0.0/data/user-data/conf.yml | 47 +++++++++++++++++++++ apps/dashy/3.0.0/docker-compose.yml | 29 +++++++++++++ apps/dashy/3.0.0/scripts/init.sh | 3 ++ apps/dashy/README.md | 32 ++++++++++++++ apps/dashy/data.yml | 19 +++++++++ apps/dashy/latest/.env.sample | 2 + apps/dashy/latest/data.yml | 10 +++++ apps/dashy/latest/data/item-icons/.gitkeep | 0 apps/dashy/latest/data/user-data/conf.yml | 47 +++++++++++++++++++++ apps/dashy/latest/docker-compose.yml | 29 +++++++++++++ apps/dashy/latest/scripts/init.sh | 3 ++ apps/dashy/logo.png | Bin 0 -> 9409 bytes 15 files changed, 233 insertions(+) create mode 100644 apps/dashy/3.0.0/.env.sample create mode 100644 apps/dashy/3.0.0/data.yml create mode 100644 apps/dashy/3.0.0/data/item-icons/.gitkeep create mode 100644 apps/dashy/3.0.0/data/user-data/conf.yml create mode 100644 apps/dashy/3.0.0/docker-compose.yml create mode 100644 apps/dashy/3.0.0/scripts/init.sh create mode 100644 apps/dashy/README.md create mode 100644 apps/dashy/data.yml create mode 100644 apps/dashy/latest/.env.sample create mode 100644 apps/dashy/latest/data.yml create mode 100644 apps/dashy/latest/data/item-icons/.gitkeep create mode 100644 apps/dashy/latest/data/user-data/conf.yml create mode 100644 apps/dashy/latest/docker-compose.yml create mode 100644 apps/dashy/latest/scripts/init.sh create mode 100644 apps/dashy/logo.png diff --git a/apps/dashy/3.0.0/.env.sample b/apps/dashy/3.0.0/.env.sample new file mode 100644 index 00000000..90905990 --- /dev/null +++ b/apps/dashy/3.0.0/.env.sample @@ -0,0 +1,2 @@ +CONTAINER_NAME="dashy" +PANEL_APP_PORT_HTTP="40219" diff --git a/apps/dashy/3.0.0/data.yml b/apps/dashy/3.0.0/data.yml new file mode 100644 index 00000000..e3019b8b --- /dev/null +++ b/apps/dashy/3.0.0/data.yml @@ -0,0 +1,10 @@ +additionalProperties: + formFields: + - default: 40209 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number diff --git a/apps/dashy/3.0.0/data/item-icons/.gitkeep b/apps/dashy/3.0.0/data/item-icons/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/dashy/3.0.0/data/user-data/conf.yml b/apps/dashy/3.0.0/data/user-data/conf.yml new file mode 100644 index 00000000..5f0b012a --- /dev/null +++ b/apps/dashy/3.0.0/data/user-data/conf.yml @@ -0,0 +1,47 @@ +--- +# Page meta info, like heading, footer text and nav links +pageInfo: + title: Dashy + description: Welcome to your new dashboard! + navLinks: + - title: GitHub + path: https://github.com/Lissy93/dashy + - title: Documentation + path: https://dashy.to/docs + +# Optional app settings and configuration +appConfig: + theme: colorful + +# Main content - An array of sections, each containing an array of items +sections: +- name: Getting Started + icon: fas fa-rocket + items: + - title: Dashy Live + description: Development a project management links for Dashy + icon: https://i.ibb.co/qWWpD0v/astro-dab-128.png + url: https://live.dashy.to/ + target: newtab + - title: GitHub + description: Source Code, Issues and Pull Requests + url: https://github.com/lissy93/dashy + icon: favicon + - title: Docs + description: Configuring & Usage Documentation + provider: Dashy.to + icon: far fa-book + url: https://dashy.to/docs + - title: Showcase + description: See how others are using Dashy + url: https://github.com/Lissy93/dashy/blob/master/docs/showcase.md + icon: far fa-grin-hearts + - title: Config Guide + description: See full list of configuration options + url: https://github.com/Lissy93/dashy/blob/master/docs/configuring.md + icon: fas fa-wrench + - title: Support + description: Get help with Dashy, raise a bug, or get in contact + url: https://github.com/Lissy93/dashy/blob/master/.github/SUPPORT.md + icon: far fa-hands-helping + \ No newline at end of file diff --git a/apps/dashy/3.0.0/docker-compose.yml b/apps/dashy/3.0.0/docker-compose.yml new file mode 100644 index 00000000..8192e32b --- /dev/null +++ b/apps/dashy/3.0.0/docker-compose.yml @@ -0,0 +1,29 @@ +version: '3' +services: + dashy: + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:8080" + volumes: + - ./data/user-data/conf.yml:/app/user-data/conf.yml + - ./data/item-icons:/app/user-data/item-icons + environment: + - NODE_ENV=production + - UID=1000 + - GID=1000 + healthcheck: + test: ['CMD', 'node', '/app/services/healthcheck'] + interval: 1m30s + timeout: 10s + retries: 3 + start_period: 40s + image: lissy93/dashy:3.0.0 + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/dashy/3.0.0/scripts/init.sh b/apps/dashy/3.0.0/scripts/init.sh new file mode 100644 index 00000000..4e811c86 --- /dev/null +++ b/apps/dashy/3.0.0/scripts/init.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +chown -R 1000:1000 data \ No newline at end of file diff --git a/apps/dashy/README.md b/apps/dashy/README.md new file mode 100644 index 00000000..805a4059 --- /dev/null +++ b/apps/dashy/README.md @@ -0,0 +1,32 @@ + +

Dashy

+

+ Dashy helps you organize your self-hosted services by making them accessible from a single place +
+ +
+ User Showcase | Live Demo | Getting Started | Documentation | GitHub +

+ +## Features 🌈 +- 📃 Support for multiple pages +- 🚦 Real-time status monitoring for each of your apps/links +- 📊 Use widgets to display info and dynamic content from self-hosted services +- 🔎 Instant search by name, domain, or tags + customizable hotkeys & keyboard shortcuts +- 🎨 Many built-in color themes, with UI color editor and support for custom CSS +- 🧸 Many icon options - Font-Awesome, homelab icons, auto-fetching Favicon, images, emojis, etc. +- 💂 Optional authentication with multi-user access, configurable privileges, and SSO support +- 🌎 Multi-language support, with 10+ human-translated languages, and more on the way +- ☁ Optional, encrypted, free off-site cloud backup and restore feature available +- 💼 A workspace view, for easily switching between multiple apps simultaneously +- 🛩️ A minimal view, for use as a fast-loading browser Startpage +- 🖱️ Choose app launch methods: new tab, same tab, clipboard, pop-up modal, or open in workspace view +- 📏 Customizable layout, sizes, text, component visibility, sort order, behavior, etc. +- 🖼️ Options for a full-screen background image, custom nav-bar links, HTML footer, title, etc. +- 🚀 Easy to setup with Docker, or on bare metal, or with 1-Click cloud deployment +- ⚙️ Easy single-file YAML-based configuration, and option to configure app through the UI +- ✨ Under active development with improvements and new features added regularly +- 🤏 Small bundle size, fully responsive UI, and PWA for basic offline access +- 🆓 100% free and open-source +- 🔐 Strong focus on privacy +- 🌈 And loads more... diff --git a/apps/dashy/data.yml b/apps/dashy/data.yml new file mode 100644 index 00000000..6dff03b8 --- /dev/null +++ b/apps/dashy/data.yml @@ -0,0 +1,19 @@ +name: Dashy +tags: + - 建站 +title: 专为您打造的可自行托管的个人仪表板 +description: 专为您打造的可自行托管的个人仪表板 +additionalProperties: + key: dashy + name: Dashy + tags: + - WebSite + shortDescZh: 专为您打造的可自行托管的个人仪表板 + shortDescEn: A self-hostable personal dashboard built for you + type: website + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://dashy.to + github: https://github.com/Lissy93/dashy + document: https://dashy.to/docs diff --git a/apps/dashy/latest/.env.sample b/apps/dashy/latest/.env.sample new file mode 100644 index 00000000..90905990 --- /dev/null +++ b/apps/dashy/latest/.env.sample @@ -0,0 +1,2 @@ +CONTAINER_NAME="dashy" +PANEL_APP_PORT_HTTP="40219" diff --git a/apps/dashy/latest/data.yml b/apps/dashy/latest/data.yml new file mode 100644 index 00000000..e3019b8b --- /dev/null +++ b/apps/dashy/latest/data.yml @@ -0,0 +1,10 @@ +additionalProperties: + formFields: + - default: 40209 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number diff --git a/apps/dashy/latest/data/item-icons/.gitkeep b/apps/dashy/latest/data/item-icons/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/dashy/latest/data/user-data/conf.yml b/apps/dashy/latest/data/user-data/conf.yml new file mode 100644 index 00000000..5f0b012a --- /dev/null +++ b/apps/dashy/latest/data/user-data/conf.yml @@ -0,0 +1,47 @@ +--- +# Page meta info, like heading, footer text and nav links +pageInfo: + title: Dashy + description: Welcome to your new dashboard! + navLinks: + - title: GitHub + path: https://github.com/Lissy93/dashy + - title: Documentation + path: https://dashy.to/docs + +# Optional app settings and configuration +appConfig: + theme: colorful + +# Main content - An array of sections, each containing an array of items +sections: +- name: Getting Started + icon: fas fa-rocket + items: + - title: Dashy Live + description: Development a project management links for Dashy + icon: https://i.ibb.co/qWWpD0v/astro-dab-128.png + url: https://live.dashy.to/ + target: newtab + - title: GitHub + description: Source Code, Issues and Pull Requests + url: https://github.com/lissy93/dashy + icon: favicon + - title: Docs + description: Configuring & Usage Documentation + provider: Dashy.to + icon: far fa-book + url: https://dashy.to/docs + - title: Showcase + description: See how others are using Dashy + url: https://github.com/Lissy93/dashy/blob/master/docs/showcase.md + icon: far fa-grin-hearts + - title: Config Guide + description: See full list of configuration options + url: https://github.com/Lissy93/dashy/blob/master/docs/configuring.md + icon: fas fa-wrench + - title: Support + description: Get help with Dashy, raise a bug, or get in contact + url: https://github.com/Lissy93/dashy/blob/master/.github/SUPPORT.md + icon: far fa-hands-helping + \ No newline at end of file diff --git a/apps/dashy/latest/docker-compose.yml b/apps/dashy/latest/docker-compose.yml new file mode 100644 index 00000000..d295a003 --- /dev/null +++ b/apps/dashy/latest/docker-compose.yml @@ -0,0 +1,29 @@ +version: '3' +services: + dashy: + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:8080" + volumes: + - ./data/user-data/conf.yml:/app/user-data/conf.yml + - ./data/item-icons:/app/user-data/item-icons + environment: + - NODE_ENV=production + - UID=1000 + - GID=1000 + healthcheck: + test: ['CMD', 'node', '/app/services/healthcheck'] + interval: 1m30s + timeout: 10s + retries: 3 + start_period: 40s + image: lissy93/dashy:latest + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/dashy/latest/scripts/init.sh b/apps/dashy/latest/scripts/init.sh new file mode 100644 index 00000000..4e811c86 --- /dev/null +++ b/apps/dashy/latest/scripts/init.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +chown -R 1000:1000 data \ No newline at end of file diff --git a/apps/dashy/logo.png b/apps/dashy/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e1f6c93b10581c2720772a73385499112e7bff04 GIT binary patch literal 9409 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