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
literal 0
HcmV?d00001
diff --git a/apps/emby-linuxserver/4.9.5/.env.sample b/apps/emby-linuxserver/4.9.5/.env.sample
new file mode 100644
index 000000000..c35d9adc3
--- /dev/null
+++ b/apps/emby-linuxserver/4.9.5/.env.sample
@@ -0,0 +1,7 @@
+CONTAINER_NAME=
+PANEL_APP_PORT_HTTP=8096
+PANEL_APP_PORT_HTTPS=8920
+CONFIG_PATH=./data/config
+TV_PATH=./data/tvshows
+MOVIES_PATH=./data/movies
+TIME_ZONE=Asia/Shanghai
diff --git a/apps/emby-linuxserver/4.9.5/data.yml b/apps/emby-linuxserver/4.9.5/data.yml
new file mode 100644
index 000000000..705396648
--- /dev/null
+++ b/apps/emby-linuxserver/4.9.5/data.yml
@@ -0,0 +1,100 @@
+additionalProperties:
+ formFields:
+ - default: 8096
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: HTTP Port
+ labelZh: HTTP 端口
+ label:
+ en: HTTP Port
+ zh: HTTP 端口
+ zh-Hant: HTTP 連接埠
+ ja: HTTP ポート
+ ko: HTTP 포트
+ ru: HTTP-порт
+ ms: Port HTTP
+ pt-br: Porta HTTP
+ required: true
+ type: number
+ rule: paramPort
+ - default: 8920
+ edit: true
+ envKey: PANEL_APP_PORT_HTTPS
+ labelEn: Https Port
+ labelZh: Https 端口
+ label:
+ en: Https Port
+ zh: Https 端口
+ zh-Hant: Https 連接埠
+ ja: Https ポート
+ ko: Https 포트
+ ru: Порт Https
+ ms: Port Https
+ pt-br: Porta Https
+ required: true
+ type: number
+ rule: paramPort
+ - default: ./data/config
+ edit: true
+ envKey: CONFIG_PATH
+ labelEn: Config folder path
+ labelZh: 配置文件路径
+ label:
+ en: Config folder path
+ zh: 配置文件路径
+ zh-Hant: 設定檔資料夾路徑
+ ja: 設定フォルダーのパス
+ ko: 설정 폴더 경로
+ ru: Путь к папке конфигурации
+ ms: Laluan folder konfigurasi
+ pt-br: Caminho da pasta de configuração
+ required: true
+ type: text
+ - default: ./data/tvshows
+ edit: true
+ envKey: TV_PATH
+ labelEn: TV shows path
+ labelZh: 剧集目录
+ label:
+ en: TV shows path
+ zh: 剧集目录
+ zh-Hant: 劇集目錄
+ ja: テレビ番組ディレクトリ
+ ko: TV 프로그램 디렉터리
+ ru: Каталог телепередач
+ ms: Laluan rancangan TV
+ pt-br: Caminho de series
+ required: true
+ type: text
+ - default: ./data/movies
+ edit: true
+ envKey: MOVIES_PATH
+ labelEn: Movies path
+ labelZh: 电影目录
+ label:
+ en: Movies path
+ zh: 电影目录
+ zh-Hant: 電影目錄
+ ja: 映画ディレクトリ
+ ko: 영화 디렉터리
+ ru: Каталог фильмов
+ ms: Laluan filem
+ pt-br: Caminho de filmes
+ required: true
+ type: text
+ - default: Asia/Shanghai
+ edit: true
+ envKey: TIME_ZONE
+ labelEn: Time zone
+ labelZh: 时区
+ label:
+ en: Time zone
+ zh: 时区
+ zh-Hant: 時區
+ ja: タイムゾーン
+ ko: 시간대
+ ru: Часовой пояс
+ ms: Zon waktu
+ pt-br: Fuso horário
+ required: true
+ type: text
diff --git a/apps/emby-linuxserver/4.9.5/data/.gitkeep b/apps/emby-linuxserver/4.9.5/data/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/apps/emby-linuxserver/4.9.5/docker-compose.yml b/apps/emby-linuxserver/4.9.5/docker-compose.yml
new file mode 100644
index 000000000..7ff8b2c4f
--- /dev/null
+++ b/apps/emby-linuxserver/4.9.5/docker-compose.yml
@@ -0,0 +1,23 @@
+networks:
+ 1panel-network:
+ external: true
+services:
+ emby:
+ image: "linuxserver/emby:4.9.5"
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8096"
+ - "${PANEL_APP_PORT_HTTPS}:8920"
+ volumes:
+ - "${CONFIG_PATH}:/config"
+ - "${TV_PATH}:/data/tvshows"
+ - "${MOVIES_PATH}:/data/movies"
+ environment:
+ - PUID=1000
+ - PGID=1000
+ - TZ=${TIME_ZONE}
+ labels:
+ createdBy: "Apps"
diff --git a/apps/emby-linuxserver/4.9.5/scripts/init.sh b/apps/emby-linuxserver/4.9.5/scripts/init.sh
new file mode 100755
index 000000000..ee575da4e
--- /dev/null
+++ b/apps/emby-linuxserver/4.9.5/scripts/init.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+set -euo pipefail
+mkdir -p ./data/config ./data/tvshows ./data/movies
+chown -R 1000:1000 ./data 2>/dev/null || true
diff --git a/apps/emby-linuxserver/4.9.5/scripts/uninstall.sh b/apps/emby-linuxserver/4.9.5/scripts/uninstall.sh
new file mode 100755
index 000000000..ab8a8d674
--- /dev/null
+++ b/apps/emby-linuxserver/4.9.5/scripts/uninstall.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+docker-compose down --volumes
diff --git a/apps/emby-linuxserver/4.9.5/scripts/upgrade.sh b/apps/emby-linuxserver/4.9.5/scripts/upgrade.sh
new file mode 100755
index 000000000..6e877466e
--- /dev/null
+++ b/apps/emby-linuxserver/4.9.5/scripts/upgrade.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+set -euo pipefail
diff --git a/apps/emby-linuxserver/README.md b/apps/emby-linuxserver/README.md
new file mode 100644
index 000000000..c37bd15ec
--- /dev/null
+++ b/apps/emby-linuxserver/README.md
@@ -0,0 +1,32 @@
+# Emby LinuxServer
+
+## 产品介绍
+
+Emby LinuxServer 使用 LinuxServer.io 维护的 `linuxserver/emby` 镜像,提供 Emby 媒体服务器 能力。
+
+## 主要功能
+
+- 通过 Web UI 进行 media streaming 配置
+- 持久化保存配置和业务数据
+- 使用 8096 端口提供 Web 管理界面
+- 支持自定义时区
+
+## 访问说明
+
+安装完成后,通过 1Panel 应用入口或 `http://服务器地址:HTTP端口` 访问 Web 界面。首次启动后请按应用页面提示完成初始化配置。
+
+## Introduction
+
+Emby LinuxServer uses the LinuxServer.io maintained `linuxserver/emby` image for media streaming.
+
+## Features
+
+- Manage the application from the Web UI
+- Persist configuration and application data
+- Expose the Web interface on port 8096
+- Configure the container time zone
+
+## Links
+
+- LinuxServer image documentation:
+- Project website:
diff --git a/apps/emby-linuxserver/data.yml b/apps/emby-linuxserver/data.yml
new file mode 100644
index 000000000..0942ec429
--- /dev/null
+++ b/apps/emby-linuxserver/data.yml
@@ -0,0 +1,30 @@
+name: Emby LinuxServer
+tags:
+- Media
+title: Emby 媒体服务器
+description: Emby 媒体服务器
+additionalProperties:
+ key: emby-linuxserver
+ name: Emby LinuxServer
+ tags:
+ - Media
+ shortDescZh: Emby 媒体服务器
+ shortDescEn: Media server maintained by LinuxServer.io
+ description:
+ en: Media server maintained by LinuxServer.io
+ zh: Emby 媒体服务器
+ zh-Hant: Emby 媒體伺服器
+ ja: LinuxServer.io が保守するメディアサーバー
+ ko: LinuxServer.io에서 유지 관리하는 미디어 서버
+ ru: Медиасервер, поддерживаемый LinuxServer.io
+ ms: Pelayan media yang diselenggara oleh LinuxServer.io
+ pt-br: Servidor de midia mantido pela LinuxServer.io
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ website: https://emby.media/
+ github: https://github.com/linuxserver/docker-emby
+ document: https://docs.linuxserver.io/images/docker-emby/
+ architectures:
+ - amd64
+ - arm64
diff --git a/apps/emby-linuxserver/latest/.env.sample b/apps/emby-linuxserver/latest/.env.sample
new file mode 100644
index 000000000..c35d9adc3
--- /dev/null
+++ b/apps/emby-linuxserver/latest/.env.sample
@@ -0,0 +1,7 @@
+CONTAINER_NAME=
+PANEL_APP_PORT_HTTP=8096
+PANEL_APP_PORT_HTTPS=8920
+CONFIG_PATH=./data/config
+TV_PATH=./data/tvshows
+MOVIES_PATH=./data/movies
+TIME_ZONE=Asia/Shanghai
diff --git a/apps/emby-linuxserver/latest/data.yml b/apps/emby-linuxserver/latest/data.yml
new file mode 100644
index 000000000..705396648
--- /dev/null
+++ b/apps/emby-linuxserver/latest/data.yml
@@ -0,0 +1,100 @@
+additionalProperties:
+ formFields:
+ - default: 8096
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: HTTP Port
+ labelZh: HTTP 端口
+ label:
+ en: HTTP Port
+ zh: HTTP 端口
+ zh-Hant: HTTP 連接埠
+ ja: HTTP ポート
+ ko: HTTP 포트
+ ru: HTTP-порт
+ ms: Port HTTP
+ pt-br: Porta HTTP
+ required: true
+ type: number
+ rule: paramPort
+ - default: 8920
+ edit: true
+ envKey: PANEL_APP_PORT_HTTPS
+ labelEn: Https Port
+ labelZh: Https 端口
+ label:
+ en: Https Port
+ zh: Https 端口
+ zh-Hant: Https 連接埠
+ ja: Https ポート
+ ko: Https 포트
+ ru: Порт Https
+ ms: Port Https
+ pt-br: Porta Https
+ required: true
+ type: number
+ rule: paramPort
+ - default: ./data/config
+ edit: true
+ envKey: CONFIG_PATH
+ labelEn: Config folder path
+ labelZh: 配置文件路径
+ label:
+ en: Config folder path
+ zh: 配置文件路径
+ zh-Hant: 設定檔資料夾路徑
+ ja: 設定フォルダーのパス
+ ko: 설정 폴더 경로
+ ru: Путь к папке конфигурации
+ ms: Laluan folder konfigurasi
+ pt-br: Caminho da pasta de configuração
+ required: true
+ type: text
+ - default: ./data/tvshows
+ edit: true
+ envKey: TV_PATH
+ labelEn: TV shows path
+ labelZh: 剧集目录
+ label:
+ en: TV shows path
+ zh: 剧集目录
+ zh-Hant: 劇集目錄
+ ja: テレビ番組ディレクトリ
+ ko: TV 프로그램 디렉터리
+ ru: Каталог телепередач
+ ms: Laluan rancangan TV
+ pt-br: Caminho de series
+ required: true
+ type: text
+ - default: ./data/movies
+ edit: true
+ envKey: MOVIES_PATH
+ labelEn: Movies path
+ labelZh: 电影目录
+ label:
+ en: Movies path
+ zh: 电影目录
+ zh-Hant: 電影目錄
+ ja: 映画ディレクトリ
+ ko: 영화 디렉터리
+ ru: Каталог фильмов
+ ms: Laluan filem
+ pt-br: Caminho de filmes
+ required: true
+ type: text
+ - default: Asia/Shanghai
+ edit: true
+ envKey: TIME_ZONE
+ labelEn: Time zone
+ labelZh: 时区
+ label:
+ en: Time zone
+ zh: 时区
+ zh-Hant: 時區
+ ja: タイムゾーン
+ ko: 시간대
+ ru: Часовой пояс
+ ms: Zon waktu
+ pt-br: Fuso horário
+ required: true
+ type: text
diff --git a/apps/emby-linuxserver/latest/data/.gitkeep b/apps/emby-linuxserver/latest/data/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/apps/emby-linuxserver/latest/docker-compose.yml b/apps/emby-linuxserver/latest/docker-compose.yml
new file mode 100644
index 000000000..597465631
--- /dev/null
+++ b/apps/emby-linuxserver/latest/docker-compose.yml
@@ -0,0 +1,23 @@
+networks:
+ 1panel-network:
+ external: true
+services:
+ emby:
+ image: "linuxserver/emby:latest"
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8096"
+ - "${PANEL_APP_PORT_HTTPS}:8920"
+ volumes:
+ - "${CONFIG_PATH}:/config"
+ - "${TV_PATH}:/data/tvshows"
+ - "${MOVIES_PATH}:/data/movies"
+ environment:
+ - PUID=1000
+ - PGID=1000
+ - TZ=${TIME_ZONE}
+ labels:
+ createdBy: "Apps"
diff --git a/apps/emby-linuxserver/latest/scripts/init.sh b/apps/emby-linuxserver/latest/scripts/init.sh
new file mode 100755
index 000000000..ee575da4e
--- /dev/null
+++ b/apps/emby-linuxserver/latest/scripts/init.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+set -euo pipefail
+mkdir -p ./data/config ./data/tvshows ./data/movies
+chown -R 1000:1000 ./data 2>/dev/null || true
diff --git a/apps/emby-linuxserver/latest/scripts/uninstall.sh b/apps/emby-linuxserver/latest/scripts/uninstall.sh
new file mode 100755
index 000000000..ab8a8d674
--- /dev/null
+++ b/apps/emby-linuxserver/latest/scripts/uninstall.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+docker-compose down --volumes
diff --git a/apps/emby-linuxserver/latest/scripts/upgrade.sh b/apps/emby-linuxserver/latest/scripts/upgrade.sh
new file mode 100755
index 000000000..6e877466e
--- /dev/null
+++ b/apps/emby-linuxserver/latest/scripts/upgrade.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+set -euo pipefail
diff --git a/apps/emby-linuxserver/logo.png b/apps/emby-linuxserver/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..4d289baba351eecd4524fd682ff200d84bb77949
GIT binary patch
literal 1755
zcmV<11|<23P)Z~+QL{@@v`bR7OH#8+QM5`>vrAC4OH#B-QM5}^v`JC4N>Q~-QME}@vrAI6
zOH#B-QnX4?v`SI6N>Q~+QM5`?vr1C4OHs2+QngD~woh!pXIHmSS-4Zl=*Pa}ymP~D
z)a=s#|Nrau>ZsYJX1!qF@!powl3ck~Pqaw-{rb=9&4bE*^!oI@;<|*&e{{oc?Dp%c
z+o<62-qGvNh0B0-#Bc2P?5x|UnA4Qf>(IdDy>`TKXue|M^5Cu9s+-i8UbD0000SbW%=J03@(j9e*|5C-tIEy#(Oj39O{z=H2GtH`b808Ev1xQPn^HTQ4XFucGr1<2ji`xc6Kb;AK&~0);A)mR
zu$pNOnrpT>pju!KrWTn4ekXRv
zadoQ=;7zS)9?kX83|Zx&=sh=NpZKj?jWTt+u)F<-R@0>bqbsATjdCPa#
z&YZQWUToy9-tFP~xebHr0yA`bh`4$F&Azc*7n%3bm~Oq*F{Lgv57CH&3ug_fi_M2<
z^bl>fy2Lz!_7H96G?tmi(3oyr?1WdBn#a+IgA12JC#2jwiAH?;osFPs2lF%<@v>^P
ziE0;f78=ucuXF;boy?hN#KD>Of=r{EIR}lneRZRHwWB!~jd=NewP-u4UCjk(Oh34C
zx?iE%*<6H199+9z-88zJi_wVNS8r6LCYa06h&xKrE>Tm=RGx1{(46FK!1lv(Sh;Uy`G(
zXl9}@?cKT84`t?}5eIkgcLL0y42}5J*MZD@bh>r%ULZ3YP1&q$D4UsR(zdX=nT38p
z+JM(LGtk7Nj;6kujwbHB`!G|{>*sc*zmZnOW*Yhd^)x9X&kHA^N_6^=dTy6hBX|L-
zL~ovd)R&u+WA*CL>)-5Bm(F<^U*T0jH}u}O^rO+-0)brZf~JQV3QG@SwF7$dJ8GDr
zq^KcPm!j9d-(@UYQa=)^OVFG!gF|IXrY=OY!VFF|FOj+k{R1b=;8;A8sPoahFoSbh
zN}$d|?>+tzyqYEIY;^k5&)kD%LT!<)&O~#=48*D>SDk_Wg&Srd*F%}=DfHgsUsd;V
zeW)kU>Dq6d3e8OQIQsWLy8TMcJoPC0$?(33a=rb3E!;{G9TN{{#5#V)YJwiuV8j002ovPDHLkV1fW~j_3dY
literal 0
HcmV?d00001
diff --git a/apps/heimdall-linuxserver/2.7.6/.env.sample b/apps/heimdall-linuxserver/2.7.6/.env.sample
new file mode 100644
index 000000000..8a615c763
--- /dev/null
+++ b/apps/heimdall-linuxserver/2.7.6/.env.sample
@@ -0,0 +1,5 @@
+CONTAINER_NAME=
+PANEL_APP_PORT_HTTP=80
+PANEL_APP_PORT_HTTPS=443
+CONFIG_PATH=./data/config
+TIME_ZONE=Asia/Shanghai
diff --git a/apps/heimdall-linuxserver/2.7.6/data.yml b/apps/heimdall-linuxserver/2.7.6/data.yml
new file mode 100644
index 000000000..9cb25e7d1
--- /dev/null
+++ b/apps/heimdall-linuxserver/2.7.6/data.yml
@@ -0,0 +1,68 @@
+additionalProperties:
+ formFields:
+ - default: 80
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: HTTP Port
+ labelZh: HTTP 端口
+ label:
+ en: HTTP Port
+ zh: HTTP 端口
+ zh-Hant: HTTP 連接埠
+ ja: HTTP ポート
+ ko: HTTP 포트
+ ru: HTTP-порт
+ ms: Port HTTP
+ pt-br: Porta HTTP
+ required: true
+ type: number
+ rule: paramPort
+ - default: 443
+ edit: true
+ envKey: PANEL_APP_PORT_HTTPS
+ labelEn: Https Port
+ labelZh: Https 端口
+ label:
+ en: Https Port
+ zh: Https 端口
+ zh-Hant: Https 連接埠
+ ja: Https ポート
+ ko: Https 포트
+ ru: Порт Https
+ ms: Port Https
+ pt-br: Porta Https
+ required: true
+ type: number
+ rule: paramPort
+ - default: ./data/config
+ edit: true
+ envKey: CONFIG_PATH
+ labelEn: Config folder path
+ labelZh: 配置文件路径
+ label:
+ en: Config folder path
+ zh: 配置文件路径
+ zh-Hant: 設定檔資料夾路徑
+ ja: 設定フォルダーのパス
+ ko: 설정 폴더 경로
+ ru: Путь к папке конфигурации
+ ms: Laluan folder konfigurasi
+ pt-br: Caminho da pasta de configuração
+ required: true
+ type: text
+ - default: Asia/Shanghai
+ edit: true
+ envKey: TIME_ZONE
+ labelEn: Time zone
+ labelZh: 时区
+ label:
+ en: Time zone
+ zh: 时区
+ zh-Hant: 時區
+ ja: タイムゾーン
+ ko: 시간대
+ ru: Часовой пояс
+ ms: Zon waktu
+ pt-br: Fuso horário
+ required: true
+ type: text
diff --git a/apps/heimdall-linuxserver/2.7.6/data/.gitkeep b/apps/heimdall-linuxserver/2.7.6/data/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/apps/heimdall-linuxserver/2.7.6/docker-compose.yml b/apps/heimdall-linuxserver/2.7.6/docker-compose.yml
new file mode 100644
index 000000000..35dd08732
--- /dev/null
+++ b/apps/heimdall-linuxserver/2.7.6/docker-compose.yml
@@ -0,0 +1,21 @@
+networks:
+ 1panel-network:
+ external: true
+services:
+ heimdall:
+ image: "linuxserver/heimdall:2.7.6"
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:80"
+ - "${PANEL_APP_PORT_HTTPS}:443"
+ volumes:
+ - "${CONFIG_PATH}:/config"
+ environment:
+ - PUID=1000
+ - PGID=1000
+ - TZ=${TIME_ZONE}
+ labels:
+ createdBy: "Apps"
diff --git a/apps/heimdall-linuxserver/2.7.6/scripts/init.sh b/apps/heimdall-linuxserver/2.7.6/scripts/init.sh
new file mode 100755
index 000000000..71fd851bd
--- /dev/null
+++ b/apps/heimdall-linuxserver/2.7.6/scripts/init.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+set -euo pipefail
+mkdir -p ./data/config
+chown -R 1000:1000 ./data 2>/dev/null || true
diff --git a/apps/heimdall-linuxserver/2.7.6/scripts/uninstall.sh b/apps/heimdall-linuxserver/2.7.6/scripts/uninstall.sh
new file mode 100755
index 000000000..ab8a8d674
--- /dev/null
+++ b/apps/heimdall-linuxserver/2.7.6/scripts/uninstall.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+docker-compose down --volumes
diff --git a/apps/heimdall-linuxserver/2.7.6/scripts/upgrade.sh b/apps/heimdall-linuxserver/2.7.6/scripts/upgrade.sh
new file mode 100755
index 000000000..6e877466e
--- /dev/null
+++ b/apps/heimdall-linuxserver/2.7.6/scripts/upgrade.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+set -euo pipefail
diff --git a/apps/heimdall-linuxserver/README.md b/apps/heimdall-linuxserver/README.md
new file mode 100644
index 000000000..80de01ed6
--- /dev/null
+++ b/apps/heimdall-linuxserver/README.md
@@ -0,0 +1,32 @@
+# Heimdall LinuxServer
+
+## 产品介绍
+
+Heimdall LinuxServer 使用 LinuxServer.io 维护的 `linuxserver/heimdall` 镜像,提供 Heimdall 应用导航页 能力。
+
+## 主要功能
+
+- 通过 Web UI 进行 application dashboard management 配置
+- 持久化保存配置和业务数据
+- 使用 80 端口提供 Web 管理界面
+- 支持自定义时区
+
+## 访问说明
+
+安装完成后,通过 1Panel 应用入口或 `http://服务器地址:HTTP端口` 访问 Web 界面。首次启动后请按应用页面提示完成初始化配置。
+
+## Introduction
+
+Heimdall LinuxServer uses the LinuxServer.io maintained `linuxserver/heimdall` image for application dashboard management.
+
+## Features
+
+- Manage the application from the Web UI
+- Persist configuration and application data
+- Expose the Web interface on port 80
+- Configure the container time zone
+
+## Links
+
+- LinuxServer image documentation:
+- Project website:
diff --git a/apps/heimdall-linuxserver/data.yml b/apps/heimdall-linuxserver/data.yml
new file mode 100644
index 000000000..830afe305
--- /dev/null
+++ b/apps/heimdall-linuxserver/data.yml
@@ -0,0 +1,30 @@
+name: Heimdall LinuxServer
+tags:
+- Tool
+title: Heimdall 应用导航页
+description: Heimdall 应用导航页
+additionalProperties:
+ key: heimdall-linuxserver
+ name: Heimdall LinuxServer
+ tags:
+ - Tool
+ shortDescZh: Heimdall 应用导航页
+ shortDescEn: Application dashboard maintained by LinuxServer.io
+ description:
+ en: Application dashboard maintained by LinuxServer.io
+ zh: Heimdall 应用导航页
+ zh-Hant: Heimdall 應用導航頁
+ ja: LinuxServer.io が保守するアプリケーションダッシュボード
+ ko: LinuxServer.io에서 유지 관리하는 애플리케이션 대시보드
+ ru: Панель приложений, поддерживаемая LinuxServer.io
+ ms: Papan pemuka aplikasi yang diselenggara oleh LinuxServer.io
+ pt-br: Painel de aplicativos mantido pela LinuxServer.io
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ website: https://heimdall.site/
+ github: https://github.com/linuxserver/docker-heimdall
+ document: https://docs.linuxserver.io/images/docker-heimdall/
+ architectures:
+ - amd64
+ - arm64
diff --git a/apps/heimdall-linuxserver/latest/.env.sample b/apps/heimdall-linuxserver/latest/.env.sample
new file mode 100644
index 000000000..8a615c763
--- /dev/null
+++ b/apps/heimdall-linuxserver/latest/.env.sample
@@ -0,0 +1,5 @@
+CONTAINER_NAME=
+PANEL_APP_PORT_HTTP=80
+PANEL_APP_PORT_HTTPS=443
+CONFIG_PATH=./data/config
+TIME_ZONE=Asia/Shanghai
diff --git a/apps/heimdall-linuxserver/latest/data.yml b/apps/heimdall-linuxserver/latest/data.yml
new file mode 100644
index 000000000..9cb25e7d1
--- /dev/null
+++ b/apps/heimdall-linuxserver/latest/data.yml
@@ -0,0 +1,68 @@
+additionalProperties:
+ formFields:
+ - default: 80
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: HTTP Port
+ labelZh: HTTP 端口
+ label:
+ en: HTTP Port
+ zh: HTTP 端口
+ zh-Hant: HTTP 連接埠
+ ja: HTTP ポート
+ ko: HTTP 포트
+ ru: HTTP-порт
+ ms: Port HTTP
+ pt-br: Porta HTTP
+ required: true
+ type: number
+ rule: paramPort
+ - default: 443
+ edit: true
+ envKey: PANEL_APP_PORT_HTTPS
+ labelEn: Https Port
+ labelZh: Https 端口
+ label:
+ en: Https Port
+ zh: Https 端口
+ zh-Hant: Https 連接埠
+ ja: Https ポート
+ ko: Https 포트
+ ru: Порт Https
+ ms: Port Https
+ pt-br: Porta Https
+ required: true
+ type: number
+ rule: paramPort
+ - default: ./data/config
+ edit: true
+ envKey: CONFIG_PATH
+ labelEn: Config folder path
+ labelZh: 配置文件路径
+ label:
+ en: Config folder path
+ zh: 配置文件路径
+ zh-Hant: 設定檔資料夾路徑
+ ja: 設定フォルダーのパス
+ ko: 설정 폴더 경로
+ ru: Путь к папке конфигурации
+ ms: Laluan folder konfigurasi
+ pt-br: Caminho da pasta de configuração
+ required: true
+ type: text
+ - default: Asia/Shanghai
+ edit: true
+ envKey: TIME_ZONE
+ labelEn: Time zone
+ labelZh: 时区
+ label:
+ en: Time zone
+ zh: 时区
+ zh-Hant: 時區
+ ja: タイムゾーン
+ ko: 시간대
+ ru: Часовой пояс
+ ms: Zon waktu
+ pt-br: Fuso horário
+ required: true
+ type: text
diff --git a/apps/heimdall-linuxserver/latest/data/.gitkeep b/apps/heimdall-linuxserver/latest/data/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/apps/heimdall-linuxserver/latest/docker-compose.yml b/apps/heimdall-linuxserver/latest/docker-compose.yml
new file mode 100644
index 000000000..83536409e
--- /dev/null
+++ b/apps/heimdall-linuxserver/latest/docker-compose.yml
@@ -0,0 +1,21 @@
+networks:
+ 1panel-network:
+ external: true
+services:
+ heimdall:
+ image: "linuxserver/heimdall:latest"
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:80"
+ - "${PANEL_APP_PORT_HTTPS}:443"
+ volumes:
+ - "${CONFIG_PATH}:/config"
+ environment:
+ - PUID=1000
+ - PGID=1000
+ - TZ=${TIME_ZONE}
+ labels:
+ createdBy: "Apps"
diff --git a/apps/heimdall-linuxserver/latest/scripts/init.sh b/apps/heimdall-linuxserver/latest/scripts/init.sh
new file mode 100755
index 000000000..71fd851bd
--- /dev/null
+++ b/apps/heimdall-linuxserver/latest/scripts/init.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+set -euo pipefail
+mkdir -p ./data/config
+chown -R 1000:1000 ./data 2>/dev/null || true
diff --git a/apps/heimdall-linuxserver/latest/scripts/uninstall.sh b/apps/heimdall-linuxserver/latest/scripts/uninstall.sh
new file mode 100755
index 000000000..ab8a8d674
--- /dev/null
+++ b/apps/heimdall-linuxserver/latest/scripts/uninstall.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+docker-compose down --volumes
diff --git a/apps/heimdall-linuxserver/latest/scripts/upgrade.sh b/apps/heimdall-linuxserver/latest/scripts/upgrade.sh
new file mode 100755
index 000000000..6e877466e
--- /dev/null
+++ b/apps/heimdall-linuxserver/latest/scripts/upgrade.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+set -euo pipefail
diff --git a/apps/heimdall-linuxserver/logo.png b/apps/heimdall-linuxserver/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..aa590926b7a1639e88cd5e45d483256f10d44a05
GIT binary patch
literal 5312
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
SP}D#G0000/dev/null || true
diff --git a/apps/jellyfin-linuxserver/10.11.11/scripts/uninstall.sh b/apps/jellyfin-linuxserver/10.11.11/scripts/uninstall.sh
new file mode 100755
index 000000000..ab8a8d674
--- /dev/null
+++ b/apps/jellyfin-linuxserver/10.11.11/scripts/uninstall.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+docker-compose down --volumes
diff --git a/apps/jellyfin-linuxserver/10.11.11/scripts/upgrade.sh b/apps/jellyfin-linuxserver/10.11.11/scripts/upgrade.sh
new file mode 100755
index 000000000..6e877466e
--- /dev/null
+++ b/apps/jellyfin-linuxserver/10.11.11/scripts/upgrade.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+set -euo pipefail
diff --git a/apps/jellyfin-linuxserver/README.md b/apps/jellyfin-linuxserver/README.md
new file mode 100644
index 000000000..3adb26a04
--- /dev/null
+++ b/apps/jellyfin-linuxserver/README.md
@@ -0,0 +1,32 @@
+# Jellyfin LinuxServer
+
+## 产品介绍
+
+Jellyfin LinuxServer 使用 LinuxServer.io 维护的 `linuxserver/jellyfin` 镜像,提供 Jellyfin 媒体服务器 能力。
+
+## 主要功能
+
+- 通过 Web UI 进行 media streaming 配置
+- 持久化保存配置和业务数据
+- 使用 8096 端口提供 Web 管理界面
+- 支持自定义时区
+
+## 访问说明
+
+安装完成后,通过 1Panel 应用入口或 `http://服务器地址:HTTP端口` 访问 Web 界面。首次启动后请按应用页面提示完成初始化配置。
+
+## Introduction
+
+Jellyfin LinuxServer uses the LinuxServer.io maintained `linuxserver/jellyfin` image for media streaming.
+
+## Features
+
+- Manage the application from the Web UI
+- Persist configuration and application data
+- Expose the Web interface on port 8096
+- Configure the container time zone
+
+## Links
+
+- LinuxServer image documentation:
+- Project website:
diff --git a/apps/jellyfin-linuxserver/data.yml b/apps/jellyfin-linuxserver/data.yml
new file mode 100644
index 000000000..b0a91ceee
--- /dev/null
+++ b/apps/jellyfin-linuxserver/data.yml
@@ -0,0 +1,30 @@
+name: Jellyfin LinuxServer
+tags:
+- Media
+title: Jellyfin 媒体服务器
+description: Jellyfin 媒体服务器
+additionalProperties:
+ key: jellyfin-linuxserver
+ name: Jellyfin LinuxServer
+ tags:
+ - Media
+ shortDescZh: Jellyfin 媒体服务器
+ shortDescEn: Media server maintained by LinuxServer.io
+ description:
+ en: Media server maintained by LinuxServer.io
+ zh: Jellyfin 媒体服务器
+ zh-Hant: Jellyfin 媒體伺服器
+ ja: LinuxServer.io が保守するメディアサーバー
+ ko: LinuxServer.io에서 유지 관리하는 미디어 서버
+ ru: Медиасервер, поддерживаемый LinuxServer.io
+ ms: Pelayan media yang diselenggara oleh LinuxServer.io
+ pt-br: Servidor de midia mantido pela LinuxServer.io
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ website: https://jellyfin.org/
+ github: https://github.com/linuxserver/docker-jellyfin
+ document: https://docs.linuxserver.io/images/docker-jellyfin/
+ architectures:
+ - amd64
+ - arm64
diff --git a/apps/jellyfin-linuxserver/latest/.env.sample b/apps/jellyfin-linuxserver/latest/.env.sample
new file mode 100644
index 000000000..9abbf7a55
--- /dev/null
+++ b/apps/jellyfin-linuxserver/latest/.env.sample
@@ -0,0 +1,9 @@
+CONTAINER_NAME=
+PANEL_APP_PORT_HTTP=8096
+PANEL_APP_PORT_HTTPS=8920
+PANEL_APP_PORT_DISCOVERY=7359
+PANEL_APP_PORT_DLNA=1900
+CONFIG_PATH=./data/config
+TV_PATH=./data/tvshows
+MOVIES_PATH=./data/movies
+TIME_ZONE=Asia/Shanghai
diff --git a/apps/jellyfin-linuxserver/latest/data.yml b/apps/jellyfin-linuxserver/latest/data.yml
new file mode 100644
index 000000000..21c1d05b6
--- /dev/null
+++ b/apps/jellyfin-linuxserver/latest/data.yml
@@ -0,0 +1,134 @@
+additionalProperties:
+ formFields:
+ - default: 8096
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: HTTP Port
+ labelZh: HTTP 端口
+ label:
+ en: HTTP Port
+ zh: HTTP 端口
+ zh-Hant: HTTP 連接埠
+ ja: HTTP ポート
+ ko: HTTP 포트
+ ru: HTTP-порт
+ ms: Port HTTP
+ pt-br: Porta HTTP
+ required: true
+ type: number
+ rule: paramPort
+ - default: 8920
+ edit: true
+ envKey: PANEL_APP_PORT_HTTPS
+ labelEn: Https Port
+ labelZh: Https 端口
+ label:
+ en: Https Port
+ zh: Https 端口
+ zh-Hant: Https 連接埠
+ ja: Https ポート
+ ko: Https 포트
+ ru: Порт Https
+ ms: Port Https
+ pt-br: Porta Https
+ required: true
+ type: number
+ rule: paramPort
+ - default: 7359
+ edit: true
+ envKey: PANEL_APP_PORT_DISCOVERY
+ labelEn: Discovery Port
+ labelZh: Discovery 端口
+ label:
+ en: Discovery Port
+ zh: Discovery 端口
+ zh-Hant: Discovery 連接埠
+ ja: Discovery ポート
+ ko: Discovery 포트
+ ru: Порт Discovery
+ ms: Port Discovery
+ pt-br: Porta Discovery
+ required: true
+ type: number
+ rule: paramPort
+ - default: 1900
+ edit: true
+ envKey: PANEL_APP_PORT_DLNA
+ labelEn: Dlna Port
+ labelZh: Dlna 端口
+ label:
+ en: Dlna Port
+ zh: Dlna 端口
+ zh-Hant: Dlna 連接埠
+ ja: Dlna ポート
+ ko: Dlna 포트
+ ru: Порт Dlna
+ ms: Port Dlna
+ pt-br: Porta Dlna
+ required: true
+ type: number
+ rule: paramPort
+ - default: ./data/config
+ edit: true
+ envKey: CONFIG_PATH
+ labelEn: Config folder path
+ labelZh: 配置文件路径
+ label:
+ en: Config folder path
+ zh: 配置文件路径
+ zh-Hant: 設定檔資料夾路徑
+ ja: 設定フォルダーのパス
+ ko: 설정 폴더 경로
+ ru: Путь к папке конфигурации
+ ms: Laluan folder konfigurasi
+ pt-br: Caminho da pasta de configuração
+ required: true
+ type: text
+ - default: ./data/tvshows
+ edit: true
+ envKey: TV_PATH
+ labelEn: TV shows path
+ labelZh: 剧集目录
+ label:
+ en: TV shows path
+ zh: 剧集目录
+ zh-Hant: 劇集目錄
+ ja: テレビ番組ディレクトリ
+ ko: TV 프로그램 디렉터리
+ ru: Каталог телепередач
+ ms: Laluan rancangan TV
+ pt-br: Caminho de series
+ required: true
+ type: text
+ - default: ./data/movies
+ edit: true
+ envKey: MOVIES_PATH
+ labelEn: Movies path
+ labelZh: 电影目录
+ label:
+ en: Movies path
+ zh: 电影目录
+ zh-Hant: 電影目錄
+ ja: 映画ディレクトリ
+ ko: 영화 디렉터리
+ ru: Каталог фильмов
+ ms: Laluan filem
+ pt-br: Caminho de filmes
+ required: true
+ type: text
+ - default: Asia/Shanghai
+ edit: true
+ envKey: TIME_ZONE
+ labelEn: Time zone
+ labelZh: 时区
+ label:
+ en: Time zone
+ zh: 时区
+ zh-Hant: 時區
+ ja: タイムゾーン
+ ko: 시간대
+ ru: Часовой пояс
+ ms: Zon waktu
+ pt-br: Fuso horário
+ required: true
+ type: text
diff --git a/apps/jellyfin-linuxserver/latest/data/.gitkeep b/apps/jellyfin-linuxserver/latest/data/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/apps/jellyfin-linuxserver/latest/docker-compose.yml b/apps/jellyfin-linuxserver/latest/docker-compose.yml
new file mode 100644
index 000000000..91c6c915e
--- /dev/null
+++ b/apps/jellyfin-linuxserver/latest/docker-compose.yml
@@ -0,0 +1,25 @@
+networks:
+ 1panel-network:
+ external: true
+services:
+ jellyfin:
+ image: "linuxserver/jellyfin:latest"
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8096"
+ - "${PANEL_APP_PORT_HTTPS}:8920"
+ - "${PANEL_APP_PORT_DISCOVERY}:7359/udp"
+ - "${PANEL_APP_PORT_DLNA}:1900/udp"
+ volumes:
+ - "${CONFIG_PATH}:/config"
+ - "${TV_PATH}:/data/tvshows"
+ - "${MOVIES_PATH}:/data/movies"
+ environment:
+ - PUID=1000
+ - PGID=1000
+ - TZ=${TIME_ZONE}
+ labels:
+ createdBy: "Apps"
diff --git a/apps/jellyfin-linuxserver/latest/scripts/init.sh b/apps/jellyfin-linuxserver/latest/scripts/init.sh
new file mode 100755
index 000000000..ee575da4e
--- /dev/null
+++ b/apps/jellyfin-linuxserver/latest/scripts/init.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+set -euo pipefail
+mkdir -p ./data/config ./data/tvshows ./data/movies
+chown -R 1000:1000 ./data 2>/dev/null || true
diff --git a/apps/jellyfin-linuxserver/latest/scripts/uninstall.sh b/apps/jellyfin-linuxserver/latest/scripts/uninstall.sh
new file mode 100755
index 000000000..ab8a8d674
--- /dev/null
+++ b/apps/jellyfin-linuxserver/latest/scripts/uninstall.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+docker-compose down --volumes
diff --git a/apps/jellyfin-linuxserver/latest/scripts/upgrade.sh b/apps/jellyfin-linuxserver/latest/scripts/upgrade.sh
new file mode 100755
index 000000000..6e877466e
--- /dev/null
+++ b/apps/jellyfin-linuxserver/latest/scripts/upgrade.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+set -euo pipefail
diff --git a/apps/jellyfin-linuxserver/logo.png b/apps/jellyfin-linuxserver/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..3aedd2fa547a87de894d22cd46edd49e25086f49
GIT binary patch
literal 5204
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/dev/null || true
diff --git a/apps/sonarr-linuxserver/4.0.17/scripts/uninstall.sh b/apps/sonarr-linuxserver/4.0.17/scripts/uninstall.sh
new file mode 100755
index 000000000..ab8a8d674
--- /dev/null
+++ b/apps/sonarr-linuxserver/4.0.17/scripts/uninstall.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+docker-compose down --volumes
diff --git a/apps/sonarr-linuxserver/4.0.17/scripts/upgrade.sh b/apps/sonarr-linuxserver/4.0.17/scripts/upgrade.sh
new file mode 100755
index 000000000..6e877466e
--- /dev/null
+++ b/apps/sonarr-linuxserver/4.0.17/scripts/upgrade.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+set -euo pipefail
diff --git a/apps/sonarr-linuxserver/README.md b/apps/sonarr-linuxserver/README.md
new file mode 100644
index 000000000..65080fd1c
--- /dev/null
+++ b/apps/sonarr-linuxserver/README.md
@@ -0,0 +1,32 @@
+# Sonarr LinuxServer
+
+## 产品介绍
+
+Sonarr LinuxServer 使用 LinuxServer.io 维护的 `linuxserver/sonarr` 镜像,提供 Sonarr 剧集媒体管理 能力。
+
+## 主要功能
+
+- 通过 Web UI 进行 TV series collection management 配置
+- 持久化保存配置和业务数据
+- 使用 8989 端口提供 Web 管理界面
+- 支持自定义时区
+
+## 访问说明
+
+安装完成后,通过 1Panel 应用入口或 `http://服务器地址:HTTP端口` 访问 Web 界面。首次启动后请按应用页面提示完成初始化配置。
+
+## Introduction
+
+Sonarr LinuxServer uses the LinuxServer.io maintained `linuxserver/sonarr` image for TV series collection management.
+
+## Features
+
+- Manage the application from the Web UI
+- Persist configuration and application data
+- Expose the Web interface on port 8989
+- Configure the container time zone
+
+## Links
+
+- LinuxServer image documentation:
+- Project website:
diff --git a/apps/sonarr-linuxserver/data.yml b/apps/sonarr-linuxserver/data.yml
new file mode 100644
index 000000000..963c9cb99
--- /dev/null
+++ b/apps/sonarr-linuxserver/data.yml
@@ -0,0 +1,30 @@
+name: Sonarr LinuxServer
+tags:
+- Media
+title: Sonarr 剧集媒体管理
+description: Sonarr 剧集媒体管理
+additionalProperties:
+ key: sonarr-linuxserver
+ name: Sonarr LinuxServer
+ tags:
+ - Media
+ shortDescZh: Sonarr 剧集媒体管理
+ shortDescEn: TV series collection manager maintained by LinuxServer.io
+ description:
+ en: TV series collection manager maintained by LinuxServer.io
+ zh: Sonarr 剧集媒体管理
+ zh-Hant: Sonarr 劇集媒體管理
+ ja: LinuxServer.io が保守するテレビシリーズ管理ツール
+ ko: LinuxServer.io에서 유지 관리하는 TV 시리즈 컬렉션 관리자
+ ru: Менеджер телесериалов, поддерживаемый LinuxServer.io
+ ms: Pengurus koleksi siri TV yang diselenggara oleh LinuxServer.io
+ pt-br: Gerenciador de series mantido pela LinuxServer.io
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ website: https://sonarr.tv/
+ github: https://github.com/linuxserver/docker-sonarr
+ document: https://docs.linuxserver.io/images/docker-sonarr/
+ architectures:
+ - amd64
+ - arm64
diff --git a/apps/sonarr-linuxserver/latest/.env.sample b/apps/sonarr-linuxserver/latest/.env.sample
new file mode 100644
index 000000000..c44d58bac
--- /dev/null
+++ b/apps/sonarr-linuxserver/latest/.env.sample
@@ -0,0 +1,6 @@
+CONTAINER_NAME=
+PANEL_APP_PORT_HTTP=8989
+CONFIG_PATH=./data/config
+TV_PATH=./data/tv
+DOWNLOADS_PATH=./data/downloads
+TIME_ZONE=Asia/Shanghai
diff --git a/apps/sonarr-linuxserver/latest/data.yml b/apps/sonarr-linuxserver/latest/data.yml
new file mode 100644
index 000000000..67c50f1da
--- /dev/null
+++ b/apps/sonarr-linuxserver/latest/data.yml
@@ -0,0 +1,83 @@
+additionalProperties:
+ formFields:
+ - default: 8989
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: HTTP Port
+ labelZh: HTTP 端口
+ label:
+ en: HTTP Port
+ zh: HTTP 端口
+ zh-Hant: HTTP 連接埠
+ ja: HTTP ポート
+ ko: HTTP 포트
+ ru: HTTP-порт
+ ms: Port HTTP
+ pt-br: Porta HTTP
+ required: true
+ type: number
+ rule: paramPort
+ - default: ./data/config
+ edit: true
+ envKey: CONFIG_PATH
+ labelEn: Config folder path
+ labelZh: 配置文件路径
+ label:
+ en: Config folder path
+ zh: 配置文件路径
+ zh-Hant: 設定檔資料夾路徑
+ ja: 設定フォルダーのパス
+ ko: 설정 폴더 경로
+ ru: Путь к папке конфигурации
+ ms: Laluan folder konfigurasi
+ pt-br: Caminho da pasta de configuração
+ required: true
+ type: text
+ - default: ./data/tv
+ edit: true
+ envKey: TV_PATH
+ labelEn: TV series path
+ labelZh: 剧集目录
+ label:
+ en: TV series path
+ zh: 剧集目录
+ zh-Hant: 劇集目錄
+ ja: テレビシリーズディレクトリ
+ ko: TV 시리즈 디렉터리
+ ru: Каталог сериалов
+ ms: Laluan siri TV
+ pt-br: Caminho de series
+ required: true
+ type: text
+ - default: ./data/downloads
+ edit: true
+ envKey: DOWNLOADS_PATH
+ labelEn: Downloads path
+ labelZh: 下载目录
+ label:
+ en: Downloads path
+ zh: 下载目录
+ zh-Hant: 下載目錄
+ ja: ダウンロードディレクトリ
+ ko: 다운로드 디렉터리
+ ru: Каталог загрузок
+ ms: Laluan muat turun
+ pt-br: Caminho de downloads
+ required: true
+ type: text
+ - default: Asia/Shanghai
+ edit: true
+ envKey: TIME_ZONE
+ labelEn: Time zone
+ labelZh: 时区
+ label:
+ en: Time zone
+ zh: 时区
+ zh-Hant: 時區
+ ja: タイムゾーン
+ ko: 시간대
+ ru: Часовой пояс
+ ms: Zon waktu
+ pt-br: Fuso horário
+ required: true
+ type: text
diff --git a/apps/sonarr-linuxserver/latest/data/.gitkeep b/apps/sonarr-linuxserver/latest/data/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/apps/sonarr-linuxserver/latest/docker-compose.yml b/apps/sonarr-linuxserver/latest/docker-compose.yml
new file mode 100644
index 000000000..40de35ee7
--- /dev/null
+++ b/apps/sonarr-linuxserver/latest/docker-compose.yml
@@ -0,0 +1,22 @@
+networks:
+ 1panel-network:
+ external: true
+services:
+ sonarr:
+ image: "linuxserver/sonarr:latest"
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8989"
+ volumes:
+ - "${CONFIG_PATH}:/config"
+ - "${TV_PATH}:/tv"
+ - "${DOWNLOADS_PATH}:/downloads"
+ environment:
+ - PUID=1000
+ - PGID=1000
+ - TZ=${TIME_ZONE}
+ labels:
+ createdBy: "Apps"
diff --git a/apps/sonarr-linuxserver/latest/scripts/init.sh b/apps/sonarr-linuxserver/latest/scripts/init.sh
new file mode 100755
index 000000000..3c30b7ec6
--- /dev/null
+++ b/apps/sonarr-linuxserver/latest/scripts/init.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+set -euo pipefail
+mkdir -p ./data/config ./data/tv ./data/downloads
+chown -R 1000:1000 ./data 2>/dev/null || true
diff --git a/apps/sonarr-linuxserver/latest/scripts/uninstall.sh b/apps/sonarr-linuxserver/latest/scripts/uninstall.sh
new file mode 100755
index 000000000..ab8a8d674
--- /dev/null
+++ b/apps/sonarr-linuxserver/latest/scripts/uninstall.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+docker-compose down --volumes
diff --git a/apps/sonarr-linuxserver/latest/scripts/upgrade.sh b/apps/sonarr-linuxserver/latest/scripts/upgrade.sh
new file mode 100755
index 000000000..6e877466e
--- /dev/null
+++ b/apps/sonarr-linuxserver/latest/scripts/upgrade.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+set -euo pipefail
diff --git a/apps/sonarr-linuxserver/logo.png b/apps/sonarr-linuxserver/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..9aba7728fe6711f7fe2f8a20d571dd699196d8a4
GIT binary patch
literal 4356
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