From 657351fe757eac482ae5e1bfda4880ab2499cebb Mon Sep 17 00:00:00 2001 From: okxlin <61420215+okxlin@users.noreply.github.com> Date: Fri, 26 Jun 2026 01:13:28 +0800 Subject: [PATCH] Add Obsidian LinuxServer app --- apps/obsidian-linuxserver/1.12.7/.env.sample | 10 ++ apps/obsidian-linuxserver/1.12.7/data.yml | 135 ++++++++++++++++++ .../1.12.7/docker-compose.yml | 26 ++++ .../1.12.7/scripts/init.sh | 14 ++ .../1.12.7/scripts/uninstall.sh | 3 + .../1.12.7/scripts/upgrade.sh | 5 + apps/obsidian-linuxserver/README.md | 65 +++++++++ apps/obsidian-linuxserver/data.yml | 31 ++++ apps/obsidian-linuxserver/latest/.env.sample | 10 ++ apps/obsidian-linuxserver/latest/data.yml | 135 ++++++++++++++++++ .../latest/docker-compose.yml | 26 ++++ .../latest/scripts/init.sh | 14 ++ .../latest/scripts/uninstall.sh | 3 + .../latest/scripts/upgrade.sh | 5 + apps/obsidian-linuxserver/logo.png | Bin 0 -> 6331 bytes 15 files changed, 482 insertions(+) create mode 100644 apps/obsidian-linuxserver/1.12.7/.env.sample create mode 100644 apps/obsidian-linuxserver/1.12.7/data.yml create mode 100644 apps/obsidian-linuxserver/1.12.7/docker-compose.yml create mode 100755 apps/obsidian-linuxserver/1.12.7/scripts/init.sh create mode 100755 apps/obsidian-linuxserver/1.12.7/scripts/uninstall.sh create mode 100755 apps/obsidian-linuxserver/1.12.7/scripts/upgrade.sh create mode 100644 apps/obsidian-linuxserver/README.md create mode 100644 apps/obsidian-linuxserver/data.yml create mode 100644 apps/obsidian-linuxserver/latest/.env.sample create mode 100644 apps/obsidian-linuxserver/latest/data.yml create mode 100644 apps/obsidian-linuxserver/latest/docker-compose.yml create mode 100755 apps/obsidian-linuxserver/latest/scripts/init.sh create mode 100755 apps/obsidian-linuxserver/latest/scripts/uninstall.sh create mode 100755 apps/obsidian-linuxserver/latest/scripts/upgrade.sh create mode 100644 apps/obsidian-linuxserver/logo.png diff --git a/apps/obsidian-linuxserver/1.12.7/.env.sample b/apps/obsidian-linuxserver/1.12.7/.env.sample new file mode 100644 index 000000000..80ec79f11 --- /dev/null +++ b/apps/obsidian-linuxserver/1.12.7/.env.sample @@ -0,0 +1,10 @@ +CONTAINER_NAME= +PANEL_APP_PORT_HTTP=3000 +PANEL_APP_PORT_HTTPS=3001 +CONFIG_PATH=./data/config +CUSTOM_USER=admin +PASSWORD=linuxserver-change-me +LC_ALL=zh_CN.UTF-8 +SHM_SIZE=1gb +TIME_ZONE=Asia/Shanghai + diff --git a/apps/obsidian-linuxserver/1.12.7/data.yml b/apps/obsidian-linuxserver/1.12.7/data.yml new file mode 100644 index 000000000..9c99af1b7 --- /dev/null +++ b/apps/obsidian-linuxserver/1.12.7/data.yml @@ -0,0 +1,135 @@ +additionalProperties: + formFields: + - default: 3000 + 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: 3001 + 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: admin + edit: true + envKey: CUSTOM_USER + labelEn: Basic Auth Username + labelZh: 访问用户名(Basic Auth) + label: + en: Basic Auth Username + zh: 访问用户名(Basic Auth) + zh-Hant: 存取使用者名稱(Basic Auth) + ja: ベーシック認証ユーザー名 + ko: 기본 인증 사용자명 + ru: Имя пользователя (Basic Auth) + ms: Nama pengguna Basic Auth + pt-br: Usuario Basic Auth + required: true + type: text + - default: linuxserver-change-me + edit: true + envKey: PASSWORD + labelEn: Basic Auth Password + labelZh: 访问密码(Basic Auth) + label: + en: Basic Auth Password + zh: 访问密码(Basic Auth) + zh-Hant: 存取密碼(Basic Auth) + ja: ベーシック認証パスワード + ko: 기본 인증 비밀번호 + ru: Пароль Basic Auth + ms: Kata laluan Basic Auth + pt-br: Senha Basic Auth + random: true + required: true + rule: paramComplexity + type: password + - default: zh_CN.UTF-8 + edit: true + envKey: LC_ALL + labelEn: Desktop language locale + labelZh: 桌面语言区域 + label: + en: Desktop language locale + zh: 桌面语言区域 + zh-Hant: 桌面語言區域 + ja: デスクトップ言語ロケール + ko: 데스크톱 언어 로케일 + ru: Локаль языка рабочего стола + ms: Lokal bahasa desktop + pt-br: Localidade do idioma da area de trabalho + required: false + type: text + - default: 1gb + edit: true + envKey: SHM_SIZE + labelEn: Shared memory size + labelZh: 共享内存大小 + label: + en: Shared memory size + zh: 共享内存大小 + zh-Hant: 共享記憶體大小 + ja: 共有メモリサイズ + ko: 공유 메모리 크기 + ru: Размер общей памяти + ms: Saiz memori kongsi + pt-br: Tamanho da memoria compartilhada + 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/obsidian-linuxserver/1.12.7/docker-compose.yml b/apps/obsidian-linuxserver/1.12.7/docker-compose.yml new file mode 100644 index 000000000..94df00004 --- /dev/null +++ b/apps/obsidian-linuxserver/1.12.7/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + obsidian: + image: "linuxserver/obsidian:1.12.7" + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:3000" + - "${PANEL_APP_PORT_HTTPS}:3001" + volumes: + - "${CONFIG_PATH}:/config" + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TIME_ZONE} + - CUSTOM_USER=${CUSTOM_USER} + - PASSWORD=${PASSWORD} + - LC_ALL=${LC_ALL:-zh_CN.UTF-8} + shm_size: ${SHM_SIZE} + labels: + createdBy: "Apps" + diff --git a/apps/obsidian-linuxserver/1.12.7/scripts/init.sh b/apps/obsidian-linuxserver/1.12.7/scripts/init.sh new file mode 100755 index 000000000..8a929d096 --- /dev/null +++ b/apps/obsidian-linuxserver/1.12.7/scripts/init.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -euo pipefail + +paths=( + "${CONFIG_PATH:-./data/config}" +) + +mkdir -p "${paths[@]}" +for path in "${paths[@]}"; do + case "$path" in + ./*|../*) chown -R 1000:1000 "$path" 2>/dev/null || true ;; + esac +done + diff --git a/apps/obsidian-linuxserver/1.12.7/scripts/uninstall.sh b/apps/obsidian-linuxserver/1.12.7/scripts/uninstall.sh new file mode 100755 index 000000000..accdccd70 --- /dev/null +++ b/apps/obsidian-linuxserver/1.12.7/scripts/uninstall.sh @@ -0,0 +1,3 @@ +#!/bin/bash +docker-compose down --volumes + diff --git a/apps/obsidian-linuxserver/1.12.7/scripts/upgrade.sh b/apps/obsidian-linuxserver/1.12.7/scripts/upgrade.sh new file mode 100755 index 000000000..a6eb46bac --- /dev/null +++ b/apps/obsidian-linuxserver/1.12.7/scripts/upgrade.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -euo pipefail + +: + diff --git a/apps/obsidian-linuxserver/README.md b/apps/obsidian-linuxserver/README.md new file mode 100644 index 000000000..526a82cc6 --- /dev/null +++ b/apps/obsidian-linuxserver/README.md @@ -0,0 +1,65 @@ +# Obsidian + +## 产品介绍 +Obsidian 是一个 Markdown 笔记桌面应用,本应用通过 LinuxServer.io 镜像提供浏览器访问的 Obsidian 桌面环境。 + +## 主要功能 +- 通过浏览器访问 Obsidian 桌面界面。 +- 使用 `/config` 持久化用户目录、配置和笔记库。 +- 通过 Basic Auth 保护 Web 桌面入口。 + +## 访问说明 +安装完成后,通过应用表单中的 HTTP 或 HTTPS 端口访问 Web 桌面,并使用安装时填写的 Basic Auth 用户名和密码登录。 + +## Introduction +Obsidian is a Markdown note-taking desktop app. This app packages the LinuxServer.io image as a browser-accessible Obsidian desktop environment. + +## Features +- Access the Obsidian desktop from a browser. +- Persist the user home, settings, and vaults under `/config`. +- Protect the Web desktop entrypoint with Basic Auth. + +## 应用简介 +Obsidian 笔记桌面。 + +英文说明:Obsidian desktop app maintained by LinuxServer.io. + +## 部署说明 +- 本应用使用 Docker Compose 在 1Panel 中部署。 +- 应用分类:工具。 +- 支持架构:amd64、arm64。 +- 可选版本:`latest`、`1.12.7`。 +- 安装后按应用表单中的端口访问 Web 桌面。 + +## 端口 +| 变量 | 说明 | 默认值 | 必填 | +| --- | --- | --- | --- | +| PANEL_APP_PORT_HTTP | HTTP 端口 | 3000 | 是 | +| PANEL_APP_PORT_HTTPS | HTTPS 端口 | 3001 | 是 | + +## 数据持久化 +| 变量 | 说明 | 默认值 | 必填 | +| --- | --- | --- | --- | +| CONFIG_PATH | 配置文件路径 | ./data/config | 是 | + +升级或迁移前,请在 1Panel 中备份上述数据目录。 + +## 配置项 +| 变量 | 说明 | 默认值 | 必填 | +| --- | --- | --- | --- | +| TIME_ZONE | 时区 | Asia/Shanghai | 是 | +| CUSTOM_USER | Basic Auth 用户名 | admin | 是 | +| PASSWORD | Basic Auth 密码 | 随机生成 | 是 | +| LC_ALL | 桌面语言区域,例如 zh_CN.UTF-8 | zh_CN.UTF-8 | 否 | +| SHM_SIZE | 共享内存大小 | 1gb | 是 | + +## 使用说明 +- 浏览器/桌面类 LinuxServer 镜像默认无认证,本适配启用 Basic Auth,请使用 CUSTOM_USER 和 PASSWORD 登录。 +- 如需公网访问,请优先放在带强认证的反向代理之后。 +- 如需对外开放访问,请同步检查防火墙、安全组和反向代理配置。 + +## 参考资料 +- 官网: +- 文档: +- 源码: + diff --git a/apps/obsidian-linuxserver/data.yml b/apps/obsidian-linuxserver/data.yml new file mode 100644 index 000000000..95a6e3329 --- /dev/null +++ b/apps/obsidian-linuxserver/data.yml @@ -0,0 +1,31 @@ +name: Obsidian +tags: +- Tool +title: Obsidian 笔记桌面 +description: Obsidian 笔记桌面 +additionalProperties: + key: obsidian-linuxserver + name: Obsidian + tags: + - Tool + shortDescZh: Obsidian 笔记桌面 + shortDescEn: Obsidian desktop app maintained by LinuxServer.io + description: + en: Obsidian desktop app maintained by LinuxServer.io + zh: Obsidian 笔记桌面 + zh-Hant: Obsidian 筆記桌面 + ja: LinuxServer.io が保守する Obsidian デスクトップアプリ + ko: LinuxServer.io에서 유지 관리하는 Obsidian 데스크톱 앱 + ru: Настольное приложение Obsidian, поддерживаемое LinuxServer.io + ms: Aplikasi desktop Obsidian yang diselenggara oleh LinuxServer.io + pt-br: Aplicativo desktop Obsidian mantido pela LinuxServer.io + type: tool + crossVersionUpdate: true + limit: 0 + website: https://obsidian.md/ + github: https://github.com/linuxserver/docker-obsidian + document: https://docs.linuxserver.io/images/docker-obsidian/ + architectures: + - amd64 + - arm64 + diff --git a/apps/obsidian-linuxserver/latest/.env.sample b/apps/obsidian-linuxserver/latest/.env.sample new file mode 100644 index 000000000..80ec79f11 --- /dev/null +++ b/apps/obsidian-linuxserver/latest/.env.sample @@ -0,0 +1,10 @@ +CONTAINER_NAME= +PANEL_APP_PORT_HTTP=3000 +PANEL_APP_PORT_HTTPS=3001 +CONFIG_PATH=./data/config +CUSTOM_USER=admin +PASSWORD=linuxserver-change-me +LC_ALL=zh_CN.UTF-8 +SHM_SIZE=1gb +TIME_ZONE=Asia/Shanghai + diff --git a/apps/obsidian-linuxserver/latest/data.yml b/apps/obsidian-linuxserver/latest/data.yml new file mode 100644 index 000000000..9c99af1b7 --- /dev/null +++ b/apps/obsidian-linuxserver/latest/data.yml @@ -0,0 +1,135 @@ +additionalProperties: + formFields: + - default: 3000 + 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: 3001 + 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: admin + edit: true + envKey: CUSTOM_USER + labelEn: Basic Auth Username + labelZh: 访问用户名(Basic Auth) + label: + en: Basic Auth Username + zh: 访问用户名(Basic Auth) + zh-Hant: 存取使用者名稱(Basic Auth) + ja: ベーシック認証ユーザー名 + ko: 기본 인증 사용자명 + ru: Имя пользователя (Basic Auth) + ms: Nama pengguna Basic Auth + pt-br: Usuario Basic Auth + required: true + type: text + - default: linuxserver-change-me + edit: true + envKey: PASSWORD + labelEn: Basic Auth Password + labelZh: 访问密码(Basic Auth) + label: + en: Basic Auth Password + zh: 访问密码(Basic Auth) + zh-Hant: 存取密碼(Basic Auth) + ja: ベーシック認証パスワード + ko: 기본 인증 비밀번호 + ru: Пароль Basic Auth + ms: Kata laluan Basic Auth + pt-br: Senha Basic Auth + random: true + required: true + rule: paramComplexity + type: password + - default: zh_CN.UTF-8 + edit: true + envKey: LC_ALL + labelEn: Desktop language locale + labelZh: 桌面语言区域 + label: + en: Desktop language locale + zh: 桌面语言区域 + zh-Hant: 桌面語言區域 + ja: デスクトップ言語ロケール + ko: 데스크톱 언어 로케일 + ru: Локаль языка рабочего стола + ms: Lokal bahasa desktop + pt-br: Localidade do idioma da area de trabalho + required: false + type: text + - default: 1gb + edit: true + envKey: SHM_SIZE + labelEn: Shared memory size + labelZh: 共享内存大小 + label: + en: Shared memory size + zh: 共享内存大小 + zh-Hant: 共享記憶體大小 + ja: 共有メモリサイズ + ko: 공유 메모리 크기 + ru: Размер общей памяти + ms: Saiz memori kongsi + pt-br: Tamanho da memoria compartilhada + 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/obsidian-linuxserver/latest/docker-compose.yml b/apps/obsidian-linuxserver/latest/docker-compose.yml new file mode 100644 index 000000000..7d7a5246f --- /dev/null +++ b/apps/obsidian-linuxserver/latest/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + obsidian: + image: "linuxserver/obsidian:latest" + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:3000" + - "${PANEL_APP_PORT_HTTPS}:3001" + volumes: + - "${CONFIG_PATH}:/config" + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TIME_ZONE} + - CUSTOM_USER=${CUSTOM_USER} + - PASSWORD=${PASSWORD} + - LC_ALL=${LC_ALL:-zh_CN.UTF-8} + shm_size: ${SHM_SIZE} + labels: + createdBy: "Apps" + diff --git a/apps/obsidian-linuxserver/latest/scripts/init.sh b/apps/obsidian-linuxserver/latest/scripts/init.sh new file mode 100755 index 000000000..8a929d096 --- /dev/null +++ b/apps/obsidian-linuxserver/latest/scripts/init.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -euo pipefail + +paths=( + "${CONFIG_PATH:-./data/config}" +) + +mkdir -p "${paths[@]}" +for path in "${paths[@]}"; do + case "$path" in + ./*|../*) chown -R 1000:1000 "$path" 2>/dev/null || true ;; + esac +done + diff --git a/apps/obsidian-linuxserver/latest/scripts/uninstall.sh b/apps/obsidian-linuxserver/latest/scripts/uninstall.sh new file mode 100755 index 000000000..accdccd70 --- /dev/null +++ b/apps/obsidian-linuxserver/latest/scripts/uninstall.sh @@ -0,0 +1,3 @@ +#!/bin/bash +docker-compose down --volumes + diff --git a/apps/obsidian-linuxserver/latest/scripts/upgrade.sh b/apps/obsidian-linuxserver/latest/scripts/upgrade.sh new file mode 100755 index 000000000..a6eb46bac --- /dev/null +++ b/apps/obsidian-linuxserver/latest/scripts/upgrade.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -euo pipefail + +: + diff --git a/apps/obsidian-linuxserver/logo.png b/apps/obsidian-linuxserver/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..affa745c47b782d22734f68ad242e3e2536a9d82 GIT binary patch literal 6331 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 literal 0 HcmV?d00001