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