无敌好用,打造私家APPS,威联通应用模板制作
前言
相信很多用过unraid的用户,都对其APPS商店印象深刻。现如今各类轻NAS装docker的教程漫天飞,群晖有矿神套件源,热门软件一键安装(系统权限所限,部分软件需root下修复权限),istoreOS也打造了专属应用商店(缺点是要等打包且数量不够,某些应用还不敢上)。而unraid没有重复造套件轮子,而是推出了APPS应用模板,把复杂的docker安装简化,配上精美图标展示,能及时跟上最新版本。
威联通巧了,既有docker安装(一步步设置或compose部署),又有庞大的第三方商店(全是英文介绍),还有应用模板的功能(类似unraid的apps),我在三年前盛赞了威联通的compose网页部署很方便,也希望威联通能多做些应用模板,打造最强docker安装体验,现如今compose功能更好用了,但是应用模板仍然少的可怜(11个自带模板只有两个是程序),不过好在多了个“自定义模板”功能。
一、应用模板结构
“type”: 1用于 Docker 容器,10用于 LXD 容器。看完文档后我折腾了几天,由于没学过编程,凭感觉写出来的模板始终有问题,哪怕错一个字符都会导致没法识别。后来进去ssh看了自带的模板json(”/share/CACHEDEV1_DATA/.qpkg/container-station/data/templates/default/templates.json”),才发现官方docker没按模板写那么多参数,复杂的docker直接用了compose文件,而且分类为”type”: 3,文档里都没提3。
我松了口气,能用compose后就不用转换写法了,直接借用软件dockerhub页面的说明制作compose文件,(以前文章介绍过[https://post.smzdm.com/p/aekwr7r3/),或者在应用程序页面点右侧齿轮→检测→下载,把你以前装的容器编排导出配置文件。](https://post.smzdm.com/p/aekwr7r3/>),或者在应用程序页面点右侧齿轮→检测→下载,把你以前装的容器编排导出配置文件。)
现在,让我们新建一个程序模板开始吧,你每放置一个compose,就要准备一个yml文件,png图标文件,并在模板app.json里添加一段描述,例如下图:
你可以先复制下面的代码保存为app.json,然后填充信息,例如:type种类填3,title标题,sub_title副标题,description描述,logo图标,location项目网址,platform适用平台,categories分类,composefile配置文件,env环境变量(可以像unraid模板那样生成重要参数框),default_web_port默认端口(填了可自动生成网址加端口),support_os支持QTS。
{
"templates": [
{
"type": 3,
"title": "Jellyfin",
"sub_title": "媒体库",
"description": "一个自由的软件媒体系统,用于控制和管理媒体和流媒体。它是 emby 和 plex 的替代品,通过多个应用程序从专用服务器向终端用户设备提供媒体。Jellyfin 属于 Emby 3.5.2 的下一代,并移植.NET 核心框架以完全的跨平台支持。特性:电影海报,电视节目,并让它们自动分季,没有内置的跟踪,也没有收集数据的中央服务器。选用N大镜像,转码效果更好 https://hub.docker.com/r/nyanmisaka/jellyfin",
"logo": "/jellyfin.png",
"location": "https://hub.docker.com/r/nyanmisaka/jellyfin",
"platform": "linux",
"categories": [
"媒体"
],
"composefile": "jellyfin.yml",
"env": [
{
"name": "HTTP_PORT",
"label": "访问端口",
"default": "8096",
"port": true
}
],
"default_web_port": {
"service": "jellyfin",
"container_port": 8096
},
"support_os": ["QTS"]
},
{
# 你的其它程序模板……
# 记得最后一个右大括号千万别加“,”
}
]
}
二、模板部署和应用
接着我们需要使应用程序模板供Container Station使用。要用到自带的Web服务器托管模板文件,转到控制台→应用程序→Web服务器→启用Web服务器→应用。
启用了web服务器后,复制IP地址备用,你应该能在文件管理中看到一个Web文件夹。把你准备好的json,yml,png文件全部丢进去。
打开Container Station,选择偏好设置→应用程序模板→启用自定义模板→粘贴[http://威联通IP地址/app.json,应用。](,应用。">http://威联通IP地址/app.json>,应用。)
现在,在界面左下方点击应用程序模板,你就能看到自己刚刚app.json里的模板了。相比于外国人的应用商店,你再也不用担心满屏英文,直接一键安装,docker拉取都是最新程序代码。
如果你只是拿给自己用,compose文件直接用个人的,那么教程可以到此为止,但是点开部署按钮,你会发现我的程序模板居然还有几个参数框,这是怎么做到的?
之前遇到过朋友被开盒,因为他直接安装群晖套件,不能改端口,用户和密码也直接用默认的,显然别人就能很轻易登陆进去。那么应用模板不能光考虑方便,应该能设定重要事项吧?我在摸索中发现这个app.json和程序.yml之间是可以传递变量的。
我拿PhotoPrism举例,在app.json里,可以设置它的变量,例如变量名USER,那么在compose语法文件里就可以使用{HTTP_PORT}。因为端口号有最大值,所以还可以对”HTTP_PORT”添加port为true。
“default_web_port”又是什么意思呢,因为compose里可能有两个以上的程序,那么你就可以指定某个程序内部端口为默认端口,就能在Container Station应用程序页生成一键打开的网址。
三、我制作的一堆模板
随便举几个例子,jellyfin很多人装上不能转码,不能连接tmdb刮削,不能读取威联通文件混合网关HybridMount挂载的网盘,但是很好解决,我加载了/dev/dri,权限默认最高,添加了tmdb的hosts,直接挂载/share为媒体文件夹(所有盘文件都能在/share找到):
version: "3"
services:
jellyfin:
image: nyanmisaka/jellyfin:latest
container_name: jellyfin
environment:
- PUID=0
- PGID=0
- TZ=Asia/Shanghai
volumes:
- /share/Container/jellyfin:/config #配置文件
- /share:/media #媒体库路径
ports:
- ${HTTP_PORT}:8096 #网页访问端口
- 8920:8920
devices:
- /dev/dri:/dev/dri #调用核显
extra_hosts:
- "api.themoviedb.org:108.138.246.55"
- "image.themoviedb.org:104.16.61.155"
restart: unless-stopped
photoprism相册的官方安装文件很多很复杂?咱们一次搞定。qbit,alist这些简单软件更不用说,小众的动漫追番软件auto_bangumi也能轻松入库,外国人的商店肯定不会加它。
version: '3'
services:
photoprism:
image: photoprism/photoprism:latest
restart: unless-stopped
stop_grace_period: 10s
depends_on:
- mariadb
security_opt:
- seccomp:unconfined
- apparmor:unconfined
ports:
- "${HTTP_PORT}:2342" # HTTP port (host:container)
environment:
PHOTOPRISM_ADMIN_USER: "${USER}" # admin login username
PHOTOPRISM_ADMIN_PASSWORD: "${PWD}" # initial admin password (8-72 characters)
PHOTOPRISM_AUTH_MODE: "password" # authentication mode (public, password)
PHOTOPRISM_SITE_URL: "http://localhost:2342/" # server URL in the format "http(s)://domain.name(:port)/(path)"
PHOTOPRISM_DISABLE_TLS: "false" # disables HTTPS/TLS even if the site URL starts with https:// and a certificate is available
PHOTOPRISM_DEFAULT_TLS: "true" # defaults to a self-signed HTTPS/TLS certificate if no other certificate is available
PHOTOPRISM_ORIGINALS_LIMIT: 5000 # file size limit for originals in MB (increase for high-res video)
PHOTOPRISM_HTTP_COMPRESSION: "gzip" # improves transfer speed and bandwidth utilization (none or gzip)
PHOTOPRISM_LOG_LEVEL: "info" # log level: trace, debug, info, warning, error, fatal, or panic
PHOTOPRISM_READONLY: "false" # do not modify originals directory (reduced functionality)
PHOTOPRISM_EXPERIMENTAL: "false" # enables experimental features
PHOTOPRISM_DISABLE_CHOWN: "false" # disables updating storage permissions via chmod and chown on startup
PHOTOPRISM_DISABLE_WEBDAV: "false" # disables built-in WebDAV server
PHOTOPRISM_DISABLE_SETTINGS: "false" # disables settings UI and API
PHOTOPRISM_DISABLE_TENSORFLOW: "false" # disables all features depending on TensorFlow
PHOTOPRISM_DISABLE_FACES: "false" # disables face detection and recognition (requires TensorFlow)
PHOTOPRISM_DISABLE_CLASSIFICATION: "false" # disables image classification (requires TensorFlow)
PHOTOPRISM_DISABLE_VECTORS: "false" # disables vector graphics support
PHOTOPRISM_DISABLE_RAW: "false" # disables indexing and conversion of RAW images
PHOTOPRISM_RAW_PRESETS: "false" # enables applying user presets when converting RAW images (reduces performance)
PHOTOPRISM_JPEG_QUALITY: 85 # a higher value increases the quality and file size of JPEG images and thumbnails (25-100)
PHOTOPRISM_DETECT_NSFW: "false" # automatically flags photos as private that MAY be offensive (requires TensorFlow)
PHOTOPRISM_UPLOAD_NSFW: "true" # allows uploads that MAY be offensive (no effect without TensorFlow)
# PHOTOPRISM_DATABASE_DRIVER: "sqlite" # SQLite is an embedded database that doesn't require a server
PHOTOPRISM_DATABASE_DRIVER: "mysql" # use MariaDB 10.5+ or MySQL 8+ instead of SQLite for improved performance
PHOTOPRISM_DATABASE_SERVER: "mariadb:3306" # MariaDB or MySQL database server (hostname:port)
PHOTOPRISM_DATABASE_NAME: "photoprism" # MariaDB or MySQL database schema name
PHOTOPRISM_DATABASE_USER: "photoprism" # MariaDB or MySQL database user name
PHOTOPRISM_DATABASE_PASSWORD: "insecure" # MariaDB or MySQL database user password
PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App"
PHOTOPRISM_SITE_DESCRIPTION: "" # meta site description
PHOTOPRISM_SITE_AUTHOR: "" # meta site author
# PHOTOPRISM_FFMPEG_ENCODER: "software" # H.264/AVC encoder (software, intel, nvidia, apple, raspberry, or vaapi)
# PHOTOPRISM_FFMPEG_SIZE: "1920" # video size limit in pixels (720-7680) (default: 3840)
# PHOTOPRISM_FFMPEG_BITRATE: "32" # video bitrate limit in Mbit/s (default: 50)
## Run/install on first startup (options: update https gpu tensorflow davfs clitools clean):
# PHOTOPRISM_INIT: "https gpu tensorflow"
## Run as a non-root user after initialization (supported: 0, 33, 50-99, 500-600, and 900-1200):
PHOTOPRISM_UID: 0
PHOTOPRISM_GID: 0
PHOTOPRISM_UMASK: 0000
PHOTOPRISM_FFMPEG_ENCODER: "intel" # H.264/AVC encoder (software, intel, nvidia, apple, raspberry, or vaapi)
devices:
- "/dev/dri:/dev/dri" # Intel QSV
# - "/dev/nvidia0:/dev/nvidia0" # Nvidia CUDA
# - "/dev/nvidiactl:/dev/nvidiactl"
# - "/dev/nvidia-modeset:/dev/nvidia-modeset"
# - "/dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl"
# - "/dev/nvidia-uvm:/dev/nvidia-uvm"
# - "/dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools"
# - "/dev/video11:/dev/video11" # Video4Linux Video Encode Device (h264_v4l2m2m)
working_dir: "/photoprism" # do not change or remove
volumes:
- /share/Container/photoprism:/photoprism/storage
- /share/share/Pictures:/photoprism/originals
mariadb:
image: mariadb:10.11
## If MariaDB gets stuck in a restart loop, this points to a memory or filesystem issue:
## https://docs.photoprism.app/getting-started/troubleshooting/#fatal-server-errors
restart: unless-stopped
stop_grace_period: 5s
security_opt: # see https://github.com/MariaDB/mariadb-docker/issues/434#issuecomment-1136151239
- seccomp:unconfined
- apparmor:unconfined
command: mariadbd --innodb-buffer-pool-size=512M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
## Never store database files on an unreliable device such as a USB flash drive, an SD card, or a shared network folder:
volumes:
- "/share/Container/photoprism/database:/var/lib/mysql" # DO NOT REMOVE
environment:
MARIADB_AUTO_UPGRADE: "1"
MARIADB_INITDB_SKIP_TZINFO: "1"
MARIADB_DATABASE: "photoprism"
MARIADB_USER: "photoprism"
MARIADB_PASSWORD: "insecure"
MARIADB_ROOT_PASSWORD: "insecure"
阅读3服务器版,WPS办公,music-tag音乐刮削,bitwarden密码管理,感觉NAS一下子有用了起来……
version: '3.1'
services:
reader:
image: hectorqin/reader
#image: hectorqin/reader:openj9-latest #docker镜像,arm64架构或小内存机器优先使用此镜像.启用需删除上一行
container_name: reader #容器名 可自行修改
restart: always
ports:
- ${HTTP_PORT}:8080 #4396端口映射可自行修改
networks:
- share_net
volumes:
- /share/Container/reader/logs:/logs #log映射目录 /home/reader/logs 映射目录可自行修改
- /share/Container/reader/storage:/storage #数据映射目录 /home/reader/storage 映射目录可自行修改
environment:
- SPRING_PROFILES_ACTIVE=prod
- READER_APP_USERLIMIT=50 #用户上限,默认50
- READER_APP_USERBOOKLIMIT=200 #用户书籍上限,默认200
- READER_APP_CACHECHAPTERCONTENT=true #开启缓存章节内容 V2.0
# 如果启用远程webview,需要取消注释下面的 remote-webview 服务
# - READER_APP_REMOTEWEBVIEWAPI=http://remote-webview:8050 #开启远程webview
# 下面都是多用户模式配置
- READER_APP_SECURE=true #开启登录鉴权,开启后将支持多用户模式
- READER_APP_SECUREKEY=${PWD} #管理员密码 建议修改
- READER_APP_INVITECODE=${CODE} #注册邀请码 建议修改,如不需要可注释或删除
# remote-webview:
# image: hectorqin/remote-webview
# container_name: remote-webview #容器名 可自行修改
# restart: always
# ports:
# - 8050:8050
# networks:
# - share_net
networks:
share_net:
driver: bridge
结语
琢磨了一周多,终于打造出一堆满意的模板,一键安装还能传参,看上去很好是吧。但是由于事情太多,我每添加一个compose就相当于搞一篇小教程的工作量,现在决定先搁置(lanwei)一段时间,目前就刚刚截图的十几个模板完工了,剩下的应用程序模板有时间我再搞吧……
应用模板文件链接:
[https://pan.baidu.com/s/1uO0g2TVHtxaKQLuBIHoiAA?pwd=nnnb](https://pan.baidu.com/s/1uO0g2TVHtxaKQLuBIHoiAA?pwd=nnnb)
或[https://wwir.lanzoum.com/inHK01e955za](https://wwir.lanzoum.com/inHK01e955za)
njsfcy
校验提示文案
式居娄骄
校验提示文案
值友7097118220
校验提示文案
goldworship
校验提示文案
猎户三星
校验提示文案
爱着云的雨
校验提示文案
爱折腾的TAO
校验提示文案
我就是cy
校验提示文案
家有_俩宝
校验提示文案
天外来鸿
校验提示文案
罗曼提克
校验提示文案
企鹅巴耶夫
校验提示文案
中奖困难户
校验提示文案
Hyrax
校验提示文案
大屁股白柯基
校验提示文案
Franklin
校验提示文案
BlueDolphin9527
校验提示文案
猎户三星
校验提示文案
Franklin
校验提示文案
大屁股白柯基
校验提示文案
Hyrax
校验提示文案
goldworship
校验提示文案
中奖困难户
校验提示文案
值友7097118220
校验提示文案
企鹅巴耶夫
校验提示文案
BlueDolphin9527
校验提示文案
式居娄骄
校验提示文案
罗曼提克
校验提示文案
天外来鸿
校验提示文案
家有_俩宝
校验提示文案
我就是cy
校验提示文案
爱折腾的TAO
校验提示文案
njsfcy
校验提示文案
爱着云的雨
校验提示文案