Compare commits

..

55 Commits
v1 ... main

Author SHA1 Message Date
悟空的日常镜像仓库 d0d0f39c42 更新 README.md 2024-08-13 09:00:54 +08:00
悟空的日常镜像仓库 90f7091203 Update pi.sh 2024-07-14 20:35:55 +08:00
悟空的日常镜像仓库 763cd63825 Update pi.sh 2024-07-14 16:34:12 +08:00
悟空的日常镜像仓库 ad413b32e3 Update op.sh 2024-07-08 16:48:23 +08:00
悟空的日常镜像仓库 fe613613a7 Update op.sh 2024-07-01 20:56:49 +08:00
悟空的日常镜像仓库 b6f2f39745 增加了宿主机文件映射 方便1panel管理文件 2024-07-01 20:51:02 +08:00
悟空的日常镜像仓库 beeb24f05e Update pi.sh 2024-06-30 17:13:19 +08:00
悟空的日常镜像仓库 6e1a0f25c9 Update op.sh 2024-06-30 14:06:45 +08:00
悟空的日常镜像仓库 7a53ef985b 新增安装istoreOS版本1panel 2024-06-29 13:44:05 +08:00
悟空的日常镜像仓库 ebff06c64c 新增:给群晖6.2系统安装docker-compose 2024-06-13 21:28:05 +08:00
悟空的日常镜像仓库 2f86277c9b 更新 README.md 2024-06-12 11:12:00 +08:00
悟空的日常镜像仓库 7840d148ea Update xiaoya-all.sh 2024-06-12 10:11:26 +08:00
悟空的日常镜像仓库 402b38bfd5 更新 README.md 2024-06-11 19:46:08 +08:00
悟空的日常镜像仓库 88e2492971 更新 README.md 2024-06-11 18:00:07 +08:00
悟空的日常镜像仓库 e7a8360f8b 增加小雅全家桶的选项 2024-06-11 17:58:48 +08:00
悟空的日常镜像仓库 f2dbeb8a92 Update pi.sh 2024-06-08 18:10:15 +08:00
悟空的日常镜像仓库 e1a738aaca Update xiaoya-all.sh 2024-06-08 16:49:17 +08:00
悟空的日常镜像仓库 7b9f5e6841 Update xiaoya-all.sh 2024-06-08 16:41:21 +08:00
悟空的日常镜像仓库 b4f2424b24 v1.2.3 2024-06-08 16:33:09 +08:00
悟空的日常镜像仓库 bad71f9cd0 Update xiaoya-all.sh 2024-06-08 15:54:51 +08:00
悟空的日常镜像仓库 f19b0eae67 上传文件至 xiaoya 2024-06-05 16:41:54 +08:00
悟空的日常镜像仓库 b0d2492b47 上传文件至 xiaoya 2024-06-05 16:13:11 +08:00
悟空的日常镜像仓库 69b7bc06fa Update op.sh 2024-05-30 16:29:11 +08:00
悟空的日常镜像仓库 932e97ec82 同步小雅tvbox代码
由于小雅tvbox原代码 https证书过期 下载不到 所以同步一份到本仓库
2024-05-30 16:27:20 +08:00
悟空的日常镜像仓库 0f93d9fa78 Update pi.sh 2024-05-23 16:09:50 +08:00
悟空的日常镜像仓库 6bfdb4d0d4 增加DDNSTO 2024-05-23 13:19:03 +08:00
悟空的日常镜像仓库 a9c7160c74 更新 README.md 2024-05-21 10:36:20 +08:00
悟空的日常镜像仓库 0e89c1660d 更新 README.md 2024-05-20 13:17:43 +08:00
悟空的日常镜像仓库 cde0e5369f 替换filebrowser下载地址 2024-05-13 20:40:35 +08:00
悟空的日常镜像仓库 a5b273dd0e 更新 README.md 2024-05-13 09:29:08 +08:00
悟空的日常镜像仓库 69236e7402 更新 README.md 2024-05-13 08:04:13 +08:00
悟空的日常镜像仓库 bbf7148cbf 更新 README.md 2024-05-12 18:06:01 +08:00
悟空的日常镜像仓库 6e55b51fd3 Update pi.sh 2024-05-12 17:52:47 +08:00
悟空的日常镜像仓库 a19b258880 Update op.sh 2024-05-12 11:18:48 +08:00
悟空的日常镜像仓库 5a17346344 add teslamate for x86_64 2024-05-12 10:14:46 +08:00
悟空的日常镜像仓库 8a6ffd5e68 add teslamate for arm64 2024-05-12 10:00:42 +08:00
悟空的日常镜像仓库 e3eeee9b0a add Teslamate docker 2024-05-11 21:41:36 +08:00
悟空的日常镜像仓库 4758a351b5 添加一个Teslamate docker-compose文件 2024-05-11 21:13:22 +08:00
悟空的日常镜像仓库 a3ba5140ad 更新 README.md 2024-05-11 15:45:16 +08:00
悟空的日常镜像仓库 68689a4a69 更新 README.md 2024-05-11 11:54:47 +08:00
悟空的日常镜像仓库 8ef3ca0cbb Update op.sh 2024-05-11 11:35:38 +08:00
悟空的日常镜像仓库 378850fa86 更新 README.md 2024-05-11 11:28:21 +08:00
悟空的日常镜像仓库 c53269bf6a 适配OpenWrt/iStoreOS的脚本 2024-05-11 11:26:00 +08:00
悟空的日常镜像仓库 df78400c6c Update pi.sh 2024-05-11 10:08:30 +08:00
悟空的日常镜像仓库 a2369f8f25 更新 README.md 2024-05-11 07:47:34 +08:00
悟空的日常镜像仓库 18d3a39ee3 Update pi.sh 2024-05-10 20:40:15 +08:00
悟空的日常镜像仓库 d40e3564d6 增加xiaoya-tvbox 2024-05-10 20:29:58 +08:00
悟空的日常镜像仓库 a660a38037 更新 README.md 2024-05-09 22:38:12 +08:00
悟空的日常镜像仓库 92accbb870 更新 README.md 2024-05-09 22:28:43 +08:00
悟空的日常镜像仓库 9adbc3345d 更新 README.md 2024-05-09 22:26:34 +08:00
悟空的日常镜像仓库 f2b9b49794 Update pi.sh 2024-05-09 22:25:23 +08:00
悟空的日常镜像仓库 da66b89c19 更新 README.md 2024-05-08 13:49:34 +08:00
悟空的日常镜像仓库 d02138b21e Update pi.sh 2024-05-07 17:34:04 +08:00
悟空的日常镜像仓库 8d63f00ae7 在选项1增加curl的安装 2024-05-07 17:33:16 +08:00
悟空的日常镜像仓库 03d212017b 文件管理器增加必要的高亮提示 2024-05-07 16:29:06 +08:00
13 changed files with 1439 additions and 47 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.DS_Store

120
README.md
View File

@ -1,41 +1,55 @@
<img alt="GitHub License" src="https://img.shields.io/github/license/wukongdaily/diy-nas-onescript?labelColor=%23FF4500&color=black"> <img alt="GitHub License" src="https://img.shields.io/github/license/wukongdaily/diy-nas-onescript?labelColor=%23FF4500&color=black">
### 镜像仓库:https://github.com/wukongdaily/OrangePiShell
### TVBOX APK 下载地址:https://wkdaily.cpolar.cn/archives/free
### 通过ssh 连接到zero3,举例 ### 通过ssh 连接到zero3,举例
`ssh orangepi@192.168.66.106` `ssh orangepi@192.168.66.106`
- 默认用户名:`orangepi` - 默认用户名:`orangepi`
- 默认密码:`orangepi` <br> - 默认密码:`orangepi` <br>
#### 准备:首次使用 如果时间不正确可以先检查时钟时间,举例说明
### zero3 在Ubuntu系统下如何连接wifi?
`sudo orangepi-config`
### 一键命令如下(Ubuntu/Debian)
> 系统带sudo
```bash
wget -qO pi.sh https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/zero3/pi.sh && chmod +x pi.sh
./pi.sh proxy
``` ```
### Debian的准备 root@orangepizero3:~# hwclock -r
> debian系统最好先切到root身份再运行上述脚本 1970-01-02 08:03:46.251744+08:00
root@orangepizero3:~# date -s "2024-08-13 08:54:00"
Tue Aug 13 08:54:00 CST 2024
```bash root@orangepizero3:~# hwclock -w
su - root@orangepizero3:~# hwclock -r
``` 2024-08-13 08:54:07.738915+08:00
```bash root@orangepizero3:~#
wget -qO pi.sh https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/zero3/pi.sh && chmod +x pi.sh # 上述代码我们分别查询了时钟时间,发现是1970年是错的,接着我们手动设置了当前时间,然后保存时钟时间。再次读取时钟时间就正确了。
./pi.sh proxy 此时,你在执行wget等下载操作,就能成功下载脚本了。
``` ```
<img src="https://github.com/wukongdaily/OrangePiShell/assets/143675923/67baea9e-9222-4409-8aae-b6e9242c721d" width="40%" />
*** <img src="https://github.com/wukongdaily/OrangePiShell/assets/143675923/0d9e5421-53b4-4a63-b7a1-025ab977eed5" width="40%" />
> 调用命令之前最好先切后到root模式 ubuntu/synology 使用 `sudo -i`<br>
> debian 使用 `su -`
### Ubuntu/Debian/Synology等基于Debian的Linux
```bash
wget -qO pi.sh https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/zero3/pi.sh && chmod +x pi.sh && ./pi.sh
```
### QNAP 威联通docker-compose 搭建小雅全家桶
```bash
bash -c "$(curl -fsSL https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/xiaoya/xiaoya-all.sh)"
```
### OpenWrt/iStoreOS 软路由系统
```bash
wget -qO op.sh https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/zero3/op.sh && chmod +x op.sh && ./op.sh
```
<br>
<img src="https://github.com/wukongdaily/OrangePiShell/assets/143675923/56898b74-ea47-44aa-8de3-e14e12873a25" width="40%" />
### 网盘 ### 网盘
@ -53,14 +67,58 @@ wget -qO pi.sh https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/zero3/pi.sh
| arm64 \| arm64v8 | ✅ | | arm64 \| arm64v8 | ✅ |
| armhf \| armv7 | ✅ | | armhf \| armv7 | ✅ |
| 系统名称 | 是否支持 | | 系统 | 或 |机型 |
| :----- | :--: | |-----|-----|-----|
| Ubuntu | ✅ | | Ubuntu ✅ | Debian ✅ | Deepin ✅ |
| Debian | ✅ | | OpenWrt ✅ | iStoreOS ✅ | MT-3000 ✅ |
| Deepin | ✅ | | NanoPi-R2S ✅ | NanoPi-R4S ✅ | NanoPi-Neo3 ✅ |
| Synology ✅ | | |
# 参考项目
https://github.com/DDS-Derek/xiaoya-alist
# 常见问题汇总⬇️⬇️⬇️ # 常见问题汇总⬇️⬇️⬇️
[filebrowser 如何设置自定义端口](https://github.com/wukongdaily/OrangePiShell/wiki/filebrowser-%E5%A6%82%E4%BD%95%E8%AE%BE%E7%BD%AE%E8%87%AA%E5%AE%9A%E4%B9%89%E7%AB%AF%E5%8F%A3)
[常见问题总结(持续更新中](https://github.com/wukongdaily/OrangePiShell/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98)
[常见问题总结(持续更新中)](https://cafe.cpolar.cn/wkdaily/zero3/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E6%B1%87%E6%80%BB) [常见问题总结(持续更新中)](https://cafe.cpolar.cn/wkdaily/zero3/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E6%B1%87%E6%80%BB)
# 如何定时重启小雅?
[使用1panel 添加定时任务即可](https://cafe.cpolar.cn/wkdaily/zero3/wiki/%E5%A6%82%E4%BD%95%E5%AE%9A%E6%97%B6%E9%87%8D%E5%90%AF%E5%B0%8F%E9%9B%85)
# 小雅alsit 和 小雅tvbox 有啥区别吗?
```
截止到我做视频的时候小雅alist 和 小雅tvbox 是有如下区别的。
1、小雅alist 是比较轻量化的docker。主要是影音库或者理解为一个云端的数据库。它占用内存较低最多200M内存吧
如果你的宿主机内存不大那么我建议安装这个视频里演示的那种。而小雅tvbox是针对tvbox 这款软件做了一些定制的,
貌似是用java写的后端我也不确定实际测试这款docker大约占用600M内存。x86和arm 都是如此。
2、小雅tvbox 集成了友好的WebUI管理页面你可以很方便的在4567端口的web页添加阿里、pikpak账号。
你还可以定制化tvbox的订阅详细的文档建议参考作者的项目
https://github.com/power721/alist-tvbox/blob/master/doc/README_zh.md
(该作者写的文档相当的细致 爆赞👍功能很多配合tvbox 堪称完美!
3、小雅alist 搭建后最好是配合安装小雅转存清理工具xiaoya-keeper因为它每次播放或者用播放器搜刮的时候
可能会转存一份到自己的云盘。如果有这个清理工具就能帮助它迅速删除。避免占用自己的空间。而小雅tvbox 则不需要。
因为小雅tvbox默认900秒清理一次文件。不过这个数值可以更改为60秒。就在4567网页的高级配置里。
4、小雅alist 的影音数据库的更新操作依赖于容器的重启。因此最好设置一个定时任务,定时重启。(这只是目前为止,
或许以后作者会加入定时更新的功能,大家还是自行观察每天数据库到底有没有更新,以实际为准。)
而小雅tvbox由于在4567的web页面 已经默认开启了定时更新功能,并且还能设置更新的时间。
5、小雅alist默认端口号5678小雅tvbox默认端口号5344这个端口号很重要webdav 如果写错了端口号是无法读取的。
6、如果 小雅alist 和 小雅tvbox 大家二选一就行。尽量别重复搭建。因为小雅tvbox搭建的时候应该也会拉取小雅alist
这样就重复了。
```
👉👉👉[关于小雅tvbox的介绍可以参考本视频11分后](https://www.bilibili.com/video/BV1ED421V7Dr/?share_source=copy_web&vd_source=0bb92241fb28a55c32c2e5132116b594&t=677) 👈👈👈
# 参考项目
- https://github.com/DDS-Derek/xiaoya-alist
- https://github.com/power721/alist-tvbox

View File

@ -0,0 +1,56 @@
services:
teslamate:
image: teslamate/teslamate:latest
restart: always
environment:
- ENCRYPTION_KEY=secretkey #replace with a secure key to encrypt your Tesla API tokens
- DATABASE_USER=teslamate
- DATABASE_PASS=password #insert your secure database password!
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
- MQTT_HOST=mosquitto
ports:
- 4000:4000
volumes:
- ./import:/opt/app/import
cap_drop:
- all
database:
image: postgres:15
restart: always
environment:
- POSTGRES_USER=teslamate
- POSTGRES_PASSWORD=password #insert your secure database password!
- POSTGRES_DB=teslamate
volumes:
- teslamate-db:/var/lib/postgresql/data
grafana:
image: teslamate/grafana:latest
restart: always
environment:
- DATABASE_USER=teslamate
- DATABASE_PASS=password #insert your secure database password!
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
ports:
- 3000:3000
volumes:
- teslamate-grafana-data:/var/lib/grafana
mosquitto:
image: eclipse-mosquitto:2
restart: always
command: mosquitto -c /mosquitto-no-auth.conf
# ports:
# - 1883:1883
volumes:
- mosquitto-conf:/mosquitto/config
- mosquitto-data:/mosquitto/data
volumes:
teslamate-db:
teslamate-grafana-data:
mosquitto-conf:
mosquitto-data:

View File

@ -0,0 +1,20 @@
services:
alist:
image: ghcr.io/monlor/xiaoya-alist:latest
volumes:
- xiaoya:/data
ports:
- "5678:5678"
- "2345:2345"
- "2346:2346"
env_file:
- env
restart: unless-stopped
networks:
- default
networks:
default:
volumes:
xiaoya:

View File

@ -0,0 +1,82 @@
services:
alist:
image: ghcr.io/monlor/xiaoya-alist:latest
volumes:
- xiaoya:/data
ports:
- "5678:5678"
- "2345:2345"
- "2346:2346"
env_file:
- env
restart: unless-stopped
networks:
- default
metadata:
image: ghcr.io/monlor/xiaoya-metadata:latest
environment:
- EMBY_ENABLED=true
- JELLYFIN_ENABLED=true
env_file:
- env
volumes:
- xiaoya:/etc/xiaoya
- media:/media/xiaoya
- config:/media/config
- cache:/media/config/cache
- jf_media:/media/jf_xiaoya
- jf_config:/media/jf_config
- jf_cache:/media/jf_config/cache
- meta:/media/temp
depends_on:
- alist
restart: unless-stopped
networks:
- default
emby:
image: ghcr.io/monlor/xiaoya-embyserver:latest
env_file:
- env
depends_on:
- metadata
- alist
volumes:
- media:/media
- config:/config
- cache:/cache
ports:
- "6908:6908"
restart: unless-stopped
networks:
- default
jellyfin:
image: ghcr.io/monlor/xiaoya-jellyfin:latest
env_file:
- env
privileged: true
depends_on:
- metadata
- alist
volumes:
- jf_media:/media
- jf_config:/config
- jf_cache:/cache
ports:
- 8096:8096
restart: unless-stopped
networks:
- default
networks:
default:
volumes:
xiaoya:
media:
config:
cache:
jf_media:
jf_config:
jf_cache:
meta:

View File

@ -0,0 +1,59 @@
services:
alist:
image: ghcr.io/monlor/xiaoya-alist:latest
volumes:
- xiaoya:/data
ports:
- "5678:5678"
- "2345:2345"
- "2346:2346"
env_file:
- env
restart: unless-stopped
networks:
- default
metadata:
image: ghcr.io/monlor/xiaoya-metadata:latest
environment:
- EMBY_ENABLED=false
- JELLYFIN_ENABLED=true
env_file:
- env
volumes:
- xiaoya:/etc/xiaoya
- jf_media:/media/jf_xiaoya
- jf_config:/media/jf_config
- jf_cache:/media/jf_config/cache
- meta:/media/temp
depends_on:
- alist
restart: unless-stopped
networks:
- default
jellyfin:
image: ghcr.io/monlor/xiaoya-jellyfin:latest
env_file:
- env
privileged: true
depends_on:
- metadata
- alist
volumes:
- jf_media:/media
- jf_config:/config
- jf_cache:/cache
ports:
- 8096:8096
restart: unless-stopped
networks:
- default
networks:
default:
volumes:
xiaoya:
jf_media:
jf_config:
jf_cache:
meta:

55
xiaoya/docker-compose.yml Normal file
View File

@ -0,0 +1,55 @@
services:
alist:
image: ghcr.io/monlor/xiaoya-alist:latest
volumes:
- xiaoya:/data
ports:
- "5678:5678"
- "2345:2345"
- "2346:2346"
env_file:
- env
restart: unless-stopped
networks:
- default
metadata:
image: ghcr.io/monlor/xiaoya-metadata:latest
env_file:
- env
volumes:
- xiaoya:/etc/xiaoya
- media:/media/xiaoya
- config:/media/config
- cache:/media/config/cache
- meta:/media/temp
depends_on:
- alist
restart: unless-stopped
networks:
- default
emby:
image: ghcr.io/monlor/xiaoya-embyserver:latest
env_file:
- env
depends_on:
- metadata
- alist
volumes:
- media:/media
- config:/config
- cache:/cache
ports:
- "6908:6908"
restart: unless-stopped
networks:
- default
networks:
default:
volumes:
xiaoya:
media:
config:
meta:
cache:

41
xiaoya/env Normal file
View File

@ -0,0 +1,41 @@
TZ=Asia/Shanghai
# 阿里云盘token
ALIYUN_TOKEN=
# 阿里云盘open token
ALIYUN_OPEN_TOKEN=
# 阿里云盘文件夹ID
ALIYUN_FOLDER_ID=
# 自动更新小雅alist文件
AUTO_UPDATE_ENABLED=true
# 自动清理阿里云盘
AUTO_CLEAR_ENABLED=true
# 阿里云盘自动清理间隔单位分钟默认1分钟
AUTO_CLEAR_INTERVAL=
# pikpak 账号用来观看小雅中pikpak分享给你的资源格式`qqq@qq.com:aaadds`
PIKPAK_USER=
# 开启tvbox随机订阅地址true/false默认false
TVBOX_SECURITY=
# 开启登陆功能true/false默认false
FORCE_LOGIN=
# webdav用户名为dav设置密码。默认用户密码guest/guest_Api789
WEBDAV_PASSWORD=
# emby 地址,容器内部使用地址,一般不用改
EMBY_ADDR=http://emby:6908
# jellyfin 地址,容器内部使用地址,一般不用改
JELLYFIN_ADDR=http://jellyfin:8096
# alist 地址,容器内部使用地址,一般不用改
ALIST_ADDR=http://alist:5678
# 是否启用emby
EMBY_ENABLED=true
# 是否启用jellyfin
JELLYFIN_ENABLED=false
# 自动更新emby的配置依赖EMBY_APIKEY
AUTO_UPDATE_EMBY_CONFIG_ENABLED=true
# 自动更新emby配置config.mp4间隔单位天默认7天
AUTO_UPDATE_EMBY_INTERVAL=
# 自动更新元数据
AUTO_UPDATE_METADATA_ENABLED=true
# emby的apikey
EMBY_APIKEY=

285
xiaoya/xiaoya-all.sh Normal file
View File

@ -0,0 +1,285 @@
#!/bin/bash
green() { echo -e "\033[32m\033[01m[INFO] $1\033[0m"; }
set -eu
sedsh() {
if [[ "$(uname -o)" = "Darwin" ]]; then
# macOS
sed -i '' "$@"
else
# Linux
sed -i "$@"
fi
}
# 格式https://xxx.com/
GH_PROXY="${GH_PROXY:=}"
# 格式xxx.com
IMAGE_PROXY="${IMAGE_PROXY:=}"
# 服务镜像
IMAGE_TAG="${VERSION:-latest}"
# 服务下载地址
DOWNLOAD_URL="https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/xiaoya"
# 欢迎信息
echo "欢迎使用xiaoya服务部署脚本"
echo "项目地址https://github.com/monlor/docker-xiaoya"
echo "作者monlor (https://link.monlor.com)"
echo
# 检查docker服务是否存在不存在则询问用户是否安装不安装退出脚本
if ! command -v docker &> /dev/null; then
if [ "$(uname -o)" = "Darwin" ]; then
echo "Docker 未安装请安装docker后再运行脚本推荐OrbStackhttps://orbstack.dev/"
exit 1
fi
read -rp "Docker 未安装,是否安装?(y/n): " install
if [ "$install" = "y" ]; then
echo "安装docker..."
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl enable docker
systemctl start docker
else
echo "退出安装"
exit 1
fi
fi
DOCKER_COMPOSE="docker compose"
# 检查是否安装了compose插件,docker compose 命令
if ! docker compose &> /dev/null && ! which docker-compose &> /dev/null; then
read -rp "Docker Compose 未安装,是否安装?(y/n): " install
if [ "$install" = "y" ]; then
echo "安装docker compose..."
# 判断系统是x86还是armarm有很多种类都要判断
if [ "$(uname -m)" = "aarch64" ]; then
file=docker-compose-linux-aarch64
elif [ "$(uname -m)" = "x86_64" ]; then
file=docker-compose-linux-x86_64
else
echo "不支持的系统架构$(uname -m), 请自行安装docker compose(https://docs.docker.com/compose/install/linux/#install-using-the-repository)"
exit 1
fi
curl -SL "${GH_PROXY}https://github.com/docker/compose/releases/download/v2.27.1/$file" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
else
echo "退出安装"
exit 1
fi
fi
if ! docker compose &> /dev/null; then
DOCKER_COMPOSE="docker-compose"
fi
green "如果是群晖系统可在文件管理器 右键属性 找到合适的目录 再粘贴"
# 让用户输入服务部署目录,默认/opt/xiaoya
read -rp "请输入服务部署目录(默认/opt/xiaoya: " install_path
install_path=${install_path:=/opt/xiaoya}
# 检查服务是否已经运行
if [ -f "$install_path/docker-compose.yml" ]; then
# 询问用户是否要更新服务
echo
echo "检查到服务已存在更新会覆盖docker-compose.yml文件不会覆盖env文件"
read -rp "是否更新服务?(y/n): " update
if [ "${update}" != "y" ]; then
echo "退出安装"
exit 1
fi
fi
DOCKER_HOME="$(docker info 2>/dev/null | grep "Docker Root Dir" | awk -F ':' '{print$2}')"
# 选择数据保存位置
data_location=1
if [ -d "$install_path/data" ]; then
data_location=2
fi
cat <<-EOF
请选择数据保存位置:
1. Docker卷数据保存在: ${DOCKER_HOME}/volumes
2. 服务部署目录(数据保存在: ${install_path}
EOF
read -rp "请选择数据保存位置(默认为${data_location}: " res
data_location=${res:-${data_location}}
token=""
open_token=""
folder_id=""
# 如果是更新服务则从原有的compose配置中获取token等信息
if [ "${update:-}" = "y" ]; then
token=$(grep ALIYUN_TOKEN "$install_path/env" 2> /dev/null | awk -F '=' '{print $2}')
open_token=$(grep ALIYUN_OPEN_TOKEN "$install_path/env" 2> /dev/null | awk -F '=' '{print $2}')
folder_id=$(grep ALIYUN_FOLDER_ID "$install_path/env" 2> /dev/null | awk -F '=' '{print $2}')
fi
# 让用户输入阿里云盘TOKENtoken获取方式教程https://alist.nn.ci/zh/guide/drivers/aliyundrive.html
echo
echo "阿里云盘token获取方式教程https://alist.nn.ci/zh/guide/drivers/aliyundrive.html"
read -rp "请输入阿里云盘TOKEN(默认为$token): " res
token=${res:=$token}
if [ ${#token} -ne 32 ]; then
echo "长度不对,阿里云盘 Token是32位"
exit 1
fi
# 让用户输入阿里云盘OpenTOKENtoken获取方式教程https://alist.nn.ci/zh/guide/drivers/aliyundrive_open.html
echo
echo "阿里云盘Open token获取方式教程https://alist.nn.ci/zh/guide/drivers/aliyundrive_open.html"
read -rp "请输入阿里云盘Open TOKEN(默认为$open_token): " res
open_token=${res:=$open_token}
if [ ${#open_token} -le 334 ]; then
echo "长度不对,阿里云盘 Open Token是335位"
exit 1
fi
# 让用户输入阿里云盘转存目录folder_idfolder_id获取方式教程https://www.aliyundrive.com/s/rP9gP3h9asE
echo
echo "进入阿里云盘网页版资源盘里面创建一个文件夹点击文件夹复制浏览器阿里云盘地址末尾的文件夹ID最后一个斜杠/后面的一串字符串)"
read -rp "请输入阿里云盘缓存目录ID(默认为$folder_id): " res
folder_id=${res:=$folder_id}
if [ ${#folder_id} -ne 40 ]; then
echo "长度不对,阿里云盘 folder id是40位"
exit 1
fi
# 选择部署服务类型alist + emby (默认), alist, alist + jellyfin, alist + emby + jellyfin
echo
echo "部署类型:"
echo "1. alist + emby (默认)"
echo "2. alist"
echo "3. alist + jellyfin"
echo "4. alist + emby + jellyfin"
read -rp "请选择部署服务类型: " service_type
case $service_type in
1)
service_type=""
;;
2)
service_type="-alist"
;;
3)
service_type="-jellyfin"
;;
4)
service_type="-all"
;;
*)
service_type=""
;;
esac
# 检查目录是否存在,不存在则创建
if [ ! -d "$install_path" ]; then
mkdir -p "$install_path"
fi
cd "$install_path"
echo "开始生成配置文件docker-compose${service_type}.yml..."
curl -#Lo "$install_path/docker-compose.yml" "${DOWNLOAD_URL}/docker-compose${service_type}.yml"
if [ ! -f "$install_path/env" ]; then
curl -#Lo "$install_path/env" "${DOWNLOAD_URL}/env"
fi
sedsh "s#ALIYUN_TOKEN=.*#ALIYUN_TOKEN=$token#g" env
sedsh "s#ALIYUN_OPEN_TOKEN=.*#ALIYUN_OPEN_TOKEN=$open_token#g" env
sedsh "s#ALIYUN_FOLDER_ID=.*#ALIYUN_FOLDER_ID=$folder_id#g" env
if [ -n "$IMAGE_PROXY" ]; then
sedsh -E "s#image: [^/]+#image: ${IMAGE_PROXY}#g" docker-compose.yml
fi
# 修改镜像版本
sedsh "s#:latest#:$IMAGE_TAG#g" docker-compose.yml
# 修改数据保存位置
if [ "$data_location" = "2" ]; then
sed -n '/^volumes/,$p' ./docker-compose.yml | sed -e 's/://g' | grep -v volumes | while read -r volume; do
if [ -z "${volume}" ]; then
continue
fi
if [ ! -d "$install_path/data/$volume" ]; then
mkdir -p "$install_path/data/$volume"
fi
sedsh "s#- $volume:#- $install_path/data/$volume:#g" docker-compose.yml
done
sedsh "/^volumes/,\$d" docker-compose.yml
fi
echo "开始部署服务..."
$DOCKER_COMPOSE -f docker-compose.yml up --remove-orphans --pull=always -d
echo "服务开始部署如果部署emby/jellyfin下载并解压60G元数据需要一段时间请耐心等待..."
echo "脚本执行完成不代表服务启动完成,请执行下面的命令查看日志来检查部署情况."
echo
echo "> 服务管理(请牢记以下命令)"
# 提示用户compose如何查看日志启动重启停止服务
echo "查看日志:$install_path/manage.sh logs"
# 更新服务
echo "启动服务:$install_path/manage.sh start"
echo "停止服务:$install_path/manage.sh stop"
echo "重启服务:$install_path/manage.sh restart"
echo "加载配置:$install_path/manage.sh reload"
echo "高级用户自定义配置:$install_path/env"
echo "修改env或者compose配置后需要执行上面的加载配置reload命令生效"
# 内网ip
local_ip=""
if [[ "$(uname -o)" = "Darwin" ]]; then
interface="$(route -n get default | grep interface | awk -F ':' '{print$2}' | awk '{$1=$1};1')"
local_ip="$(ifconfig "${interface}" | grep 'inet ' | awk '{print$2}')"
else
interface="$(ip route | grep default | awk '{print$5}')"
local_ip="$(ip -o -4 addr show "${interface}" | awk '{print $4}' | cut -d/ -f1)"
fi
echo
echo "> 服务正在部署,请查看日志等待部署成功后,尝试访问下面的地址"
echo "alist: http://$local_ip:5678"
echo "webdav: http://$local_ip:5678/dav, 默认用户密码: guest/guest_Api789"
echo "tvbox: http://$local_ip:5678/tvbox/my_ext.json"
echo "emby: http://$local_ip:2345, 默认用户密码: xiaoya/1234"
echo "jellyfin: http://$local_ip:2346, 默认用户密码ailg/5678"
echo
echo "还没有部署完,执行这个命令查看日志:$install_path/manage.sh logs"
# 添加管理脚本,启动,停止,查看日志
cat > "$install_path/manage.sh" <<-EOF
#!/bin/bash
set -e
case \$1 in
start)
$DOCKER_COMPOSE -f "$install_path/docker-compose.yml" start
;;
stop)
$DOCKER_COMPOSE -f "$install_path/docker-compose.yml" stop
;;
restart)
$DOCKER_COMPOSE -f "$install_path/docker-compose.yml" restart
;;
reload)
$DOCKER_COMPOSE -f "$install_path/docker-compose.yml" up --remove-orphans -d
;;
logs)
$DOCKER_COMPOSE -f "$install_path/docker-compose.yml" logs -f
;;
*)
echo "Usage: \$0 {start|stop|restart|reload|logs}"
exit 1
;;
esac
EOF
chmod +x "$install_path/manage.sh"
# 增加可读写权限 方便用户修改配置
chmod 777 "$install_path/env"

153
xiaoya/xiaoya_tvbox.sh Normal file
View File

@ -0,0 +1,153 @@
BASE_DIR=/etc/xiaoya
PORT1=4567
PORT2=5344
PORT3=5345
TAG="latest"
UPDATE=false
LOGS=false
NET=""
MOUNT=""
usage(){
echo "Usage: $0 [ -d BASE_DIR ] [ -p PORT1 ] [ -P PORT2 ] [ -t TAG ] [ -v MOUNT ] [ -u ] [ -l ]"
echo "-d BASE_DIR 数据目录,默认:/etc/xiaoya"
echo "-p PORT1 管理界面端口默认4567"
echo "-P PORT2 小雅AList端口默认5344"
echo "-t TAG Docker镜像标签默认latest"
echo "-u 检查镜像更新"
echo "-l 输出docker日志"
echo "-v Host:Docker 路径挂载"
exit 2
}
while getopts "d:p:P:e:t:v:hul" arg; do
case "${arg}" in
d)
BASE_DIR=${OPTARG}
;;
p)
PORT1=${OPTARG}
;;
P)
PORT2=${OPTARG}
;;
e)
PORT3=${OPTARG}
;;
t)
TAG=${OPTARG}
;;
u)
UPDATE=true
;;
l)
LOGS=true
;;
v)
MOUNT="${MOUNT} -v ${OPTARG}"
;;
h)
usage
;;
*)
;;
esac
done
mkdir -p "$HOME/.config/atv"
echo "bridge ${*}" > "$HOME/.config/atv/cmd"
shift $((OPTIND-1))
if [ $# -gt 0 ]; then
BASE_DIR=$1
fi
if [ $# -gt 1 ]; then
PORT1=$2
fi
if [ $# -gt 2 ]; then
PORT2=$3
fi
case "$TAG" in
*host*)
NET="--network host"
echo -e "\e[36mhost网络模式\e[0m"
;;
esac
echo -e "\e[36m使用配置目录\e[0m $BASE_DIR"
[ "$NET" = "" ] && echo -e "\e[36m端口映射\e[0m $PORT1:4567 $PORT2:80"
echo -e "\e[33m默认端口变更为4567\e[0m"
mkdir -p $BASE_DIR
if ! grep "access.mypikpak.com" /etc/hosts >/dev/null
then
echo -e "127.0.0.1\taccess.mypikpak.com" >> /etc/hosts
fi
docker container prune -f --filter "label=MAINTAINER=Har01d"
docker image prune -f --filter "label=MAINTAINER=Har01d"
docker volume prune -f --filter "label=MAINTAINER=Har01d"
platform="linux/amd64"
ARCH=$(uname -m)
if [ "$ARCH" = "armv7l" ]; then
echo "不支持的平台"
exit 1
elif [ "$ARCH" = "aarch64" ]; then
platform="linux/arm64"
fi
IMAGE_ID=$(docker images -q haroldli/xiaoya-tvbox:${TAG})
echo -e "\e[32m下载最新Docker镜像平台${platform}, image tag: ${TAG}\e[0m"
for i in 1 2 3 4 5
do
docker pull --platform ${platform} haroldli/xiaoya-tvbox:${TAG} && break
done
NEW_IMAGE=$(docker images -q haroldli/xiaoya-tvbox:${TAG})
if [ "$UPDATE" = "true" ] && [ "$IMAGE_ID" = "$NEW_IMAGE" ]; then
echo -e "\e[33m镜像没有更新\e[0m"
exit
fi
echo -e "\e[33m重启应用\e[0m"
docker rm -f xiaoya-tvbox 2>/dev/null
if [ "$NET" = "" ]; then
docker run -d -p $PORT1:4567 -p $PORT2:80 -e ALIST_PORT=$PORT2 -v "$BASE_DIR":/data $MOUNT --restart=always --name=xiaoya-tvbox haroldli/xiaoya-tvbox:${TAG}
else
docker run -d $NET -v "$BASE_DIR":/data $MOUNT --restart=always --name=xiaoya-tvbox haroldli/xiaoya-tvbox:${TAG}
fi
echo -e "\n\e[32m请使用以下命令查看日志输出\e[0m"
echo -e " docker logs -f xiaoya-tvbox\n"
IP=$(ip a | grep -F '192.168.' | awk '{print $2}' | awk -F/ '{print $1}' | head -1)
if [ -n "$IP" ]; then
echo ""
echo -e "\e[32m请用以下地址访问\e[0m"
echo -e " \e[32m管理界面\e[0m http://$IP:$PORT1/"
echo -e " \e[32m小雅AList\e[0m http://$IP:$PORT2/"
else
IP=$(ip a | grep -F '10.' | awk '{print $2}' | awk -F/ '{print $1}' | grep -E '\b10.' | head -1)
if [ -n "$IP" ]; then
echo ""
echo -e "\e[32m请用以下地址访问\e[0m"
echo -e " \e[32m管理界面\e[0m http://$IP:$PORT1/"
echo -e " \e[32m小雅AList\e[0m http://$IP:$PORT2/"
fi
echo -e "\e[32m云服务器请用公网IP访问\e[0m"
fi
echo ""
echo -e "\e[33m默认端口变更为4567\e[0m"
if [ "$LOGS" = "true" ]; then
echo ""
docker logs -f xiaoya-tvbox
fi

118
zero3/istorepanel.sh Normal file
View File

@ -0,0 +1,118 @@
#!/bin/sh
# base on Author Xiaobao(xiaobao@linkease.com)
# 增加了宿主机文件映射 方便1panel管理文件
ACTION=${1}
shift 1
do_install() {
local port=$(uci get istorepanel.@main[0].port 2>/dev/null)
local image_name=$(uci get istorepanel.@main[0].image_name 2>/dev/null)
local config=$(uci get istorepanel.@main[0].config_path 2>/dev/null)
local entrance=$(uci get istorepanel.@main[0].entrance 2>/dev/null)
local username=$(uci get istorepanel.@main[0].username 2>/dev/null)
local password=$(uci get istorepanel.@main[0].password 2>/dev/null)
local ver=$(uci get istorepanel.@main[0].ver 2>/dev/null)
if [ -z "$config" ]; then
echo "config path is empty!"
exit 1
fi
[ -z "$port" ] && port=10086
[ -z "$ver" ] && ver='v1.10.10-lts'
[ -z "$username" ] && username='1panel'
[ -z "$password" ] && password='password'
[ -z "$entrance" ] && entrance='entrance'
mkdir -p $config
cat >$config/env <<EOF
export PANEL_BASE_DIR=${config}
export PANEL_PORT=${port}
export DEFAULT_ENTRANCE=${entrance}
export DEFAULT_USERNAME=${username}
export DEFAULT_PASSWORD=${password}
export PANELVER=${ver}
EOF
[ -z "$image_name" ] && image_name="linkease/istorepanel:latest"
echo "docker pull ${image_name}"
docker pull ${image_name}
docker rm -f istorepanel
if [ ! -f "/tmp/localtime" ]; then
/etc/init.d/system reload
fi
#增加本地根目录文件映射
local cmd="docker run --restart=unless-stopped -d -h 1PanelServer \
--cgroupns=host \
--cap-add SYS_ADMIN \
--tmpfs /tmp \
--network host \
-v /sys/fs/cgroup:/sys/fs/cgroup \
-v /var/run:/var2/run \
-v /:/ahost \
-v \"$config:/iStorePanel\" "
cmd="$cmd --dns=172.17.0.1 \
--dns=223.5.5.5 "
local tz="$(uci get system.@system[0].zonename | sed 's/ /_/g')"
[ -z "$tz" ] || cmd="$cmd -e TZ=$tz"
cmd="$cmd -v /mnt:/mnt"
mountpoint -q /mnt && cmd="$cmd:rslave"
cmd="$cmd --name istorepanel \"$image_name\""
echo "$cmd"
eval "$cmd"
echo "Installing 1panel"
for b in {1..30}; do
sleep 3
docker_status=$(docker ps --all -f 'name=istorepanel' --format '{{.State}}')
if [[ $docker_status == *running* ]]; then
docker exec istorepanel /app/reinstall.sh
break
else
echo "istorepanel is not running, wait..."
fi
done
}
usage() {
echo "usage: $0 sub-command"
echo "where sub-command is one of:"
echo " install Install the istorepanel"
echo " upgrade Upgrade the istorepanel"
echo " rm/start/stop/restart Remove/Start/Stop/Restart the istorepanel"
echo " status 1Panel status"
echo " port 1Panel port"
}
case ${ACTION} in
"install")
do_install
;;
"upgrade")
do_install
;;
"rm")
docker rm -f istorepanel
;;
"start" | "stop" | "restart")
docker ${ACTION} istorepanel
;;
"status")
docker ps --all -f 'name=istorepanel' --format '{{.State}}'
;;
"port")
echo $(uci get istorepanel.@main[0].port 2>/dev/null)
;;
*)
usage
exit 1
;;
esac

336
zero3/op.sh Normal file
View File

@ -0,0 +1,336 @@
#!/bin/sh
# OpenWrt/iStoreOS
# 定义颜色输出函数
red() { echo -e "\033[31m\033[01m[WARNING] $1\033[0m"; }
green() { echo -e "\033[32m\033[01m[INFO] $1\033[0m"; }
greenline() { echo -e "\033[32m\033[01m $1\033[0m"; }
yellow() { echo -e "\033[33m\033[01m[NOTICE] $1\033[0m"; }
blue() { echo -e "\033[34m\033[01m[MESSAGE] $1\033[0m"; }
light_magenta() { echo -e "\033[95m\033[01m[NOTICE] $1\033[0m"; }
highlight() { echo -e "\033[32m\033[01m$1\033[0m"; }
cyan() { echo -e "\033[38;2;0;255;255m$1\033[0m"; }
is_x86_64_router() {
DISTRIB_ARCH=$(cat /etc/openwrt_release | grep "DISTRIB_ARCH" | cut -d "'" -f 2)
if [ "$DISTRIB_ARCH" = "x86_64" ]; then
return 0
else
return 1
fi
}
get_hostname() {
hostname=$(uci get system.@system[0].hostname)
echo "${hostname}.lan"
}
host_ip=$(get_hostname)
#安装alist
install_alist() {
green "正在安装alist 请稍后"
docker run -d --restart=unless-stopped -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" xhofe/alist:latest
sleep 3
docker exec -it alist ./alist admin set admin
echo '
AList已安装,已帮你设置好用户名和密码,若修改请在web面板修改即可。
用户: admin
密码: admin
'
green 浏览器访问:http://${host_ip}:5244
}
# 安装盒子助手docker版
install_wukongdaily_box() {
mkdir -p /opt/tvhelper_data
chmod 777 /opt/tvhelper_data
green 若使用自定义安装apk功能,可将apk放到/opt/tvhelper_data目录,用完记得及时清理
docker run -d \
--restart unless-stopped \
--name tvhelper \
-p 2299:22 \
-p 2288:80 \
-v "/opt/tvhelper_data:/tvhelper/shells/data" \
-e PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/android-sdk/platform-tools \
wukongdaily/box:latest
if ! docker ps | grep -q "wukongdaily/box"; then
echo "Error: 盒子助手docker版 未运行成功"
else
green "盒子助手docker版已启动可以通过 http://${host_ip}:2288 验证是否安装成功"
green "还可以通过 ssh root@${host_ip} -p 2299 连接到容器内 执行 ./tv.sh 使用该工具"
green "文档和教学视频https://www.youtube.com/watch?v=xAk-3TxeXxQ \n https://www.bilibili.com/video/BV1Rm411o78P"
fi
}
# 更新自己
update_scripts() {
wget -O op.sh https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/zero3/op.sh && chmod +x op.sh
./op.sh
exit 0
}
# 安装小雅xiaoya-tvbox
# 参考 https://har01d.cn/notes/alist-tvbox.html
install_xiaoya_tvbox() {
curl -fsSL https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/xiaoya/xiaoya_tvbox.sh -o xt.sh
chmod +x xt.sh
./xt.sh -d /etc/xiaoya
green "tvbox 使用的json地址是 http://${host_ip}:4567/sub/0"
green "更多文档请查看:https://har01d.cn/notes/alist-tvbox.html"
green "上述这些网址,建议等足5分钟后再查看!\n若没有配置过token信息,可以在此处添加账号 http://${host_ip}:4567/#/accounts"
echo '
小雅tvbox
webdav 信息如下
端口:5344
用户: guest
密码: guest_Api789
'
}
# 安装1panel面板
install_1panel_on_openwrt() {
docker run -d \
--name 1panel \
--restart always \
--network host \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /www/data/1panel-data:/opt/1panel_data \
-v /:/ahost \
-e TZ=Asia/Shanghai \
moelin/1panel:latest
echo '
默认端口10086
默认账户1panel
默认密码1panel_password
默认入口entrance'
green http://${host_ip}:10086/entrance
green "或者访问 http://路由器ip:10086/entrance"
}
# 安装istoreOS版本1panel
install_istorepanel() {
green "请务必确保您使用的是iStoreOS系统 回车或输入y来确定"
yellow "并且停止正在运行的istorepanel容器(y|n)"
read -r answer
if [ "$answer" = "y" ] || [ -z "$answer" ]; then
green "先确保安装了iStore增强"
is-opkg install app-meta-istoreenhance
green "正在安装1panel的iStoreOS版本..."
rm -rf /etc/config/istorepanel
is-opkg remove app-meta-istorepanel
is-opkg install app-meta-istorepanel
green "正在安装istore版1panel..."
# 执行 quickstart showLanIP 命令并提取结果
output=$(quickstart showLanIP)
lan_ip=$(echo $output | awk -F 'lanIp= ' '{print $2}')
# 获取 Docker 根目录路径
docker_root_dir=$(docker info 2>/dev/null | grep 'Docker Root Dir' | awk -F ': ' '{print $2}')
# 检查是否成功获取到路径
if [ -z "$docker_root_dir" ]; then
echo "Failed to get Docker root directory."
exit 1
fi
if ! is_available_space_greater_than_2GB "$docker_root_dir"; then
red "检测到docker空间不足2GB 请在iStoreOS首页迁移docker到更大的分区"
exit 1
fi
# 去除末尾的 '/docker' 部分
config_root_dir=$(dirname "$docker_root_dir")
config_path="${config_root_dir}/Configs/1Panel"
green "1Panel配置文件存放在下面的目录"
yellow "$config_path"
if [ -d "$config_path" ]; then
uci set istorepanel.@main[0].config_path=$config_path
uci commit istorepanel
wget -qO /tmp/istorepanel.sh https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/zero3/istorepanel.sh
chmod +x /tmp/istorepanel.sh
"/tmp/istorepanel.sh" install
greenline "———————————————安装完成————————————————————————"
countdown
echo
cyan "http://$lan_ip/cgi-bin/luci/admin/services/istorepanel"
green "跳转到上述页面, 打开1panel或修改参数"
cyan "http://$lan_ip:10086/entrance"
green "或者跳转到上述页面, 直接打开1panel面板"
else
red "安装失败,请检查1Panel配置文件的目录是否存在"
fi
else
yellow "您选择了不安装"
fi
}
is_available_space_greater_than_2GB() {
local dir_path=$1
local available_space_kb=$(df -k "$dir_path" | awk 'NR==2 {print $4}')
local available_space_gb=$((available_space_kb / 1024 / 1024))
if [ "$available_space_gb" -gt 2 ]; then
return 0
else
return 1
fi
}
# 倒计时15秒
countdown() {
local seconds=15
while [ $seconds -gt 0 ]; do
printf "\r请耐心等待: %2d 秒后再访问" $seconds
sleep 1
seconds=$((seconds - 1))
done
}
#根据release地址和命名前缀获取apk地址
get_docker_compose_url() {
if [ $# -eq 0 ]; then
echo "需要提供GitHub releases页面的URL作为参数。"
return 1
fi
local releases_url=$1
# 使用curl获取重定向的URL
latest_url=$(curl -Ls -o /dev/null -w "%{url_effective}" "$releases_url")
# 使用sed从URL中提取tag值,并保留前导字符'v'
tag=$(echo $latest_url | sed 's|.*/v|v|')
# 检查是否成功获取到tag
if [ -z "$tag" ]; then
echo "未找到最新的release tag。"
return 1
fi
# 拼接docker-compose下载链接
if is_x86_64_router; then
platform="docker-compose-linux-x86_64"
else
platform="docker-compose-linux-aarch64"
fi
local repo_path=$(echo "$releases_url" | sed -n 's|https://github.com/\(.*\)/releases/latest|\1|p')
if [[ $(curl -s ipinfo.io/country) == "CN" ]]; then
docker_compose_download_url="https://cafe.cpolar.cn/wkdaily/docker-compose/raw/branch/main/${platform}"
else
docker_compose_download_url="https://github.com/${repo_path}/releases/download/${tag}/${platform}"
fi
echo "$docker_compose_download_url"
}
# 下载并安装Docker Compose
do_install_docker_compose() {
# https://github.com/docker/compose/releases/download/v2.26.0/docker-compose-linux-aarch64
# 检查/usr/bin/docker是否存在并且可执行
if [ -f "/usr/bin/docker" ] && [ -x "/usr/bin/docker" ]; then
echo "Docker is installed and has execute permissions."
else
red "警告 您还没有安装Docker"
exit 1
fi
local github_releases_url="https://github.com/docker/compose/releases/latest"
local docker_compose_url=$(get_docker_compose_url "$github_releases_url")
cyan "最新版docker-compose 地址:$docker_compose_url"
cyan "即将下载最新版docker-compose standalone"
wget -O /usr/bin/docker-compose $docker_compose_url
if [ $? -eq 0 ]; then
green "docker-compose下载并安装成功,你可以使用啦"
chmod +x /usr/bin/docker-compose
else
red "安装失败,请检查网络连接.或者手动下载到 /usr/bin/docker-compose 记得赋予执行权限"
yellow "刚才使用的地址是:$docker_compose_url"
exit 1
fi
}
# 安装特斯拉伴侣
install_teslamate() {
if which docker-compose >/dev/null 2>&1; then
echo "Docker Compose is installed."
docker-compose --version
mkdir -p /tmp/teslamate
wget -O /tmp/teslamate/docker-compose.yml https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/teslamate/docker-compose.yml
cd /tmp/teslamate
docker-compose up -d
else
red "Docker Compose is not installed. "
do_install_docker_compose
fi
}
install_xiaoya_allinone() {
if which docker-compose >/dev/null 2>&1; then
bash -c "$(curl -fsSL https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/xiaoya/xiaoya-all.sh)"
else
red "Docker Compose 还未安装,正在尝试安装..."
green "安装成功后,请您再次执行该选项"
do_install_docker_compose
fi
}
# *************************************************************
while true; do
#*************************************
clear
greenline "————————————————————————————————————————————————————"
echo '
*********** DIY docker轻服务器 ***************
环境:OpenWrt/iStoreOS
脚本作用:快速部署一个省电无感的小透明轻服务器
--- Made by wukong with YOU ---'
echo -e " https://github.com/wukongdaily/OrangePiShell"
greenline "————————————————————————————————————————————————————"
echo
cyan " 1. 安装小雅tvbox"
echo " 2. 安装盒子助手docker版"
echo " 3. 安装AList docker版"
cyan " 4. 安装1panel(iStoreOS版)"
echo " 5. 安装特斯拉伴侣TeslaMate"
echo " 6. 安装docker-compose"
echo " 7. 安装小雅全家桶Emby|Jellyfin"
echo " 8. 安装1panel面板通用版"
cyan " U. 更新脚本"
echo
echo " Q. 退出本程序"
echo
read -p "请选择一个选项: " choice
case $choice in
1)
install_xiaoya_tvbox
;;
2)
install_wukongdaily_box
;;
3)
install_alist
;;
4)
install_istorepanel
;;
5)
install_teslamate
;;
6)
do_install_docker_compose
;;
7)
install_xiaoya_allinone
;;
8)
install_1panel_on_openwrt
;;
u | U)
update_scripts
;;
q | Q)
echo "退出"
exit 0
;;
*)
echo "无效选项,请重新选择。"
;;
esac
read -p "按 Enter 键继续..."
done

View File

@ -19,15 +19,11 @@ if [ "$(id -u)" -ne 0 ]; then
exit $? exit $?
fi fi
proxy=""
if [ $# -gt 0 ]; then
proxy="https://mirror.ghproxy.com/"
fi
declare -a menu_options declare -a menu_options
declare -A commands declare -A commands
menu_options=( menu_options=(
"更新系统软件包" "更新系统软件包"
"安装docker"
"安装并启动文件管理器FileBrowser" "安装并启动文件管理器FileBrowser"
"设置文件管理器开机自启动" "设置文件管理器开机自启动"
"安装1panel面板管理工具" "安装1panel面板管理工具"
@ -35,17 +31,23 @@ menu_options=(
"安装alist" "安装alist"
"安装小雅alist" "安装小雅alist"
"安装小雅转存清理工具" "安装小雅转存清理工具"
"安装小雅tvbox"
"使用docker-compose部署小雅全家桶(建议x86-64设备)"
"群晖6.2系统安装docker-compose(x86-64)"
"修改阿里云盘Token(32位)" "修改阿里云盘Token(32位)"
"修改阿里云盘OpenToken(335位)" "修改阿里云盘OpenToken(335位)"
"修改小雅转存文件夹ID(40位)" "修改小雅转存文件夹ID(40位)"
"安装内网穿透工具Cpolar" "安装内网穿透工具Cpolar"
"安装盒子助手docker版" "安装盒子助手docker版"
"安装特斯拉伴侣TeslaMate"
"安装CasaOS面板" "安装CasaOS面板"
"安装内网穿透工具DDNSTO"
"更新脚本" "更新脚本"
) )
commands=( commands=(
["更新系统软件包"]="update_system_packages" ["更新系统软件包"]="update_system_packages"
["安装docker"]="install_docker"
["安装并启动文件管理器FileBrowser"]="install_filemanager" ["安装并启动文件管理器FileBrowser"]="install_filemanager"
["设置文件管理器开机自启动"]="start_filemanager" ["设置文件管理器开机自启动"]="start_filemanager"
["安装1panel面板管理工具"]="install_1panel_on_linux" ["安装1panel面板管理工具"]="install_1panel_on_linux"
@ -60,6 +62,14 @@ commands=(
["安装盒子助手docker版"]="install_wukongdaily_box" ["安装盒子助手docker版"]="install_wukongdaily_box"
["安装CasaOS面板"]="install_casaos" ["安装CasaOS面板"]="install_casaos"
["更新脚本"]="update_scripts" ["更新脚本"]="update_scripts"
["安装小雅tvbox"]="install_xiaoya_tvbox"
["安装特斯拉伴侣TeslaMate"]="install_teslamate"
["安装内网穿透工具DDNSTO"]="install_ddnsto"
["使用docker-compose部署小雅全家桶(建议x86-64设备)"]="install_xiaoya_emby"
["群晖6.2系统安装docker-compose(x86-64)"]="do_install_docker_compose"
) )
# 更新系统软件包 # 更新系统软件包
@ -70,6 +80,22 @@ update_system_packages() {
green "Updating system packages..." green "Updating system packages..."
sudo apt update sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -y sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -y
if ! command -v curl &>/dev/null; then
red "curl is not installed. Installing now..."
sudo apt install -y curl
if command -v curl &>/dev/null; then
green "curl has been installed successfully."
else
echo "Failed to install curl. Please check for errors."
fi
else
echo "curl is already installed."
fi
}
# 安装docker
install_docker(){
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
} }
# 安装文件管理器 # 安装文件管理器
@ -159,7 +185,7 @@ install_filemanager() {
return 7 return 7
fi fi
filemanager_file="${filemanager_os}-$filemanager_arch-filebrowser$filemanager_dl_ext" filemanager_file="${filemanager_os}-$filemanager_arch-filebrowser$filemanager_dl_ext"
filemanager_url="${proxy}https://github.com/filebrowser/filebrowser/releases/download/v2.28.0/$filemanager_file" filemanager_url="https://cafe.cpolar.cn/wkdaily/filebrowser/raw/branch/main/$filemanager_file"
echo "$filemanager_url" echo "$filemanager_url"
# Use $PREFIX for compatibility with Termux on Android # Use $PREFIX for compatibility with Termux on Android
@ -183,6 +209,7 @@ install_filemanager() {
if type -p $filemanager_bin >/dev/null 2>&1; then if type -p $filemanager_bin >/dev/null 2>&1; then
green "Successfully installed" green "Successfully installed"
green "安装成功,现在您可以执行第3项开启文件管理并设置自启动"
trap ERR trap ERR
return 0 return 0
else else
@ -213,15 +240,15 @@ start_filemanager() {
fi fi
local host_ip local host_ip
host_ip=$(hostname -I | awk '{print $1}') host_ip=$(hostname -I | awk '{print $1}')
echo "filebrowser 文件管理器已启动,可以通过 http://${host_ip}:8080 访问" green "filebrowser 文件管理器已启动,可以通过 http://${host_ip}:8080 访问"
echo "登录用户名admin" green "登录用户名admin"
echo "默认密码admin请尽快修改密码" green "默认密码admin请尽快修改密码"
sudo wget -O /etc/systemd/system/filebrowser.service ${proxy}https://raw.githubusercontent.com/wukongdaily/OrangePiShell/master/filebrowser.service sudo wget -O /etc/systemd/system/filebrowser.service "https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/filebrowser.service"
sudo chmod +x /etc/systemd/system/filebrowser.service sudo chmod +x /etc/systemd/system/filebrowser.service
sudo systemctl daemon-reload # 重新加载systemd配置 sudo systemctl daemon-reload # 重新加载systemd配置
sudo systemctl start filebrowser.service # 启动服务 sudo systemctl start filebrowser.service # 启动服务
sudo systemctl enable filebrowser.service # 设置开机启动 sudo systemctl enable filebrowser.service # 设置开机启动
echo "正在设置文件管理器开机自启动" yellow "已设置文件管理器开机自启动,下次开机可直接访问文件管理器"
} }
# 安装1panel面板 # 安装1panel面板
@ -229,6 +256,12 @@ install_1panel_on_linux() {
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh
intro="https://1panel.cn/docs/installation/cli/" intro="https://1panel.cn/docs/installation/cli/"
if command -v 1pctl &>/dev/null; then if command -v 1pctl &>/dev/null; then
echo '{
"registry-mirrors": [
"https://docker.1panel.live"
]
}' | sudo tee /etc/docker/daemon.json >/dev/null
sudo /etc/init.d/docker restart
green "如何卸载1panel 请参考:$intro" green "如何卸载1panel 请参考:$intro"
else else
red "未安装1panel" red "未安装1panel"
@ -427,7 +460,7 @@ install_wukongdaily_box() {
local host_ip local host_ip
host_ip=$(hostname -I | awk '{print $1}') host_ip=$(hostname -I | awk '{print $1}')
green "盒子助手docker版已启动可以通过 http://${host_ip}:2288 验证是否安装成功" green "盒子助手docker版已启动可以通过 http://${host_ip}:2288 验证是否安装成功"
green "还可以通过 ssh ${host_ip} -p 2299 连接到容器内 执行 ./tv.sh 使用该工具" green "还可以通过 ssh root@${host_ip} -p 2299 连接到容器内 执行 ./tv.sh 使用该工具 ssh密码password"
green "文档和教学视频https://www.youtube.com/watch?v=xAk-3TxeXxQ \n https://www.bilibili.com/video/BV1Rm411o78P" green "文档和教学视频https://www.youtube.com/watch?v=xAk-3TxeXxQ \n https://www.bilibili.com/video/BV1Rm411o78P"
fi fi
} }
@ -441,16 +474,110 @@ install_casaos() {
update_scripts() { update_scripts() {
wget -O pi.sh https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/zero3/pi.sh && chmod +x pi.sh wget -O pi.sh https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/zero3/pi.sh && chmod +x pi.sh
echo "脚本已更新并保存在当前目录 pi.sh,现在将执行新脚本。" echo "脚本已更新并保存在当前目录 pi.sh,现在将执行新脚本。"
./pi.sh ${proxy} ./pi.sh
exit 0 exit 0
} }
# 安装小雅xiaoya-tvbox
# 参考 https://har01d.cn/notes/alist-tvbox.html
install_xiaoya_tvbox() {
local host_ip
host_ip=$(hostname -I | awk '{print $1}')
#wget -qO xt.sh https://d.har01d.cn/update_xiaoya.sh
curl -fsSL https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/xiaoya/xiaoya_tvbox.sh -o xt.sh
sudo chmod +x xt.sh
sudo ./xt.sh -d /mnt/xiaoya
green "tvbox 使用的json地址是 http://${host_ip}:4567/sub/0"
green "更多文档请查看:https://har01d.cn/notes/alist-tvbox.html"
green "上述这些网址,建议等足5分钟后再查看!\n若没有配置过token信息,可以在此处添加账号 http://${host_ip}:4567/#/accounts"
echo '
小雅tvbox
webdav 信息如下
端口:5344
用户: guest
密码: guest_Api789
'
}
# 安装特斯拉伴侣
install_teslamate() {
check_docker_compose
sudo mkdir -p /opt/teslamate/import
wget -O /opt/teslamate/docker-compose.yml https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/teslamate/docker-compose.yml
cd /opt/teslamate
sudo docker-compose up -d
}
check_docker_compose() {
if which docker-compose >/dev/null 2>&1; then
echo "Docker Compose is installed."
docker-compose --version
else
echo "Docker Compose is not installed. You can install 1panel first."
exit 1
fi
}
# 安装DDNSTO
install_ddnsto() {
green "请登录 https://www.ddnsto.com/app/#/devices 在控制台复制 令牌 令牌=token"
sh -c "$(curl -sSL http://fw.koolcenter.com/binary/ddnsto/linux/install_ddnsto_linux.sh)"
}
# 安装小雅全家桶
install_xiaoya_emby(){
bash -c "$(curl -fsSL https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/xiaoya/xiaoya-all.sh)"
}
get_docker_compose_url() {
if [ $# -eq 0 ]; then
echo "需要提供GitHub releases页面的URL作为参数。"
return 1
fi
local releases_url=$1
# 使用curl获取重定向的URL
latest_url=$(curl -Ls -o /dev/null -w "%{url_effective}" "$releases_url")
# 使用sed从URL中提取tag值,并保留前导字符'v'
tag=$(echo $latest_url | sed 's|.*/v|v|')
# 检查是否成功获取到tag
if [ -z "$tag" ]; then
echo "未找到最新的release tag。"
return 1
fi
platform="docker-compose-linux-x86_64"
local repo_path=$(echo "$releases_url" | sed -n 's|https://github.com/\(.*\)/releases/latest|\1|p')
if [[ $(curl -s ipinfo.io/country) == "CN" ]]; then
docker_compose_download_url="https://cafe.cpolar.cn/wkdaily/docker-compose/raw/branch/main/${platform}"
else
docker_compose_download_url="https://github.com/${repo_path}/releases/download/${tag}/${platform}"
fi
echo "$docker_compose_download_url"
}
# 适配群晖6.2 先行安装 docker-compose
do_install_docker_compose() {
# /usr/local/bin/docker-compose
local github_releases_url="https://github.com/docker/compose/releases/latest"
local docker_compose_url=$(get_docker_compose_url "$github_releases_url")
cyan "最新版docker-compose 地址:$docker_compose_url"
cyan "即将下载最新版docker-compose standalone"
wget -O /usr/local/bin/docker-compose $docker_compose_url
if [ $? -eq 0 ]; then
green "docker-compose下载并安装成功,你可以使用啦"
chmod +x /usr/local/bin/docker-compose
else
red "安装失败,请检查网络连接.或者手动下载到 /usr/local/bin/docker-compose 记得赋予执行权限"
yellow "刚才使用的地址是:$docker_compose_url"
exit 1
fi
}
show_menu() { show_menu() {
clear clear
greenline "————————————————————————————————————————————————————" greenline "————————————————————————————————————————————————————"
echo ' echo '
*********** DIY docker轻服务器 *************** *********** DIY docker轻服务器 ***************
环境:orange pi zero 3 (Ubuntu/debian) 环境: (Ubuntu/Debian/synology etc)
脚本作用:快速部署一个省电无感的小透明轻服务器 脚本作用:快速部署一个省电无感的小透明轻服务器
--- Made by wukong with YOU ---' --- Made by wukong with YOU ---'
echo -e " https://github.com/wukongdaily/OrangePiShell" echo -e " https://github.com/wukongdaily/OrangePiShell"
@ -458,11 +585,11 @@ show_menu() {
echo "请选择操作:" echo "请选择操作:"
# 特殊处理的项数组 # 特殊处理的项数组
special_items=("") special_items=("安装docker" "安装1panel面板管理工具" "安装小雅tvbox" "安装特斯拉伴侣TeslaMate")
for i in "${!menu_options[@]}"; do for i in "${!menu_options[@]}"; do
if [[ " ${special_items[*]} " =~ " ${menu_options[i]} " ]]; then if [[ " ${special_items[*]} " =~ " ${menu_options[i]} " ]]; then
# 如果当前项在特殊处理项数组中,使用特殊颜色 # 如果当前项在特殊处理项数组中,使用特殊颜色
highlight "$((i + 1)). ${menu_options[i]}" cyan "$((i + 1)). ${menu_options[i]}"
else else
# 否则,使用普通格式 # 否则,使用普通格式
echo "$((i + 1)). ${menu_options[i]}" echo "$((i + 1)). ${menu_options[i]}"