Compare commits
No commits in common. "main" and "v1" have entirely different histories.
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,2 +0,0 @@
|
||||
|
||||
.DS_Store
|
118
README.md
118
README.md
@ -1,55 +1,41 @@
|
||||
<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 orangepi@192.168.66.106`
|
||||
- 默认用户名:`orangepi`
|
||||
- 默认密码:`orangepi` <br>
|
||||
#### 准备:首次使用 如果时间不正确可以先检查时钟时间,举例说明
|
||||
```
|
||||
root@orangepizero3:~# hwclock -r
|
||||
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
|
||||
root@orangepizero3:~# hwclock -w
|
||||
root@orangepizero3:~# hwclock -r
|
||||
2024-08-13 08:54:07.738915+08:00
|
||||
root@orangepizero3:~#
|
||||
# 上述代码我们分别查询了时钟时间,发现是1970年是错的,接着我们手动设置了当前时间,然后保存时钟时间。再次读取时钟时间就正确了。
|
||||
此时,你在执行wget等下载操作,就能成功下载脚本了。
|
||||
|
||||
|
||||
|
||||
### 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的准备
|
||||
> debian系统最好先切到root身份再运行上述脚本
|
||||
|
||||
|
||||
<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.top/wkdaily/zero3/raw/branch/main/zero3/pi.sh && chmod +x pi.sh && ./pi.sh
|
||||
|
||||
su -
|
||||
```
|
||||
### QNAP 威联通docker-compose 搭建小雅全家桶
|
||||
```bash
|
||||
bash -c "$(curl -fsSL https://cafe.cpolar.top/wkdaily/zero3/raw/branch/main/xiaoya/xiaoya-all.sh)"
|
||||
```
|
||||
|
||||
### OpenWrt/iStoreOS 软路由系统
|
||||
```bash
|
||||
wget -qO op.sh https://cafe.cpolar.top/wkdaily/zero3/raw/branch/main/zero3/op.sh && chmod +x op.sh && ./op.sh
|
||||
wget -qO pi.sh https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/zero3/pi.sh && chmod +x pi.sh
|
||||
./pi.sh proxy
|
||||
|
||||
```
|
||||
|
||||
<img src="https://github.com/wukongdaily/OrangePiShell/assets/143675923/67baea9e-9222-4409-8aae-b6e9242c721d" width="40%" />
|
||||
|
||||
***
|
||||
|
||||
<br>
|
||||
|
||||
<img src="https://github.com/wukongdaily/OrangePiShell/assets/143675923/56898b74-ea47-44aa-8de3-e14e12873a25" width="40%" />
|
||||
|
||||
|
||||
### 网盘
|
||||
@ -67,66 +53,14 @@ wget -qO op.sh https://cafe.cpolar.top/wkdaily/zero3/raw/branch/main/zero3/op.sh
|
||||
| arm64 \| arm64v8 | ✅ |
|
||||
| armhf \| armv7 | ✅ |
|
||||
|
||||
| 系统 | 或 |机型 |
|
||||
|-----|-----|-----|
|
||||
| Ubuntu ✅ | Debian ✅ | Deepin ✅ |
|
||||
| OpenWrt ✅ | iStoreOS ✅ | MT-3000 ✅ |
|
||||
| NanoPi-R2S ✅ | NanoPi-R4S ✅ | NanoPi-Neo3 ✅ |
|
||||
| Synology ✅ | | |
|
||||
|
||||
|
||||
|
||||
# 参考项目
|
||||
https://github.com/DDS-Derek/xiaoya-alist
|
||||
|
||||
| 系统名称 | 是否支持 |
|
||||
| :----- | :--: |
|
||||
| Ubuntu | ✅ |
|
||||
| Debian | ✅ |
|
||||
| Deepin | ✅ |
|
||||
|
||||
# 常见问题汇总⬇️⬇️⬇️
|
||||
[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.top/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.top/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
|
||||
这样就重复了。
|
||||
[常见问题总结(持续更新中)](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)
|
||||
|
||||
|
||||
```
|
||||
👉👉👉[关于小雅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
|
||||
|
||||
# 附加功能
|
||||
- zero3 的 immortalwrt 系统下一键安装iStore商店 (x86-64/arm64)
|
||||
```
|
||||
wget -qO imm.sh https://cafe.cpolar.top/wkdaily/zero3/raw/branch/main/zero3/imm.sh && chmod +x imm.sh && ./imm.sh
|
||||
|
||||
```
|
||||
|
||||
|
@ -1,56 +0,0 @@
|
||||
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:
|
@ -1,20 +0,0 @@
|
||||
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:
|
@ -1,82 +0,0 @@
|
||||
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:
|
||||
|
@ -1,59 +0,0 @@
|
||||
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:
|
@ -1,55 +0,0 @@
|
||||
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
41
xiaoya/env
@ -1,41 +0,0 @@
|
||||
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=
|
@ -1,285 +0,0 @@
|
||||
#!/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.top/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后再运行脚本,推荐OrbStack:https://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还是arm,arm有很多种类,都要判断
|
||||
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
|
||||
|
||||
# 让用户输入阿里云盘TOKEN,token获取方式教程: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
|
||||
|
||||
# 让用户输入阿里云盘OpenTOKEN,token获取方式教程: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_id,folder_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"
|
@ -1,153 +0,0 @@
|
||||
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
|
36
zero3/imm.sh
36
zero3/imm.sh
@ -1,36 +0,0 @@
|
||||
#!/bin/sh
|
||||
# 安装iStore 参考 https://github.com/linkease/istore
|
||||
do_istore() {
|
||||
echo "do_istore method==================>"
|
||||
# 换源
|
||||
ISTORE_REPO=https://istore.istoreos.com/repo/all/store
|
||||
FCURL="curl --fail --show-error"
|
||||
|
||||
curl -V >/dev/null 2>&1 || {
|
||||
echo "prereq: install curl"
|
||||
opkg info curl | grep -Fqm1 curl || opkg update
|
||||
opkg install curl
|
||||
}
|
||||
|
||||
IPK=$($FCURL "$ISTORE_REPO/Packages.gz" | zcat | grep -m1 '^Filename: luci-app-store.*\.ipk$' | sed -n -e 's/^Filename: \(.\+\)$/\1/p')
|
||||
|
||||
[ -n "$IPK" ] || exit 1
|
||||
|
||||
$FCURL "$ISTORE_REPO/$IPK" | tar -xzO ./data.tar.gz | tar -xzO ./bin/is-opkg >/tmp/is-opkg
|
||||
|
||||
[ -s "/tmp/is-opkg" ] || exit 1
|
||||
|
||||
chmod 755 /tmp/is-opkg
|
||||
/tmp/is-opkg update
|
||||
# /tmp/is-opkg install taskd
|
||||
/tmp/is-opkg opkg install --force-reinstall luci-lib-taskd luci-lib-xterm
|
||||
/tmp/is-opkg opkg install --force-reinstall luci-app-store || exit $?
|
||||
[ -s "/etc/init.d/tasks" ] || /tmp/is-opkg opkg install --force-reinstall taskd
|
||||
[ -s "/usr/lib/lua/luci/cbi.lua" ] || /tmp/is-opkg opkg install luci-compat >/dev/null 2>&1
|
||||
# 换源
|
||||
sed -i 's/istore.linkease.com/istore.istoreos.com/g' /bin/is-opkg
|
||||
sed -i 's/istore.linkease.com/istore.istoreos.com/g' /etc/opkg/compatfeeds.conf
|
||||
sed -i 's/istore.linkease.com/istore.istoreos.com/g' /www/luci-static/istore/index.js
|
||||
}
|
||||
|
||||
do_istore
|
@ -1,118 +0,0 @@
|
||||
#!/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
336
zero3/op.sh
@ -1,336 +0,0 @@
|
||||
#!/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.top/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.top/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.top/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.top/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.top/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.top/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
|
264
zero3/pi.sh
264
zero3/pi.sh
@ -10,7 +10,6 @@ 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"; }
|
||||
|
||||
|
||||
# 检查是否以 root 用户身份运行
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
green "注意!输入密码过程不显示*号属于正常现象"
|
||||
@ -20,40 +19,33 @@ if [ "$(id -u)" -ne 0 ]; then
|
||||
exit $?
|
||||
fi
|
||||
|
||||
# 设置全局快捷键p
|
||||
cp -f "$0" /usr/local/bin/p
|
||||
chmod +x /usr/local/bin/p
|
||||
|
||||
proxy=""
|
||||
if [ $# -gt 0 ]; then
|
||||
proxy="https://mirror.ghproxy.com/"
|
||||
fi
|
||||
|
||||
declare -a menu_options
|
||||
declare -A commands
|
||||
menu_options=(
|
||||
"更新系统软件包"
|
||||
"安装docker"
|
||||
"安装并启动文件管理器FileBrowser"
|
||||
"设置文件管理器开机自启动"
|
||||
"安装1panel面板管理工具"
|
||||
"查看1panel用户信息"
|
||||
"Sun-Panel导航面板"
|
||||
"安装alist"
|
||||
"安装小雅alist"
|
||||
"安装小雅转存清理工具"
|
||||
"安装小雅tvbox"
|
||||
"使用docker-compose部署小雅全家桶(建议x86-64设备)"
|
||||
"群晖6.2系统安装docker-compose(x86-64)"
|
||||
"修改阿里云盘Token(32位)"
|
||||
"修改阿里云盘OpenToken(335位)"
|
||||
"修改小雅转存文件夹ID(40位)"
|
||||
"安装内网穿透工具Cpolar"
|
||||
"安装盒子助手docker版"
|
||||
"安装特斯拉伴侣TeslaMate"
|
||||
"安装CasaOS面板"
|
||||
"安装内网穿透工具DDNSTO"
|
||||
"更新脚本"
|
||||
)
|
||||
|
||||
commands=(
|
||||
["更新系统软件包"]="update_system_packages"
|
||||
["安装docker"]="install_docker"
|
||||
["安装并启动文件管理器FileBrowser"]="install_filemanager"
|
||||
["设置文件管理器开机自启动"]="start_filemanager"
|
||||
["安装1panel面板管理工具"]="install_1panel_on_linux"
|
||||
@ -68,13 +60,6 @@ commands=(
|
||||
["安装盒子助手docker版"]="install_wukongdaily_box"
|
||||
["安装CasaOS面板"]="install_casaos"
|
||||
["更新脚本"]="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"
|
||||
["Sun-Panel导航面板"]="install_sun_panel"
|
||||
|
||||
)
|
||||
|
||||
# 更新系统软件包
|
||||
@ -85,22 +70,6 @@ update_system_packages() {
|
||||
green "Updating system packages..."
|
||||
sudo apt update
|
||||
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)
|
||||
}
|
||||
|
||||
# 安装文件管理器
|
||||
@ -180,30 +149,32 @@ install_filemanager() {
|
||||
green "Aborted, unsupported or unknown OS: $uname"
|
||||
return 6
|
||||
fi
|
||||
green "正在下载文件管理器($filemanager_os/$filemanager_arch) 请稍等..."
|
||||
green "Downloading File Browser for $filemanager_os/$filemanager_arch..."
|
||||
if type -p curl >/dev/null 2>&1; then
|
||||
net_getter="curl -fSL -#"
|
||||
net_getter="curl -fsSL"
|
||||
elif type -p wget >/dev/null 2>&1; then
|
||||
net_getter="wget -O-"
|
||||
net_getter="wget -qO-"
|
||||
else
|
||||
green "Aborted, could not find curl or wget"
|
||||
return 7
|
||||
fi
|
||||
filemanager_file="${filemanager_os}-$filemanager_arch-filebrowser$filemanager_dl_ext"
|
||||
filemanager_url="https://cafe.cpolar.top/wkdaily/filebrowser/raw/branch/main/$filemanager_file"
|
||||
|
||||
filemanager_url="${proxy}https://github.com/filebrowser/filebrowser/releases/download/v2.28.0/$filemanager_file"
|
||||
echo "$filemanager_url"
|
||||
|
||||
# Use $PREFIX for compatibility with Termux on Android
|
||||
rm -rf "$PREFIX/tmp/$filemanager_file"
|
||||
|
||||
${net_getter} "$filemanager_url" >"$PREFIX/tmp/$filemanager_file"
|
||||
|
||||
green "下载完成 正在解压..."
|
||||
green "Extracting..."
|
||||
case "$filemanager_file" in
|
||||
*.zip) unzip -o "$PREFIX/tmp/$filemanager_file" "$filemanager_bin" -d "$PREFIX/tmp/" ;;
|
||||
*.tar.gz) tar -xzf "$PREFIX/tmp/$filemanager_file" -C "$PREFIX/tmp/" "$filemanager_bin" ;;
|
||||
esac
|
||||
chmod +x "$PREFIX/tmp/$filemanager_bin"
|
||||
|
||||
green "Putting filemanager in $install_path (may require password)"
|
||||
$sudo_cmd mv "$PREFIX/tmp/$filemanager_bin" "$install_path/$filemanager_bin"
|
||||
if setcap_cmd=$(PATH+=$PATH:/sbin type -p setcap); then
|
||||
$sudo_cmd $setcap_cmd cap_net_bind_service=+ep "$install_path/$filemanager_bin"
|
||||
@ -211,9 +182,8 @@ install_filemanager() {
|
||||
$sudo_cmd rm -- "$PREFIX/tmp/$filemanager_file"
|
||||
|
||||
if type -p $filemanager_bin >/dev/null 2>&1; then
|
||||
light_magenta "不依赖于docker的 文件管理器安装成功"
|
||||
green "Successfully installed"
|
||||
trap ERR
|
||||
start_filemanager
|
||||
return 0
|
||||
else
|
||||
red "Something went wrong, File Browser is not in your path"
|
||||
@ -230,32 +200,11 @@ start_filemanager() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Add configuration file generation and editing
|
||||
$sudo_cmd mkdir -p /etc/filebrowser
|
||||
$sudo_cmd touch /etc/filebrowser/.filebrowser.json
|
||||
$sudo_cmd chown $(id -u):$(id -g) /etc/filebrowser/.filebrowser.json
|
||||
|
||||
# Set the desired port
|
||||
desired_port="38080"
|
||||
cat >/etc/filebrowser/.filebrowser.json <<EOF
|
||||
{
|
||||
"port": "$desired_port",
|
||||
"root": "/etc/filebrowser",
|
||||
"database": "/etc/filebrowser/filebrowser.db",
|
||||
"auth": {
|
||||
"username": "admin",
|
||||
"password": "admin"
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
green "设置文件管理器的端口为: $desired_port"
|
||||
|
||||
# 启动 filebrowser 文件管理器
|
||||
green "启动 filebrowser 文件管理器..."
|
||||
echo "启动 filebrowser 文件管理器..."
|
||||
|
||||
# 使用 nohup 和输出重定向,记录启动日志到 filebrowser.log 文件中
|
||||
nohup sudo filebrowser -r / --address 0.0.0.0 --port $desired_port >filebrowser.log 2>&1 &
|
||||
nohup sudo filebrowser -r / --address 0.0.0.0 --port 8080 >filebrowser.log 2>&1 &
|
||||
|
||||
# 检查 filebrowser 是否成功启动
|
||||
if [ $? -ne 0 ]; then
|
||||
@ -264,59 +213,22 @@ EOF
|
||||
fi
|
||||
local host_ip
|
||||
host_ip=$(hostname -I | awk '{print $1}')
|
||||
green "filebrowser 文件管理器已启动,可以通过 http://${host_ip}:${desired_port} 访问"
|
||||
green "登录用户名:admin"
|
||||
green "默认密码:admin(请尽快修改密码)"
|
||||
# 创建 Systemd 服务文件
|
||||
cat >/etc/systemd/system/filebrowser.service <<EOF
|
||||
[Unit]
|
||||
Description=File Browser Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
ExecStart=/usr/local/bin/filebrowser -r / --address 0.0.0.0 --port ${desired_port}
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
echo "filebrowser 文件管理器已启动,可以通过 http://${host_ip}:8080 访问"
|
||||
echo "登录用户名:admin"
|
||||
echo "默认密码:admin(请尽快修改密码)"
|
||||
sudo wget -O /etc/systemd/system/filebrowser.service ${proxy}https://raw.githubusercontent.com/wukongdaily/OrangePiShell/master/filebrowser.service
|
||||
sudo chmod +x /etc/systemd/system/filebrowser.service
|
||||
sudo systemctl daemon-reload # 重新加载systemd配置
|
||||
sudo systemctl start filebrowser.service # 启动服务
|
||||
sudo systemctl enable filebrowser.service # 设置开机启动
|
||||
sudo systemctl restart NetworkManager # 重启网络 保证hostname生效
|
||||
yellow "已设置文件管理器开机自启动,下次开机可直接访问文件管理器"
|
||||
|
||||
SCRIPT_PATH="/usr/trim/bin/show_startup_info.sh"
|
||||
# 判断脚本是否存在
|
||||
if [ ! -f "$SCRIPT_PATH" ]; then
|
||||
return 1
|
||||
fi
|
||||
HOST_NAME=$(hostname)
|
||||
cp "$SCRIPT_PATH" "${SCRIPT_PATH}.bak"
|
||||
# 在飞牛OS开机命令行界面插入Filebrowser地址和端口信息
|
||||
INSERT_INFO="Filebrowser Web console: http://$HOST_NAME:$desired_port or http://${host_ip}:${desired_port}\n"
|
||||
sed -i "/^Filebrowser Web console/d" "$SCRIPT_PATH"
|
||||
sed -i "/INFO_CONTENT=/a $INSERT_INFO" "$SCRIPT_PATH"
|
||||
light_magenta "文件管理器的访问地址和端口 已追加到飞牛OS开机命令行界面 预览如下"
|
||||
bash "$SCRIPT_PATH"
|
||||
cat /etc/issue
|
||||
|
||||
echo "正在设置文件管理器开机自启动"
|
||||
}
|
||||
|
||||
# 安装1panel面板
|
||||
install_1panel_on_linux() {
|
||||
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/"
|
||||
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"
|
||||
else
|
||||
red "未安装1panel"
|
||||
@ -359,7 +271,7 @@ install_xiaoya_alist() {
|
||||
阿里云盘转存目录folder id: https://www.aliyundrive.com/s/rP9gP3h9asE
|
||||
'
|
||||
# 调用修改后的脚本
|
||||
bash -c "$(curl https://cafe.cpolar.top/wkdaily/zero3/raw/branch/main/xiaoya/xiaoya.sh)"
|
||||
bash -c "$(curl https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/xiaoya/xiaoya.sh)"
|
||||
# 检查xiaoyaliu/alist 是否运行,如果运行了 则提示下面的信息,否则退出
|
||||
if ! docker ps | grep -q "xiaoyaliu/alist"; then
|
||||
echo "Error: xiaoyaliu/alist Docker 容器未运行"
|
||||
@ -515,7 +427,7 @@ install_wukongdaily_box() {
|
||||
local host_ip
|
||||
host_ip=$(hostname -I | awk '{print $1}')
|
||||
green "盒子助手docker版已启动,可以通过 http://${host_ip}:2288 验证是否安装成功"
|
||||
green "还可以通过 ssh root@${host_ip} -p 2299 连接到容器内 执行 ./tv.sh 使用该工具 ssh密码password"
|
||||
green "还可以通过 ssh ${host_ip} -p 2299 连接到容器内 执行 ./tv.sh 使用该工具"
|
||||
green "文档和教学视频:https://www.youtube.com/watch?v=xAk-3TxeXxQ \n https://www.bilibili.com/video/BV1Rm411o78P"
|
||||
fi
|
||||
}
|
||||
@ -527,142 +439,30 @@ install_casaos() {
|
||||
|
||||
# 更新自己
|
||||
update_scripts() {
|
||||
wget -O pi.sh https://cafe.cpolar.top/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,现在将执行新脚本。"
|
||||
./pi.sh
|
||||
./pi.sh ${proxy}
|
||||
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.top/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.top/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.top/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.top/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
|
||||
}
|
||||
|
||||
install_sun_panel() {
|
||||
docker run -d --restart=always -p 3002:3002 \
|
||||
-v ~/docker_data/sun-panel/conf:/app/conf \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
--name sun-panel \
|
||||
hslr/sun-panel:latest
|
||||
if ! docker ps | grep -q "hslr/sun-panel"; then
|
||||
echo "Error: sun-panel 未运行成功"
|
||||
else
|
||||
local host_ip
|
||||
host_ip=$(hostname -I | awk '{print $1}')
|
||||
green "sun-panel已启动,可以通过 http://${host_ip}:3002 验证是否安装成功"
|
||||
green "默认用户名: admin@sun.cc"
|
||||
green "默认密码: 12345678"
|
||||
fi
|
||||
}
|
||||
|
||||
show_menu() {
|
||||
|
||||
clear
|
||||
greenline "————————————————————————————————————————————————————"
|
||||
echo '
|
||||
*********** DIY docker轻服务器 ***************
|
||||
环境: (Ubuntu/Debian/synology etc)
|
||||
脚本作用:快速部署一个省电无感的小透明轻服务器'
|
||||
环境:orange pi zero 3 (Ubuntu/debian)
|
||||
脚本作用:快速部署一个省电无感的小透明轻服务器
|
||||
--- Made by wukong with YOU ---'
|
||||
echo -e " https://github.com/wukongdaily/OrangePiShell"
|
||||
greenline "————————————————————————————————————————————————————"
|
||||
yellow "再次运行输入 p 即可调用本脚本"
|
||||
echo "请选择操作:"
|
||||
|
||||
# 高亮菜单项
|
||||
special_items=("安装docker" "安装1panel面板管理工具" "安装小雅tvbox" "安装特斯拉伴侣TeslaMate" "安装盒子助手docker版" "安装内网穿透工具Cpolar" "Sun-Panel导航面板")
|
||||
# 特殊处理的项数组
|
||||
special_items=("")
|
||||
for i in "${!menu_options[@]}"; do
|
||||
if [[ " ${special_items[*]} " =~ " ${menu_options[i]} " ]]; then
|
||||
# 如果当前项在特殊处理项数组中,使用特殊颜色
|
||||
cyan "$((i + 1)). ${menu_options[i]}"
|
||||
highlight "$((i + 1)). ${menu_options[i]}"
|
||||
else
|
||||
# 否则,使用普通格式
|
||||
echo "$((i + 1)). ${menu_options[i]}"
|
||||
|
Loading…
Reference in New Issue
Block a user