├── fnOS ├── ip-tool.yml ├── libretv.yml ├── lucky.yml ├── yesplaymusic.yml ├── frpc.yml ├── lyricapi.yml ├── php-epg.yml ├── npc.yml ├── synctv.yml ├── taoSync.yml ├── verysync.yml ├── qiandao.yml ├── zerotier.yml ├── newsnow.yml ├── v2raya.yml ├── aipan.yml ├── tailscale.yml ├── mediago.yml ├── navidrome.yml ├── dpanel.yml ├── qinglong.yml ├── reader.yml ├── godoos.yml ├── homebox.yml ├── istoreos.yml ├── babybuddy.yml ├── emby.yml ├── sun-panel.yml ├── music-tag-web.yml ├── vertex.yml ├── moontv.yml ├── cloudsaver.yml ├── iptv-api.yml ├── vscode.yml ├── homeassistant.yml ├── alist-strm.yml ├── watchtower.yml ├── dockge.yml ├── ollama.yml ├── vaultwarden.yml ├── xiaoaimusic.yml ├── openlist.yml ├── wallos.yml ├── cloud189.yml ├── komga.yml ├── metatube.yml ├── postgres.yml ├── mysql.yml ├── lsky-pro.yml ├── mariadb.yml ├── jellyfin.yml ├── hanime-server.yml ├── qbittorrent.yml ├── jackett.yml ├── emulatorjs.yml ├── icloudpd.yml ├── clouddrive2.yml ├── rustdesk-server.yml ├── open-webui.yml ├── firefox.yml ├── chinesesubfinder.yml ├── kkfileview.yml ├── xunlei.yml ├── moviepilot.yml ├── iyuuplus.yml ├── transmission.yml ├── mdcx.yml ├── halo.yml ├── nastool.yml ├── 1panel.yml ├── siyuan-note-unlock.yml ├── wechat.yml ├── jellyfin-library-poster.yml ├── wps-office.yml ├── stirling-pdf.yml ├── upsnap.yml ├── teamspeak.yml ├── cashbook.yml ├── ezbookkeeping.yml ├── mtphotos.yml ├── bitmagnet.yml ├── immich.yml ├── safeline.yml └── all-in-one.yml ├── README.md └── Last_Three_Service_Package_Free.sh /fnOS/ip-tool.yml: -------------------------------------------------------------------------------- 1 | services: 2 | ip-tool: 3 | image: jason5ng32/myip:latest 4 | container_name: ip-tool 5 | ports: 6 | - 27005:18966 7 | restart: always 8 | network_mode: bridge 9 | -------------------------------------------------------------------------------- /fnOS/libretv.yml: -------------------------------------------------------------------------------- 1 | services: 2 | libretv: 3 | image: bestzwei/libretv:latest 4 | container_name: libretv 5 | ports: 6 | - 20035:80 7 | restart: always 8 | network_mode: bridge 9 | -------------------------------------------------------------------------------- /fnOS/lucky.yml: -------------------------------------------------------------------------------- 1 | services: 2 | lucky: 3 | image: gdy666/lucky:latest 4 | container_name: lucky 5 | volumes: 6 | - /vol1/1000/Docker/lucky:/goodluck 7 | restart: always 8 | network_mode: host 9 | -------------------------------------------------------------------------------- /fnOS/yesplaymusic.yml: -------------------------------------------------------------------------------- 1 | services: 2 | yesplaymusic: 3 | image: fogforest/yesplaymusic:latest 4 | container_name: yesplaymusic 5 | ports: 6 | - 21015:80 7 | restart: always 8 | network_mode: bridge 9 | -------------------------------------------------------------------------------- /fnOS/frpc.yml: -------------------------------------------------------------------------------- 1 | services: 2 | frpc: 3 | image: snowdreamtech/frpc:latest 4 | container_name: frpc 5 | volumes: 6 | - /vol1/1000/Frpc:/etc/frp 7 | command: -c /etc/frp/frpc.ini 8 | restart: always 9 | network_mode: host 10 | -------------------------------------------------------------------------------- /fnOS/lyricapi.yml: -------------------------------------------------------------------------------- 1 | services: 2 | lyricapi: 3 | image: hisatri/lyricapi:latest 4 | container_name: lyricapi 5 | ports: 6 | - 21010:28883 7 | volumes: 8 | - /vol1/1000/Music:/music 9 | restart: always 10 | network_mode: bridge 11 | -------------------------------------------------------------------------------- /fnOS/php-epg.yml: -------------------------------------------------------------------------------- 1 | services: 2 | php-epg: 3 | image: taksss/php-epg:latest 4 | container_name: php-epg 5 | ports: 6 | - 5678:80 7 | volumes: 8 | - /vol1/1000/Docker/epg:/htdocs/data 9 | restart: always 10 | network_mode: bridge 11 | -------------------------------------------------------------------------------- /fnOS/npc.yml: -------------------------------------------------------------------------------- 1 | services: 2 | npc: 3 | image: yisier1/npc:latest 4 | container_name: npc 5 | volumes: 6 | - /vol1/1000/Docker/npc:/conf 7 | command: -server=127.0.0.1:8024 -vkey=自行填写密钥 -type=tcp 8 | restart: always 9 | network_mode: host 10 | -------------------------------------------------------------------------------- /fnOS/synctv.yml: -------------------------------------------------------------------------------- 1 | services: 2 | synctv: 3 | image: synctvorg/synctv:latest 4 | container_name: synctv 5 | ports: 6 | - 20040:8080 7 | volumes: 8 | - /vol1/1000/Docker/synctv:/root/.synctv 9 | restart: always 10 | network_mode: bridge 11 | -------------------------------------------------------------------------------- /fnOS/taoSync.yml: -------------------------------------------------------------------------------- 1 | services: 2 | taoSync: 3 | image: dr34m/tao-sync:latest 4 | container_name: taoSync 5 | ports: 6 | - 30045:8023 7 | volumes: 8 | - /vol1/1000/Docker/taoSync:/app/data 9 | restart: always 10 | network_mode: bridge 11 | -------------------------------------------------------------------------------- /fnOS/verysync.yml: -------------------------------------------------------------------------------- 1 | services: 2 | verysync: 3 | image: jonnyan404/verysync:latest 4 | container_name: verysync 5 | ports: 6 | - 26010:8886 7 | volumes: 8 | - /vol1/1000/Synchronous:/data 9 | restart: always 10 | network_mode: bridge 11 | -------------------------------------------------------------------------------- /fnOS/qiandao.yml: -------------------------------------------------------------------------------- 1 | services: 2 | qiandao: 3 | image: qdtoday/qd:latest 4 | container_name: qiandao 5 | ports: 6 | - 30035:80 7 | volumes: 8 | - /vol1/1000/Docker/qiandao/:/usr/src/app/config 9 | restart: always 10 | network_mode: bridge 11 | -------------------------------------------------------------------------------- /fnOS/zerotier.yml: -------------------------------------------------------------------------------- 1 | services: 2 | zerotier: 3 | image: zerotier/zerotier:latest 4 | container_name: zerotier 5 | privileged: true 6 | volumes: 7 | - /vol1/1000/Docker/zerotier:/var/lib/zerotier-one 8 | restart: always 9 | network_mode: host 10 | -------------------------------------------------------------------------------- /fnOS/newsnow.yml: -------------------------------------------------------------------------------- 1 | services: 2 | newsnow: 3 | image: ghcr.io/ourongxing/newsnow:latest 4 | container_name: newsnow 5 | ports: 6 | - 30025:4444 7 | environment: 8 | - INIT_TABLE=true 9 | - ENABLE_CACHE=true 10 | network_mode: bridge 11 | restart: always 12 | -------------------------------------------------------------------------------- /fnOS/v2raya.yml: -------------------------------------------------------------------------------- 1 | services: 2 | v2raya: 3 | image: v2raya/v2raya:latest 4 | container_name: v2raya 5 | privileged: true 6 | ports: 7 | - 27010:2017 8 | volumes: 9 | - /vol1/1000/Docker/v2raya:/etc/v2raya 10 | restart: always 11 | network_mode: bridge 12 | -------------------------------------------------------------------------------- /fnOS/aipan.yml: -------------------------------------------------------------------------------- 1 | services: 2 | aipan: 3 | image: unilei/aipan-netdisk-search-simple:latest 4 | container_name: aipan 5 | ports: 6 | - 24000:3000 7 | environment: 8 | - NUXT_HOST="0.0.0.0" 9 | - NUXT_PORT=3000 10 | restart: always 11 | network_mode: bridge 12 | -------------------------------------------------------------------------------- /fnOS/tailscale.yml: -------------------------------------------------------------------------------- 1 | services: 2 | tailscale: 3 | image: tailscale/tailscale:latest 4 | container_name: tailscale 5 | environment: 6 | - TS_AUTHKEY=密钥 7 | - TS_STATE_DIR=/var/lib/tailscale 8 | - TS_ROUTES=127.0.0.1/24 9 | restart: always 10 | network_mode: host 11 | -------------------------------------------------------------------------------- /fnOS/mediago.yml: -------------------------------------------------------------------------------- 1 | services: 2 | mediago: 3 | image: registry.cn-beijing.aliyuncs.com/caorushizi/mediago:latest 4 | container_name: mediago 5 | ports: 6 | - 28015:8899 7 | volumes: 8 | - /vol1/1000/Downloads:/root/mediago 9 | restart: always 10 | network_mode: bridge 11 | -------------------------------------------------------------------------------- /fnOS/navidrome.yml: -------------------------------------------------------------------------------- 1 | services: 2 | navidrome: 3 | image: deluan/navidrome:latest 4 | container_name: navidrome 5 | ports: 6 | - 21000:4533 7 | volumes: 8 | - /vol1/1000/Docker/navidrome:/data 9 | - /vol1/1000/Music:/music 10 | restart: always 11 | network_mode: bridge 12 | -------------------------------------------------------------------------------- /fnOS/dpanel.yml: -------------------------------------------------------------------------------- 1 | services: 2 | dpanel: 3 | image: dpanel/dpanel:latest 4 | container_name: dpanel 5 | ports: 6 | - 30060:8080 7 | volumes: 8 | - /vol1/1000/Docker/dpanel:/dpanel 9 | - /var/run/docker.sock:/var/run/docker.sock 10 | restart: always 11 | network_mode: bridge 12 | -------------------------------------------------------------------------------- /fnOS/qinglong.yml: -------------------------------------------------------------------------------- 1 | services: 2 | qinglong: 3 | image: whyour/qinglong:latest 4 | container_name: qinglong 5 | ports: 6 | - 30015:5700 7 | volumes: 8 | - /vol1/1000/Docker/qinglong:/ql/data 9 | environment: 10 | - QlPort=5700 11 | restart: always 12 | network_mode: bridge 13 | -------------------------------------------------------------------------------- /fnOS/reader.yml: -------------------------------------------------------------------------------- 1 | services: 2 | reader: 3 | image: hectorqin/reader:latest 4 | container_name: reader 5 | ports: 6 | - 22000:8080 7 | volumes: 8 | - /vol1/1000/Docker/reader/log:/log 9 | - /vol1/1000/Docker/reader/storage:/storage 10 | restart: always 11 | network_mode: bridge 12 | -------------------------------------------------------------------------------- /fnOS/godoos.yml: -------------------------------------------------------------------------------- 1 | services: 2 | godoos: 3 | image: godoos/godoos:latest 4 | container_name: godoos 5 | ports: 6 | - 26045:56780 7 | volumes: 8 | - /vol1/1000/Docker/godoos:/root/.godoos/os 9 | environment: 10 | - TZ=Asia/Shanghai 11 | restart: always 12 | network_mode: bridge 13 | -------------------------------------------------------------------------------- /fnOS/homebox.yml: -------------------------------------------------------------------------------- 1 | services: 2 | homebox: 3 | image: hfhc1309/homebox-zh:latest 4 | container_name: homebox 5 | ports: 6 | - 25015:7745 7 | volumes: 8 | - /vol1/1000/Docker/homebox:/data/ 9 | environment: 10 | - TZ=Asia/Shanghai 11 | restart: always 12 | network_mode: bridge 13 | -------------------------------------------------------------------------------- /fnOS/istoreos.yml: -------------------------------------------------------------------------------- 1 | services: 2 | istoreos: 3 | image: fingerboy/istoreos-x86-64:latest 4 | container_name: istoreos 5 | privileged: true 6 | command: /sbin/init 7 | restart: always 8 | networks: 9 | macnet: 10 | ipv4_address: 127.0.0.1 11 | networks: 12 | macnet: 13 | external: true 14 | -------------------------------------------------------------------------------- /fnOS/babybuddy.yml: -------------------------------------------------------------------------------- 1 | services: 2 | babybuddy: 3 | image: linuxserver/babybuddy:latest 4 | container_name: babybuddy 5 | ports: 6 | - 25020:8000 7 | volumes: 8 | - /vol1/1000/Docker/babybuddy:/config 9 | environment: 10 | - TZ=Asia/Shanghai 11 | restart: always 12 | network_mode: bridge 13 | -------------------------------------------------------------------------------- /fnOS/emby.yml: -------------------------------------------------------------------------------- 1 | services: 2 | emby: 3 | image: amilys/embyserver:latest 4 | container_name: embyserver 5 | privileged: true 6 | ports: 7 | - 20015:8096 8 | volumes: 9 | - /vol1/1000/Docker/emby/config:/config 10 | - /vol1/1000/Video:/data 11 | restart: always 12 | network_mode: bridge 13 | -------------------------------------------------------------------------------- /fnOS/sun-panel.yml: -------------------------------------------------------------------------------- 1 | services: 2 | sun-panel: 3 | image: hslr/sun-panel:latest 4 | container_name: sun-panel 5 | ports: 6 | - 30005:3002 7 | volumes: 8 | - /vol1/1000/Docker/sun-panel:/app/conf 9 | - /var/run/docker.sock:/var/run/docker.sock 10 | restart: always 11 | network_mode: bridge 12 | -------------------------------------------------------------------------------- /fnOS/music-tag-web.yml: -------------------------------------------------------------------------------- 1 | services: 2 | music-tag-web: 3 | image: xhongc/music_tag_web:latest 4 | container_name: music-tag-web 5 | ports: 6 | - 21005:8001 7 | volumes: 8 | - /vol1/1000/Music:/app/media 9 | - /vol1/1000/Docker/music-tag-web:/app/data 10 | restart: always 11 | network_mode: bridge 12 | -------------------------------------------------------------------------------- /fnOS/vertex.yml: -------------------------------------------------------------------------------- 1 | services: 2 | vertex: 3 | image: lswl/vertex:latest 4 | container_name: vertex 5 | ports: 6 | - 30020:32110 7 | volumes: 8 | - /vol1/1000/Docker/vertex:/vertex 9 | environment: 10 | - PORT=32110 11 | - TZ=Asia/Shanghai 12 | restart: always 13 | network_mode: bridge 14 | -------------------------------------------------------------------------------- /fnOS/moontv.yml: -------------------------------------------------------------------------------- 1 | services: 2 | moontv: 3 | image: ghcr.io/senshinya/moontv:latest 4 | container_name: moontv 5 | ports: 6 | - 20050:3000 7 | # volumes: 8 | # - /vol1/1000/Docker/moontv/config.json:/app/config.json 9 | environment: 10 | - PASSWORD=password 11 | restart: always 12 | network_mode: bridge 13 | -------------------------------------------------------------------------------- /fnOS/cloudsaver.yml: -------------------------------------------------------------------------------- 1 | services: 2 | cloudsaver: 3 | image: jiangrui1994/cloudsaver:latest 4 | container_name: cloudsaver 5 | ports: 6 | - 24010:8008 7 | volumes: 8 | - /vol1/1000/Docker/cloudsaver/data:/app/data 9 | - /vol1/1000/Docker/cloudsaver/config:/app/config 10 | restart: always 11 | network_mode: bridge 12 | -------------------------------------------------------------------------------- /fnOS/iptv-api.yml: -------------------------------------------------------------------------------- 1 | services: 2 | iptv-api: 3 | image: guovern/iptv-api:latest 4 | container_name: iptv-api 5 | ports: 6 | - 20020:8000 7 | volumes: 8 | - /vol1/1000/Docker/iptv-api/config:/iptv-api/config 9 | - /vol1/1000/Docker/iptv-api/output:/iptv-api/output 10 | restart: always 11 | network_mode: bridge 12 | -------------------------------------------------------------------------------- /fnOS/vscode.yml: -------------------------------------------------------------------------------- 1 | services: 2 | vscode: 3 | image: linuxserver/code-server:latest 4 | container_name: vscode 5 | ports: 6 | - 30055:8443 7 | volumes: 8 | - /vol1/1000/Docker/vscode:/config 9 | environment: 10 | - TZ=Asia/Shanghai 11 | - PASSWORD=password 12 | restart: always 13 | network_mode: bridge 14 | -------------------------------------------------------------------------------- /fnOS/homeassistant.yml: -------------------------------------------------------------------------------- 1 | services: 2 | homeassistant: 3 | image: homeassistant/home-assistant:latest 4 | container_name: homeassistant 5 | ports: 6 | - 25030:8123 7 | volumes: 8 | - /vol1/1000/Docker/homeassistant:/config 9 | environment: 10 | - TZ=Asia/Shanghai 11 | restart: always 12 | network_mode: bridge 13 | -------------------------------------------------------------------------------- /fnOS/alist-strm.yml: -------------------------------------------------------------------------------- 1 | services: 2 | alist-strm: 3 | image: itefuir/alist-strm:latest 4 | container_name: alist-strm 5 | stdin_open: true 6 | tty: true 7 | ports: 8 | - 30050:5000 9 | volumes: 10 | - /vol1/1000/Docker/alist-strm:/config 11 | - /vol1/1000/Video:/Video 12 | restart: always 13 | network_mode: bridge 14 | -------------------------------------------------------------------------------- /fnOS/watchtower.yml: -------------------------------------------------------------------------------- 1 | services: 2 | watchtower: 3 | image: containrrr/watchtower:latest 4 | container_name: watchtower 5 | volumes: 6 | - /var/run/docker.sock:/var/run/docker.sock 7 | environment: 8 | - WATCHTOWER_RUN_ONCE=true 9 | - TZ=Asia/Shanghai 10 | restart: always 11 | command: --schedule "0 0 20 * * 0" --cleanup 12 | -------------------------------------------------------------------------------- /fnOS/dockge.yml: -------------------------------------------------------------------------------- 1 | services: 2 | dockge: 3 | image: louislam/dockge:1 4 | container_name: dockge 5 | ports: 6 | - 30040:5001 7 | volumes: 8 | - /vol1/1000/Docker/dockge/data:/app/data 9 | - /vol1/1000/Docker/dockge:/home/stacks 10 | - /var/run/docker.sock:/var/run/docker.sock 11 | restart: always 12 | network_mode: bridge 13 | -------------------------------------------------------------------------------- /fnOS/ollama.yml: -------------------------------------------------------------------------------- 1 | services: 2 | ollama: 3 | image: ollama/ollama:latest 4 | container_name: ollama 5 | ports: 6 | - 26025:11434 7 | volumes: 8 | - /vol1/1000/Docker/ollama:/root/.ollama 9 | - /vol1/1000/Docker/ollama/models:/data/models 10 | environment: 11 | - TZ=Asia/Shanghai 12 | restart: always 13 | network_mode: bridge 14 | -------------------------------------------------------------------------------- /fnOS/vaultwarden.yml: -------------------------------------------------------------------------------- 1 | services: 2 | vaultwarden: 3 | image: vaultwarden/server:latest 4 | container_name: vaultwarden 5 | ports: 6 | - 30080:80 7 | volumes: 8 | - /vol1/1000/Docker/vaultwarden:/data 9 | environment: 10 | - DOMAIN=https://vaultwarden.example.com 11 | - SIGNUPS_ALLOWED=true 12 | restart: always 13 | network_mode: bridge 14 | -------------------------------------------------------------------------------- /fnOS/xiaoaimusic.yml: -------------------------------------------------------------------------------- 1 | services: 2 | xiaoaimusic: 3 | image: hanxi/xiaomusic:latest 4 | container_name: xiaoaimusic 5 | ports: 6 | - 25025:8090 7 | volumes: 8 | - /vol1/1000/Docker/xiaoaimusic:/app/conf 9 | - /vol1/1000/Music:/app/music 10 | environment: 11 | - XIAOMUSIC_PUBLIC_PORT=8090 12 | restart: always 13 | network_mode: bridge 14 | -------------------------------------------------------------------------------- /fnOS/openlist.yml: -------------------------------------------------------------------------------- 1 | services: 2 | openlist: 3 | image: openlistteam/openlist:v4.0.4-aio 4 | container_name: alist 5 | ports: 6 | - 24005:5244 7 | volumes: 8 | - /vol1/1000/Docker/alist:/opt/alist/data 9 | environment: 10 | - PUID=1000 11 | - PGID=1001 12 | - UMASK=022 13 | - TZ=Asia/Shanghai 14 | restart: always 15 | network_mode: bridge 16 | -------------------------------------------------------------------------------- /fnOS/wallos.yml: -------------------------------------------------------------------------------- 1 | services: 2 | wallos: 3 | image: bellamy/wallos:latest 4 | container_name: wallos 5 | ports: 6 | - 25010:80 7 | volumes: 8 | - /vol1/1000/Docker/wallos/data:/var/www/html/db 9 | - /vol1/1000/Docker/wallos/logos:/var/www/html/images/uploads/logos 10 | environment: 11 | - TZ=Asia/Shanghai 12 | restart: always 13 | network_mode: bridge 14 | -------------------------------------------------------------------------------- /fnOS/cloud189.yml: -------------------------------------------------------------------------------- 1 | services: 2 | cloud189: 3 | image: xia1307/cloud189-auto-save:latest 4 | container_name: cloud189 5 | ports: 6 | - 20050:3000 7 | volumes: 8 | - /vol1/1000/Docker/cloud189/data:/home/data 9 | - /vol1/1000/Docker/cloud189/strm:/home/strm 10 | environment: 11 | - PUID=0 12 | - PGID=0 13 | restart: always 14 | network_mode: bridge 15 | -------------------------------------------------------------------------------- /fnOS/komga.yml: -------------------------------------------------------------------------------- 1 | services: 2 | komga: 3 | image: gotson/komga:latest 4 | container_name: komga 5 | ports: 6 | - 22005:25600 7 | volumes: 8 | - /vol1/1000/Docker/komga/config:/config 9 | - /vol1/1000/Docker/komga/data:/data 10 | environment: 11 | - PUID=1000 12 | - PGID=1001 13 | - TZ=Asia/Shanghai 14 | network_mode: bridge 15 | restart: always 16 | -------------------------------------------------------------------------------- /fnOS/metatube.yml: -------------------------------------------------------------------------------- 1 | services: 2 | metatube: 3 | image: ghcr.io/metatube-community/metatube-server:latest 4 | container_name: metatube 5 | ports: 6 | - 20030:8080 7 | environment: 8 | - PORT=8080 9 | - DB_MAX_IDLE_CONNS=0 10 | - DB_MAX_OPEN_CONNS=0 11 | - DB_PREPARED_STMT=0 12 | - DB_AUTO_MIGRATE=0 13 | restart: always 14 | network_mode: bridge 15 | -------------------------------------------------------------------------------- /fnOS/postgres.yml: -------------------------------------------------------------------------------- 1 | services: 2 | postgres: 3 | image: postgres:14 4 | container_name: postgres 5 | ports: 6 | - 29005:5432 7 | volumes: 8 | - /vol1/1000/Docker/postgres/data:/var/lib/postgresql/data 9 | environment: 10 | - POSTGRES_USER=admin 11 | - POSTGRES_PASSWORD=password 12 | - POSTGRES_DB=mydb 13 | restart: always 14 | network_mode: bridge 15 | -------------------------------------------------------------------------------- /fnOS/mysql.yml: -------------------------------------------------------------------------------- 1 | services: 2 | mysql: 3 | image: mysql:8.0 4 | container_name: mysql 5 | ports: 6 | - 29000:3306 7 | volumes: 8 | - /vol1/1000/Docker/mysql/data:/var/lib/mysql 9 | environment: 10 | - MYSQL_ROOT_PASSWORD=123456 11 | - MYSQL_DATABASE=mydb 12 | - MYSQL_USER=admin 13 | - MYSQL_PASSWORD=password 14 | restart: always 15 | network_mode: bridge 16 | -------------------------------------------------------------------------------- /fnOS/lsky-pro.yml: -------------------------------------------------------------------------------- 1 | services: 2 | lsky-pro: 3 | container_name: lsky-pro 4 | image: dko0/lsky-pro:latest 5 | ports: 6 | - 26040:80 7 | volumes: 8 | - /vol1/1000/Docker/lsky-pro:/var/www/html 9 | environment: 10 | - MYSQL_HOST=mysql 11 | - MYSQL_DATABASE=lsky-pro 12 | - MYSQL_USER=admin 13 | - MYSQL_PASSWORD=password 14 | restart: always 15 | network_mode: bridge 16 | -------------------------------------------------------------------------------- /fnOS/mariadb.yml: -------------------------------------------------------------------------------- 1 | services: 2 | mariadb: 3 | image: mariadb:latest 4 | container_name: mariadb 5 | ports: 6 | - 29010:3306 7 | volumes: 8 | - /vol1/1000/Docker/mariadb/data:/var/lib/mysql 9 | environment: 10 | MYSQL_ROOT_PASSWORD: 123456 11 | MYSQL_DATABASE: mydb 12 | MYSQL_USER: admin 13 | MYSQL_PASSWORD: password 14 | restart: always 15 | network_mode: bridge 16 | -------------------------------------------------------------------------------- /fnOS/jellyfin.yml: -------------------------------------------------------------------------------- 1 | services: 2 | jellyfin: 3 | image: nyanmisaka/jellyfin:latest 4 | container_name: jellyfin 5 | privileged: true 6 | devices: 7 | - /dev/dri:/dev/dri 8 | ports: 9 | - 20010:8096 10 | volumes: 11 | - /vol1/1000/Docker/jellyfin/config:/config 12 | - /vol1/1000/Docker/jellyfin/cache:/cache 13 | - /vol1/1000/Video:/video 14 | restart: always 15 | network_mode: bridge 16 | -------------------------------------------------------------------------------- /fnOS/hanime-server.yml: -------------------------------------------------------------------------------- 1 | services: 2 | hanime-server: 3 | image: heisenyu/hanime-server:latest 4 | container_name: hanime-server 5 | ports: 6 | - 20055:7788 7 | volumes: 8 | - /vol1/1000/Docker/hanime-server:/app/backend/db 9 | - /vol1/1000/Downloads:/app/backend/downloads 10 | environment: 11 | - USE_PROXY=true 12 | - PROXY_URL=http://127.0.0.1:80 13 | restart: always 14 | network_mode: bridge 15 | -------------------------------------------------------------------------------- /fnOS/qbittorrent.yml: -------------------------------------------------------------------------------- 1 | services: 2 | qbittorrent: 3 | image: linuxserver/qbittorrent:4.6.6 4 | container_name: qbittorrent 5 | ports: 6 | - 28000:28000 7 | volumes: 8 | - /vol1/1000/Docker/qbittorrent:/config 9 | - /vol1/1000/Video:/downloads 10 | environment: 11 | - PUID=1000 12 | - PGID=1001 13 | - TZ=Asia/Shanghai 14 | - WEBUI_PORT=28000 15 | restart: always 16 | network_mode: bridge 17 | -------------------------------------------------------------------------------- /fnOS/jackett.yml: -------------------------------------------------------------------------------- 1 | services: 2 | jackett: 3 | image: linuxserver/jackett:latest 4 | container_name: jackett 5 | ports: 6 | - 30030:9117 7 | volumes: 8 | - /vol1/1000/Docker/jackett/config:/config 9 | - /vol1/1000/Docker/jackett/downloads:/downloads 10 | environment: 11 | - PUID=1000 12 | - PGID=1001 13 | - TZ=Asia/Shanghai 14 | - AUTO_UPDATE=false 15 | restart: always 16 | network_mode: bridge 17 | -------------------------------------------------------------------------------- /fnOS/emulatorjs.yml: -------------------------------------------------------------------------------- 1 | services: 2 | emulatorjs: 3 | image: lscr.io/linuxserver/emulatorjs:latest 4 | container_name: emulatorjs 5 | ports: 6 | - 23000:3000 7 | - 23001:80 8 | volumes: 9 | - /vol1/1000/Docker/emulatorjs/config:/config 10 | - /vol1/1000/Docker/emulatorjs/data:/data 11 | environment: 12 | - PUID=1000 13 | - PGID=1001 14 | - TZ=Asia/Shanghai 15 | restart: always 16 | network_mode: bridge 17 | -------------------------------------------------------------------------------- /fnOS/icloudpd.yml: -------------------------------------------------------------------------------- 1 | services: 2 | icloudpd: 3 | image: icloudpd/icloudpd:latest 4 | container_name: icloudpd 5 | tty: true 6 | ports: 7 | - 24020:8080 8 | volumes: 9 | - /vol1/1000/Photos:/data 10 | environment: 11 | - TZ=Asia/Shanghai 12 | command: icloudpd --directory /data --username youemail@xx.xx --mfa-provider webui --domain cn --password-provider webui --watch-with-interval 3600 13 | restart: always 14 | network_mode: bridge 15 | -------------------------------------------------------------------------------- /fnOS/clouddrive2.yml: -------------------------------------------------------------------------------- 1 | services: 2 | clouddrive2: 3 | image: cloudnas/clouddrive2:latest 4 | container_name: clouddrive2 5 | privileged: true 6 | ports: 7 | - 24015:19798 8 | volumes: 9 | - /vol1/1000/Docker/clouddrive2:/Config 10 | - /vol1/1000/Cloud:/CloudNAS:shared 11 | - /vol1/1000/Video:/media:shared 12 | environment: 13 | - TZ=Asia/Shanghai 14 | - CLOUDDRIVE_HOME=/Config 15 | restart: always 16 | network_mode: bridge 17 | -------------------------------------------------------------------------------- /fnOS/rustdesk-server.yml: -------------------------------------------------------------------------------- 1 | services: 2 | rustdesk-server: 3 | image: rustdesk/rustdesk-server-s6:latest 4 | container_name: rustdesk-server 5 | ports: 6 | - 30065:21115 7 | - 30066:21116 8 | - 30066:21116/udp 9 | - 30067:21117 10 | - 30068:21118 11 | - 30069:21119 12 | environment: 13 | - RELAY=域名:端口 14 | - ENCRYPTED_ONLY=1 15 | volumes: 16 | - /vol1/1000/Docker/rustdesk:/data 17 | restart: always 18 | network_mode: bridge 19 | -------------------------------------------------------------------------------- /fnOS/open-webui.yml: -------------------------------------------------------------------------------- 1 | services: 2 | open-webui: 3 | image: ghcr.io/open-webui/open-webui:latest 4 | container_name: open-webui 5 | ports: 6 | - 26030:8080 7 | volumes: 8 | - /vol1/1000/Docker/open-webui:/app/backend/data 9 | environment: 10 | - ENABLE_OPENAI_API=False 11 | - OFFLINE_MODE=True 12 | - OLLAMA_BASE_URL=http://127.0.0.1:26025 13 | - USE_OLLAMA_DOCKER=False 14 | - TZ=Asia/Shanghai 15 | restart: always 16 | network_mode: bridge 17 | -------------------------------------------------------------------------------- /fnOS/firefox.yml: -------------------------------------------------------------------------------- 1 | services: 2 | firefox: 3 | image: jlesage/firefox:latest 4 | container_name: firefox 5 | ports: 6 | - 27000:5800 7 | volumes: 8 | - /vol1/1000/Docker/firefox/config:/config:rw 9 | - /vol1/1000/Docker/firefox/fonts:/usr/share/fonts 10 | - /vol1/1000/Downloads:/config/downloads 11 | environment: 12 | - USER_ID=1000 13 | - GROUP_ID=1001 14 | - UMASK=022 15 | - TZ=Asia/Shanghai 16 | restart: always 17 | network_mode: bridge 18 | -------------------------------------------------------------------------------- /fnOS/chinesesubfinder.yml: -------------------------------------------------------------------------------- 1 | services: 2 | chinesesubfinder: 3 | image: allanpk716/chinesesubfinder:latest 4 | container_name: chinesesubfinder 5 | ports: 6 | - 20025:19035 7 | volumes: 8 | - /vol1/1000/Docker/chinesesubfinder/config:/config 9 | - /vol1/1000/Docker/chinesesubfinder/cache:/app/cache 10 | - /vol1/1000/Video:/media 11 | environment: 12 | - PUID=1000 13 | - PGID=1001 14 | - TZ=Asia/Shanghai 15 | restart: always 16 | network_mode: bridge 17 | -------------------------------------------------------------------------------- /fnOS/kkfileview.yml: -------------------------------------------------------------------------------- 1 | services: 2 | kkfileview: 3 | image: pi4k8s/kkfileview:4.4.0 4 | container_name: kkfileview 5 | ports: 6 | - 26020:8012 7 | volumes: 8 | - /vol1/1000/Docker/kkfileview:/opt/kkFileView-4.4.0 9 | environment: 10 | - KK_OFFICE_PREVIEW_TYPE=pdf 11 | - KK_OFFICE_PREVIEW_SWITCH_DISABLED=true 12 | - KK_PDF_DOWNLOAD_DISABLE=true 13 | - KK_FILE_UPLOAD_ENABLED=false 14 | - KK_CONTEXT_PATH=/ 15 | restart: always 16 | network_mode: bridge 17 | -------------------------------------------------------------------------------- /fnOS/xunlei.yml: -------------------------------------------------------------------------------- 1 | services: 2 | xunlei: 3 | image: cnk3x/xunlei:latest 4 | container_name: xunlei 5 | privileged: true 6 | ports: 7 | - 28010:2345 8 | volumes: 9 | - /vol1/1000/Docker/xunlei:/xunlei/data 10 | - /vol1/1000/Downloads:/xunlei/downloads 11 | environment: 12 | - XL_GID=0 13 | - XL_UID=0 14 | - TZ=Asia/Shanghai 15 | - XL_DASHBOARD_USERNAME=admin 16 | - XL_DASHBOARD_PASSWORD=admin 17 | restart: always 18 | network_mode: bridge 19 | -------------------------------------------------------------------------------- /fnOS/moviepilot.yml: -------------------------------------------------------------------------------- 1 | services: 2 | moviepilot: 3 | image: jxxghp/moviepilot-v2:latest 4 | container_name: moviepilot 5 | ports: 6 | - 20005:3000 7 | volumes: 8 | - /vol1/1000/Video:/downloads 9 | - /vol1/1000/Docker/moviepilot:/config 10 | environment: 11 | - NGINX_PORT=3000 12 | - PORT=3001 13 | - PUID=1000 14 | - PGID=1001 15 | - UMASK=000 16 | - TZ=Asia/Shanghai 17 | - SUPERUSER=admin 18 | restart: always 19 | network_mode: bridge 20 | -------------------------------------------------------------------------------- /fnOS/iyuuplus.yml: -------------------------------------------------------------------------------- 1 | services: 2 | iyuuplus: 3 | image: iyuucn/iyuuplus:latest 4 | container_name: iyuuplus 5 | ports: 6 | - 30000:8780 7 | volumes: 8 | - /vol1/1000/Docker/iyuuplus/iyuu:/iyuu 9 | - /vol1/1000/Docker/iyuuplus/data:/data 10 | - /vol1/1000/Docker/qbittorrent/qBittorrent/BT_backup:/qb 11 | - /vol1/1000/Docker/transmission/torrents:/tr 12 | environment: 13 | - PUID=0 14 | - PGID=0 15 | - TZ=Asia/Shanghai 16 | restart: always 17 | network_mode: bridge 18 | -------------------------------------------------------------------------------- /fnOS/transmission.yml: -------------------------------------------------------------------------------- 1 | services: 2 | transmission: 3 | image: linuxserver/transmission:4.0.5 4 | container_name: transmission 5 | ports: 6 | - 28005:9091 7 | volumes: 8 | - /vol1/1000/Docker/transmission:/config 9 | - /vol1/1000/Video:/downloads 10 | environment: 11 | - PUID=1000 12 | - PGID=1001 13 | - TZ=Asia/Shanghai 14 | - TRANSMISSION_WEB_HOME=/config/webui/Transmission Theme 15 | - USER=root 16 | - PASS=root 17 | restart: always 18 | network_mode: bridge 19 | -------------------------------------------------------------------------------- /fnOS/mdcx.yml: -------------------------------------------------------------------------------- 1 | services: 2 | mdcx: 3 | image: stainless403/mdcx-builtin-gui-base:latest 4 | container_name: mdcx 5 | ports: 6 | - 20045:5800 7 | - 20046:5900 8 | volumes: 9 | - /vol1/1000/Docker/mdcx/config:/config 10 | - /vol1/1000/Docker/mdcx/mdcx-config:/mdcx-config 11 | - /vol1/1000/Docker/mdcx/logs:/app/log 12 | - /vol1/1000/Video:/data 13 | environment: 14 | - USER_ID=1000 15 | - GROUP_ID=1001 16 | - TZ=Asia/Shanghai 17 | restart: always 18 | network_mode: bridge 19 | -------------------------------------------------------------------------------- /fnOS/halo.yml: -------------------------------------------------------------------------------- 1 | services: 2 | halo: 3 | image: registry.fit2cloud.com/halo/halo:2.20.19 4 | container_name: halo 5 | ports: 6 | - 30075:8090 7 | volumes: 8 | - /vol1/1000/Docker/halo:/root/.halo2 9 | environment: 10 | - JVM_OPTS=-Xmx256m -Xms256m 11 | command: 12 | - --spring.r2dbc.url=r2dbc:pool:mysql://127.0.0.1:29000/halo 13 | - --spring.r2dbc.username=admin 14 | - --spring.r2dbc.password=password 15 | - --spring.sql.init.platform=mysql 16 | restart: always 17 | network_mode: bridge 18 | -------------------------------------------------------------------------------- /fnOS/nastool.yml: -------------------------------------------------------------------------------- 1 | services: 2 | nastool: 3 | image: hsuyelin/nas-tools:latest 4 | container_name: nastool 5 | ports: 6 | - 20000:3000 7 | volumes: 8 | - /vol1/1000/Docker/nastool:/config 9 | - /vol1/1000/Video:/downloads 10 | environment: 11 | - PUID=1000 12 | - PGID=1001 13 | - UMASK=022 14 | - NASTOOL_AUTO_UPDATE=false 15 | - NASTOOL_CN_UPDATE=false 16 | - REPO_URL=https://ghproxy.com/https://github.com/hsuyelin/nas-tools.git 17 | restart: always 18 | network_mode: bridge 19 | -------------------------------------------------------------------------------- /fnOS/1panel.yml: -------------------------------------------------------------------------------- 1 | services: 2 | 1panel: 3 | image: koryking/1panel:latest 4 | container_name: 1panel 5 | ports: 6 | - 30010:10086 7 | volumes: 8 | - /vol1/1000/Docker/1panel:/opt/1panel 9 | - /vol1/1000/:/vol1/1000/ 10 | - /var/run/docker.sock:/var/run/docker.sock 11 | environment: 12 | - TZ=Asia/Shanghai 13 | - PANEL_BASE_DIR=/opt/1panel 14 | - PANEL_PORT=10086 15 | - PANEL_ENTRANCE=123456 16 | - PANEL_USERNAME=admin 17 | - PANEL_PASSWORD=password 18 | network_mode: bridge 19 | restart: always 20 | -------------------------------------------------------------------------------- /fnOS/siyuan-note-unlock.yml: -------------------------------------------------------------------------------- 1 | services: 2 | siyuan-note-unlock: 3 | image: apkdv/siyuan-unlock:latest 4 | container_name: siyuan-note-unlock 5 | ports: 6 | - 26035:6806 7 | command: 8 | - --workspace=/siyuan/workspace/ 9 | - --accessAuthCode=100 10 | volumes: 11 | - /vol1/1000/Docker/siyuan-note-unlock:/siyuan/workspace 12 | environment: 13 | - PUID=1000 14 | - PGID=1001 15 | - UMASK=022 16 | - TZ=Asia/Shanghai 17 | - LANG=zh_CN.UTF-8 18 | - LC_ALL=zh_CN.UTF-8 19 | restart: always 20 | network_mode: bridge 21 | -------------------------------------------------------------------------------- /fnOS/wechat.yml: -------------------------------------------------------------------------------- 1 | services: 2 | wechat: 3 | image: ricwang/docker-wechat:latest 4 | container_name: wechat 5 | privileged: true 6 | ports: 7 | - 26005:5800 8 | - 26006:5900 9 | volumes: 10 | - /vol1/1000/Docker/wechat/config:/root/.xwechat 11 | - /vol1/1000/Docker/wechat/files:/root/xwechat_files 12 | - /vol1/1000/Downloads:/root/downloads 13 | environment: 14 | - TZ=Asia/Shanghai 15 | - LANG=zh_CN.UTF-8 16 | - USER_ID=0 17 | - GROUP_ID=0 18 | - WEB_AUDIO=0 19 | network_mode: bridge 20 | restart: always 21 | -------------------------------------------------------------------------------- /fnOS/jellyfin-library-poster.yml: -------------------------------------------------------------------------------- 1 | services: 2 | jellyfin-library-poster: 3 | image: evanqu/jellyfin-library-poster:latest 4 | container_name: jellyfin-library-poster 5 | volumes: 6 | - /vol1/1000/Docker/jellyfin-library-poster/config:/app/config 7 | - /vol1/1000/Docker/jellyfin-library-poster/poster:/app/poster 8 | - /vol1/1000/Docker/jellyfin-library-poster/output:/app/output 9 | - /vol1/1000/Docker/jellyfin-library-poster/logs:/app/logs 10 | - /vol1/1000/Docker/jellyfin-library-poster/myfont:/app/myfont 11 | restart: always 12 | network_mode: bridge 13 | -------------------------------------------------------------------------------- /fnOS/wps-office.yml: -------------------------------------------------------------------------------- 1 | services: 2 | wps-office: 3 | image: linuxserver/wps-office:chinese 4 | container_name: wps-office 5 | ports: 6 | - 26000:3000 7 | - 26001:3001 8 | volumes: 9 | - /vol1/1000/Docker/wps-office/config:/config 10 | - /vol1/1000/Docker/wps-office/Desktop:/config/Desktop 11 | - /vol1/1000/Docker/wps-office/Fonts:/usr/share/fonts/wps-fonts 12 | environment: 13 | - PUID=1000 14 | - PGID=1001 15 | - TZ=Asia/Shanghai 16 | - CUSTOM_USER=admin 17 | - PASSWORD=admin 18 | restart: always 19 | network_mode: bridge 20 | -------------------------------------------------------------------------------- /fnOS/stirling-pdf.yml: -------------------------------------------------------------------------------- 1 | services: 2 | stirling-pdf: 3 | image: stirlingtools/stirling-pdf:latest 4 | container_name: stirling-pdf 5 | ports: 6 | - 26015:8080 7 | volumes: 8 | - /vol1/1000/Docker/stirling-pdf/trainingData:/usr/share/tessdata 9 | - /vol1/1000/Docker/stirling-pdf/extraConfigs:/configs 10 | - /vol1/1000/Docker/stirling-pdf/customFiles:/customFiles/ 11 | - /vol1/1000/Docker/stirling-pdf/logs:/logs/ 12 | - /vol1/1000/Docker/stirling-pdf/pipeline:/pipeline/ 13 | environment: 14 | - DOCKER_ENABLE_SECURITY=false 15 | - LANGS=en_GB 16 | restart: always 17 | network_mode: bridge 18 | -------------------------------------------------------------------------------- /fnOS/upsnap.yml: -------------------------------------------------------------------------------- 1 | services: 2 | upsnap: 3 | image: ghcr.io/seriousm4x/upsnap:3.0.3 4 | container_name: upsnap 5 | command: ["./upsnap", "serve", "--http", "0.0.0.0:30070"] 6 | volumes: 7 | - /vol1/1000/Docker/upsnap:/app/pb_data 8 | environment: 9 | - TZ=Asia/Shanghai 10 | - UPSNAP_INTERVAL=@every 10s 11 | - UPSNAP_SCAN_RANGE=127.0.0.0/24 12 | - UPSNAP_WEBSITE_TITLE=网络唤醒 13 | healthcheck: 14 | test: wget --no-verbose --tries=1 --spider http://localhost:30070/api/health || exit 1 15 | interval: 1m 16 | timeout: 10s 17 | retries: 3 18 | restart: always 19 | network_mode: host 20 | -------------------------------------------------------------------------------- /fnOS/teamspeak.yml: -------------------------------------------------------------------------------- 1 | services: 2 | teamspeak: 3 | image: teamspeak:latest 4 | container_name: teamspeak 5 | ports: 6 | - 23005:9987/udp 7 | - 23006:30033 8 | - 23007:41144 9 | - 23008:10011 10 | volumes: 11 | - /vol1/1000/Docker/teamspeak:/var/ts3server 12 | environment: 13 | - TS3SERVER_DB_PLUGIN=ts3db_mariadb 14 | - TS3SERVER_DB_SQLCREATEPATH=create_mariadb 15 | - TS3SERVER_DB_HOST=mariadb 16 | - TS3SERVER_DB_USER=root 17 | - TS3SERVER_DB_PASSWORD=123456 18 | - TS3SERVER_DB_NAME=teamspeak 19 | - TS3SERVER_DB_WAITUNTILREADY=30 20 | - TS3SERVER_LICENSE=accept 21 | restart: always 22 | network_mode: bridge 23 | -------------------------------------------------------------------------------- /fnOS/cashbook.yml: -------------------------------------------------------------------------------- 1 | services: 2 | cashbook: 3 | container_name: cashbook 4 | image: dingdangdog/cashbook:latest 5 | ports: 6 | - 25000:9090 7 | volumes: 8 | - /vol1/1000/Docker/cashbook/data:/app/data 9 | environment: 10 | - DATABASE_URL=postgresql://admin:password@127.0.0.1:29005/cashbook?schema=public 11 | - NUXT_DATA_PATH=/app/data 12 | - NUXT_APP_URL=https://127.0.0.1:29005 13 | - NUXT_AUTH_ORIGIN=https://127.0.0.1:29005/api/auth 14 | - NUXT_AUTH_SECRET=auth_secret 15 | - NUXT_ADMIN_USERNAME=admin 16 | - NUXT_ADMIN_PASSWORD=749f09bade8aca755660eeb17792da880218d4fbdc4e25fbec279d7fe9f65d70 17 | restart: always 18 | network_mode: bridge 19 | -------------------------------------------------------------------------------- /fnOS/ezbookkeeping.yml: -------------------------------------------------------------------------------- 1 | services: 2 | ezbookkeeping: 3 | image: mayswind/ezbookkeeping:latest 4 | container_name: ezbookkeeping 5 | ports: 6 | - 25005:8080 7 | volumes: 8 | - /vol1/1000/Docker/ezbookkeeping/storage:/ezbookkeeping/storage 9 | - /vol1/1000/Docker/ezbookkeeping/log:/ezbookkeeping/log 10 | - /etc/localtime:/etc/localtime:ro 11 | environment: 12 | - EBK_SERVER_ENABLE_GZIP=true 13 | - EBK_DATABASE_TYPE=mysql 14 | - EBK_DATABASE_HOST=127.0.0.1:29000 15 | - EBK_DATABASE_NAME=ezbookkeeping 16 | - EBK_DATABASE_USER=root 17 | - EBK_DATABASE_PASSWD=123456 18 | - EBK_LOG_MODE=console file 19 | - EBK_SECURITY_SECRET_KEY=123456 20 | restart: always 21 | network_mode: bridge 22 | -------------------------------------------------------------------------------- /fnOS/mtphotos.yml: -------------------------------------------------------------------------------- 1 | services: 2 | mtphotos: 3 | image: registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos:latest 4 | container_name: mtphotos 5 | ports: 6 | - 25035:8063 7 | volumes: 8 | - /vol1/1000/Docker/mtphotos/config:/config 9 | - /vol1/1000/Docker/mtphotos/upload:/upload 10 | - /vol1/1000/Photos:/photos 11 | environment: 12 | - TZ=Asia/Shanghai 13 | - LANG=C.UTF-8 14 | dns: 15 | - 114.114.114.114 16 | depends_on: 17 | - mtphotos_ai 18 | - mtphotos_face_api 19 | restart: always 20 | network_mode: bridge 21 | 22 | mtphotos_ai: 23 | image: registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-ai:onnx-latest 24 | container_name: mtphotos_ai 25 | ports: 26 | - 25036:8060 27 | environment: 28 | - API_AUTH_KEY=mt_photos_ai_extra 29 | restart: always 30 | network_mode: bridge 31 | 32 | mtphotos_face_api: 33 | image: crpi-gcuyquw9co62xzjn.cn-guangzhou.personal.cr.aliyuncs.com/devfox101/mt-photos-insightface-unofficial:latest 34 | container_name: mtphotos_face_api 35 | ports: 36 | - 25037:8066 37 | environment: 38 | - API_AUTH_KEY=mt_photos_ai_extra 39 | restart: always 40 | network_mode: bridge 41 | -------------------------------------------------------------------------------- /fnOS/bitmagnet.yml: -------------------------------------------------------------------------------- 1 | services: 2 | bitmagnet: 3 | image: ghcr.io/bitmagnet-io/bitmagnet:latest 4 | container_name: bitmagnet 5 | ports: 6 | - 30085:3333 7 | - 30086:3334/tcp 8 | - 30087:3334/udp 9 | restart: always 10 | environment: 11 | - POSTGRES_HOST=postgres 12 | - POSTGRES_USER=admin 13 | - POSTGRES_PASSWORD=password 14 | - POSTGRES_DB=bitmagnet 15 | - TMDB_API_KEY=youer api key 16 | volumes: 17 | - /vol1/1000/Docker/bitmagnet/config:/root/.config/bitmagnet 18 | command: 19 | - worker 20 | - run 21 | - --keys=http_server 22 | - --keys=queue_server 23 | - --keys=dht_crawler 24 | depends_on: 25 | postgres: 26 | condition: service_healthy 27 | 28 | postgres: 29 | image: postgres:16-alpine 30 | container_name: bitmagnet-postgres 31 | volumes: 32 | - /vol1/1000/Docker/postgres:/var/lib/postgresql/data 33 | ports: 34 | - 29005:5432 35 | restart: always 36 | environment: 37 | - POSTGRES_USER=admin 38 | - POSTGRES_PASSWORD=password 39 | - POSTGRES_DB=bitmagnet 40 | shm_size: 1g 41 | healthcheck: 42 | test: 43 | - CMD-SHELL 44 | - pg_isready 45 | start_period: 20s 46 | interval: 10s 47 | -------------------------------------------------------------------------------- /fnOS/immich.yml: -------------------------------------------------------------------------------- 1 | name: immich 2 | 3 | services: 4 | immich-server: 5 | container_name: immich_server 6 | image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} 7 | volumes: 8 | - ${UPLOAD_LOCATION}:/usr/src/app/upload 9 | - /etc/localtime:/etc/localtime:ro 10 | env_file: 11 | - .env 12 | ports: 13 | - 25040:2283 14 | depends_on: 15 | - redis 16 | - database 17 | restart: always 18 | healthcheck: 19 | disable: false 20 | 21 | immich-machine-learning: 22 | container_name: immich_machine_learning 23 | image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} 24 | volumes: 25 | - model-cache:/cache 26 | env_file: 27 | - .env 28 | restart: always 29 | healthcheck: 30 | disable: false 31 | 32 | redis: 33 | container_name: immich_redis 34 | image: docker.io/valkey/valkey:8-bookworm@sha256:42cba146593a5ea9a622002c1b7cba5da7be248650cbb64ecb9c6c33d29794b1 35 | healthcheck: 36 | test: redis-cli ping || exit 1 37 | restart: always 38 | 39 | database: 40 | container_name: immich_postgres 41 | image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:739cdd626151ff1f796dc95a6591b55a714f341c737e27f045019ceabf8e8c52 42 | environment: 43 | POSTGRES_PASSWORD: ${DB_PASSWORD} 44 | POSTGRES_USER: ${DB_USERNAME} 45 | POSTGRES_DB: ${DB_DATABASE_NAME} 46 | POSTGRES_INITDB_ARGS: '--data-checksums' 47 | volumes: 48 | - ${DB_DATA_LOCATION}:/var/lib/postgresql/data 49 | healthcheck: 50 | test: >- 51 | pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1; Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1 52 | interval: 5m 53 | start_interval: 30s 54 | start_period: 5m 55 | command: >- 56 | postgres -c shared_preload_libraries=vectors.so -c 'search_path="$$user", public, vectors' -c logging_collector=on -c max_wal_size=2GB -c shared_buffers=512MB -c wal_compression=on 57 | restart: always 58 | 59 | volumes: 60 | model-cache: 61 | -------------------------------------------------------------------------------- /fnOS/safeline.yml: -------------------------------------------------------------------------------- 1 | networks: 2 | safeline-ce: 3 | name: safeline-ce 4 | driver: bridge 5 | ipam: 6 | driver: default 7 | config: 8 | - gateway: ${SUBNET_PREFIX:?SUBNET_PREFIX required}.1 9 | subnet: ${SUBNET_PREFIX}.0/24 10 | driver_opts: 11 | com.docker.network.bridge.name: safeline-ce 12 | 13 | services: 14 | postgres: 15 | container_name: safeline-pg 16 | restart: always 17 | image: ${IMAGE_PREFIX}/safeline-postgres${ARCH_SUFFIX}:15.2 18 | volumes: 19 | - ${SAFELINE_DIR}/resources/postgres/data:/var/lib/postgresql/data 20 | - /etc/localtime:/etc/localtime:ro 21 | environment: 22 | - POSTGRES_USER=safeline-ce 23 | - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:?postgres password required} 24 | networks: 25 | safeline-ce: 26 | ipv4_address: ${SUBNET_PREFIX}.2 27 | command: [postgres, -c, max_connections=600] 28 | healthcheck: 29 | test: pg_isready -U safeline-ce -d safeline-ce 30 | mgt: 31 | container_name: safeline-mgt 32 | restart: always 33 | image: ${IMAGE_PREFIX}/safeline-mgt${REGION}${ARCH_SUFFIX}:${IMAGE_TAG:?image tag required} 34 | volumes: 35 | - /etc/localtime:/etc/localtime:ro 36 | - ${SAFELINE_DIR}/resources/mgt:/app/data 37 | - ${SAFELINE_DIR}/logs/nginx:/app/log/nginx:z 38 | - ${SAFELINE_DIR}/resources/sock:/app/sock 39 | - /var/run:/app/run 40 | ports: 41 | - ${MGT_PORT:-9443}:1443 42 | healthcheck: 43 | test: curl -k -f https://localhost:1443/api/open/health 44 | environment: 45 | - MGT_PG=postgres://safeline-ce:${POSTGRES_PASSWORD}@safeline-pg/safeline-ce?sslmode=disable 46 | depends_on: 47 | - postgres 48 | - fvm 49 | logging: 50 | driver: "json-file" 51 | options: 52 | max-size: "100m" 53 | max-file: "5" 54 | networks: 55 | safeline-ce: 56 | ipv4_address: ${SUBNET_PREFIX}.4 57 | detect: 58 | container_name: safeline-detector 59 | restart: always 60 | image: ${IMAGE_PREFIX}/safeline-detector${REGION}${ARCH_SUFFIX}:${IMAGE_TAG} 61 | volumes: 62 | - ${SAFELINE_DIR}/resources/detector:/resources/detector 63 | - ${SAFELINE_DIR}/logs/detector:/logs/detector 64 | - /etc/localtime:/etc/localtime:ro 65 | environment: 66 | - LOG_DIR=/logs/detector 67 | networks: 68 | safeline-ce: 69 | ipv4_address: ${SUBNET_PREFIX}.5 70 | tengine: 71 | container_name: safeline-tengine 72 | restart: always 73 | image: ${IMAGE_PREFIX}/safeline-tengine${REGION}${ARCH_SUFFIX}:${IMAGE_TAG} 74 | volumes: 75 | - /etc/localtime:/etc/localtime:ro 76 | - /etc/resolv.conf:/etc/resolv.conf:ro 77 | - ${SAFELINE_DIR}/resources/nginx:/etc/nginx 78 | - ${SAFELINE_DIR}/resources/detector:/resources/detector 79 | - ${SAFELINE_DIR}/resources/chaos:/resources/chaos 80 | - ${SAFELINE_DIR}/logs/nginx:/var/log/nginx:z 81 | - ${SAFELINE_DIR}/resources/cache:/usr/local/nginx/cache 82 | - ${SAFELINE_DIR}/resources/sock:/app/sock 83 | environment: 84 | - TCD_MGT_API=https://${SUBNET_PREFIX}.4:1443/api/open/publish/server 85 | - TCD_SNSERVER=${SUBNET_PREFIX}.5:8000 86 | # deprecated 87 | - SNSERVER_ADDR=${SUBNET_PREFIX}.5:8000 88 | - CHAOS_ADDR=${SUBNET_PREFIX}.10 89 | ulimits: 90 | nofile: 131072 91 | network_mode: host 92 | luigi: 93 | container_name: safeline-luigi 94 | restart: always 95 | image: ${IMAGE_PREFIX}/safeline-luigi${REGION}${ARCH_SUFFIX}:${IMAGE_TAG} 96 | environment: 97 | - MGT_IP=${SUBNET_PREFIX}.4 98 | - LUIGI_PG=postgres://safeline-ce:${POSTGRES_PASSWORD}@safeline-pg/safeline-ce?sslmode=disable 99 | volumes: 100 | - /etc/localtime:/etc/localtime:ro 101 | - ${SAFELINE_DIR}/resources/luigi:/app/data 102 | logging: 103 | driver: "json-file" 104 | options: 105 | max-size: "100m" 106 | max-file: "5" 107 | depends_on: 108 | - detect 109 | - mgt 110 | networks: 111 | safeline-ce: 112 | ipv4_address: ${SUBNET_PREFIX}.7 113 | fvm: 114 | container_name: safeline-fvm 115 | restart: always 116 | image: ${IMAGE_PREFIX}/safeline-fvm${REGION}${ARCH_SUFFIX}:${IMAGE_TAG} 117 | volumes: 118 | - /etc/localtime:/etc/localtime:ro 119 | logging: 120 | driver: "json-file" 121 | options: 122 | max-size: "100m" 123 | max-file: "5" 124 | networks: 125 | safeline-ce: 126 | ipv4_address: ${SUBNET_PREFIX}.8 127 | chaos: 128 | container_name: safeline-chaos 129 | restart: always 130 | image: ${IMAGE_PREFIX}/safeline-chaos${REGION}${ARCH_SUFFIX}:${IMAGE_TAG} 131 | logging: 132 | driver: "json-file" 133 | options: 134 | max-size: "100m" 135 | max-file: "10" 136 | environment: 137 | - DB_ADDR=postgres://safeline-ce:${POSTGRES_PASSWORD}@safeline-pg/safeline-ce?sslmode=disable 138 | volumes: 139 | - ${SAFELINE_DIR}/resources/sock:/app/sock 140 | - ${SAFELINE_DIR}/resources/chaos:/app/chaos 141 | networks: 142 | safeline-ce: 143 | ipv4_address: ${SUBNET_PREFIX}.10 144 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 三人行服务包免费版 (Last_Three_Service_Package_Pro) 2 | 3 | ## 一、前言 4 | 5 | ### 1、项目概述 6 | **1.1、项目介绍** 7 | 本项目整合了原"懒人包脚本"与"Compose商店"的核心功能,通过社区反馈优化后重新开源。旨在为系统重装用户及技术小白提供便捷的一键式服务部署解决方案。欢迎提交适配问题,项目团队将持续优化迭代。 8 | 9 | **1.2、版本分支说明** 10 | 因原博客遭恶意攻击,维护成本剧增,自v1.1.1起项目分为两个分支: 11 | - **Free版**:持续开源但功能精简,保留基础服务组件 12 | - **Pro版**:闭源分发,提供完整功能及专业支持 13 | 14 | **1.2、版本号** 15 | - **Free版**:V 1.2.2 16 | - **Pro版**:V 1.2.2 17 | 18 | ### 2、系统兼容性矩阵 19 | 20 | | 序号 | 系统名称 | 系统英文名称 | 是否适配 | 适配版本 | 21 | | :---: | :---: | :---: | :---: | :---: | 22 | | 1 | 飞牛 | fnOS | ✅ | Free | 23 | | 2 | 黑群晖 | Synology | ✅ | Pro | 24 | | 3 | 绿联旧(已废弃) | Ugreen | ✅ | Pro | 25 | | 4 | 绿联新 | UgreenNew | ✅ | Pro | 26 | | 5 | 极空间 | ZSpace | ✅ | Pro | 27 | | 6 | 威联通 | QNAP | ✅ | Pro | 28 | | 7 | TrueNas | TrueNas | ✅ | Pro | 29 | | 8 | ZimaOS | ZimaOS | ✅ | Pro | 30 | | 9 | CasaOS | CasaOS | ❌ | Pro | 31 | 32 | > 💡 系统适配状态说明:✅ = 完全支持 ❌ = 开发中 33 | 34 | ## 二、服务包 Docker 集成项目列表 35 | 36 | | 序号 | Docker 名称 | 作用 | 端口 | 用户名 | 密码 | 是否支持Free | 37 | | :---: | :------------------------------: | :-------------------------------------: | :--------------------: | :-------------: | :----------------------------: | :-----------: | 38 | | 1 | 1panel | 服务器管理工具 | 26000 | admin | password | ✅ | 39 | | 2 | aipan | 网盘资源搜索器 | 21000 | / | / | ✅ | 40 | | 3 | alist-strm | strm工具 | 20330 | 自行创建 | 自行创建 | ✅ | 41 | | 4 | all-in-one | 三人行精简版 | 20000/30000 | / | / | ✅ | 42 | | 5 | auto-cloud-video-music | 集成容器 | 31000至31035 | / | / | ❌ | 43 | | 6 | babybuddy | 家庭育儿工具 | 22000 | admin | password | ✅ | 44 | | 7 | bitmagnet | 种子索引器 | 25115至25117 | 自行创建 | 自行创建 | ✅ | 45 | | 8 | cashbook | 记账工具 | 22100 | 自行创建 | 自行创建 | ✅ | 46 | | 9 | chinesesubfinder | 字幕下载工具 | 20305 | 自行创建 | 自行创建 | ✅ | 47 | | 10 | cloud189 | strm工具 | 20320 | admin | admin | ✅ | 48 | | 11 | clouddrive2 | 网盘挂载工具 | 21015 | 自行创建 | 自行创建 | ✅ | 49 | | 12 | cloudsaver | 网盘资源搜索器 | 21010 | 自行创建 | 自行创建 | ✅ | 50 | | 13 | dockge | Docker管理工具 | 26005 | 自行创建 | 自行创建 | ✅ | 51 | | 14 | dpanel | Docker管理工具 | 26010 | 自行创建 | 自行创建 | ✅ | 52 | | 15 | emby | 媒体服务器 | 20105 | 自行创建 | 自行创建 | ✅ | 53 | | 16 | emulatorjs | 掌机模拟器 | 27000至27001 | / | / | ✅ | 54 | | 17 | ezbookkeeping | 记账工具 | 22105 | 自行创建 | 自行创建 | ✅ | 55 | | 18 | firefox | 火狐浏览器 | 24000 | / | / | ✅ | 56 | | 19 | frpc | frpc穿透工具 | / | / | / | ✅ | 57 | | 20 | godoos | 办公轻量化系统 | 26045 | / | / | ✅ | 58 | | 21 | halo | 博客服务器 | 23035 | 自行创建 | 自行创建 | ✅ | 59 | | 22 | hanime-server | 里番管理面板 | 20015 | / | / | ✅ | 60 | | 23 | homeassistant | 智能家居服务器 | 22200 | 自行创建 | 自行创建 | ✅ | 61 | | 24 | homebox | 家庭资产管理工具 | 22115 | 自行创建 | 自行创建 | ✅ | 62 | | 25 | icloudpd | 苹果相册转存工具 | 21100 | / | / | ✅ | 63 | | 26 | immich | 家庭图片管理服务器 | 22005 | 自行创建 | 自行创建 | ✅ | 64 | | 27 | ip-tool | IP工具箱 | 24005 | / | / | ✅ | 65 | | 28 | iptv-api | IPTV工具 | 20300 | / | / | ✅ | 66 | | 29 | istoreos | 软路由终端 | / | / | / | ✅ | 67 | | 30 | iyuuplus | 转/辅种工具 | 25100 | 自行创建 | 自行创建 | ✅ | 68 | | 31 | jackett | 种子索引器 | 25110 | / | / | ✅ | 69 | | 32 | jellyfin-library-poster | 媒体服务器自动生成媒体库封面海报工具 | / | / | / | ✅ | 70 | | 33 | jellyfin | 媒体服务器 | 20100 | 自行创建 | 自行创建 | ✅ | 71 | | 34 | kkfileview | 多格式在线查看工具 | 23015 | / | / | ✅ | 72 | | 35 | komga | 电子漫画服务器 | 20505 | 自行创建 | 自行创建 | ✅ | 73 | | 36 | last-three-service-package-docker-ui | 服务包可视化容器 | 26015 | / | / | ✅ | 74 | | 37 | libretv | 在线影院 | 20200 | / | / | ✅ | 75 | | 38 | lsky-pro | 兰空图床 | 23025 | 自行创建 | 自行创建 | ✅ | 76 | | 39 | lucky | 反代工具 | 16601 | 666 | 666 | ✅ | 77 | | 40 | lyricapi | 刮削工具 | 20410 | / | / | ✅ | 78 | | 41 | mariadb | 数据库 | 28010 | / | / | ✅ | 79 | | 42 | mdcx | 刮削工具 | 20315至20316 | / | / | ✅ | 80 | | 43 | mediago | 流媒体下载器 | 25015 | / | / | ✅ | 81 | | 44 | mediahelper | 媒体管理面板 | 20010 | / | / | ✅ | 82 | | 45 | metatube | 刮削工具 | 20310 | / | / | ✅ | 83 | | 46 | moontv | 在线影院 | 20210 | / | password | ✅ | 84 | | 47 | moviepilot | 媒体管理面板 | 20005 | admin | 运行日志获取 | ✅ | 85 | | 48 | mtphotos | 家庭图片管理服务器 | 22010至22012 | 自行创建 | 自行创建 | ✅ | 86 | | 49 | music-tag-web | 刮削工具 | 20405 | admin | admin | ✅ | 87 | | 50 | mysql | 数据库 | 28000 | / | / | ✅ | 88 | | 51 | nastool | 媒体管理面板 | 20000 | admin | password | ✅ | 89 | | 52 | navidrome | 音乐服务器 | 20400 | 自行创建 | 自行创建 | ✅ | 90 | | 53 | newsnow | 热点新闻工具 | 26205 | / | / | ✅ | 91 | | 54 | npc | npc穿透工具 | / | / | / | ✅ | 92 | | 55 | ollama | 智能体 | 23200 | / | / | ✅ | 93 | | 56 | open-webui | 智能体可视化面板 | 23205 | 自行创建 | 自行创建 | ✅ | 94 | | 57 | openlist | 网盘挂载工具 | 21005 | / | / | ✅ | 95 | | 58 | php-epg | IPTV工具 | 20325 | / | / | ✅ | 96 | | 59 | playlistdl | 音乐下载器 | 20420 | / | / | ✅ | 97 | | 60 | postgres | 数据库 | 28005 | / | / | ✅ | 98 | | 61 | qbittorrent | QB下载器 | 25000 | admin | 运行日志获取 | ✅ | 99 | | 62 | qiandao | 签到脚本工具 | 26105 | 自行创建 | 自行创建 | ✅ | 100 | | 63 | qinglong | 脚本管理工具 | 26100 | 自行创建 | 自行创建 | ✅ | 101 | | 64 | reader | 电子书服务器 | 20500 | / | / | ✅ | 102 | | 65 | rustdesk-server | 远程桌面服务器 | 24010至24014 | / | / | ✅ | 103 | | 66 | safeline | 雷池WAF | 24105 | / | / | ✅ | 104 | | 67 | siyuan-note-unlock | 思源笔记 | 23020 | / | 100 | ✅ | 105 | | 68 | stirling-pdf | PDF工具箱 | 23010 | / | / | ✅ | 106 | | 69 | sun-panel | 导航页工具 | 26200 | admin@sun.cc | 12345678 | ✅ | 107 | | 70 | synctv | 多人共享媒体工具 | 20205 | root | root | ✅ | 108 | | 71 | tailscale | 异地组网工具 | / | / | / | ✅ | 109 | | 72 | taoSync | 网盘同步工具 | 21110 | admin | 运行日志获取 | ✅ | 110 | | 73 | teamspeak | 游戏语音服务器 | 27005至27008 | / | 运行日志获取 | ✅ | 111 | | 74 | transmission | TR下载器 | 25005 | root | root | ✅ | 112 | | 75 | upsnap | 局域网络唤醒设备工具 | 24015 | / | / | ✅ | 113 | | 76 | v2raya | 代理工具 | 24100 | / | / | ✅ | 114 | | 77 | vaultwarden | 密码管理服务器 | 24110 | 自行创建 | 自行创建 | ✅ | 115 | | 78 | vertex | 刷流工具 | 25105 | admin | config文件夹内的password文件 | ✅ | 116 | | 79 | verysync | 微力同步 | 21105 | / | / | ✅ | 117 | | 80 | vscode | 代码编辑器 | 23100 | / | password | ✅ | 118 | | 81 | wallos | 订阅管理工具 | 22110 | 自行创建 | 自行创建 | ✅ | 119 | | 82 | watchtower | 自动检测更新镜像工具 | / | / | / | ✅ | 120 | | 83 | wechat | 网页版微信 | 23005至23006 | / | / | ✅ | 121 | | 84 | wps-office | WPS办公 | 23000至23001 | admin | admin | ✅ | 122 | | 85 | xiaoaimusic | 小爱音响工具 | 20425 | / | / | ✅ | 123 | | 86 | xunlei | 迅雷下载器 | 25010 | admin | admin | ✅ | 124 | | 87 | yesplaymusic | 音乐播放器 | 20415 | / | / | ✅ | 125 | | 88 | zerotier | 异地组网工具 | / | / | / | ✅ | 126 | 127 | > 💡 是否支持 Free 版本说明:✅ = 完全支持 ❌ = 仅支持 Pro 版本 128 | 129 | ## 三、服务包目录结构 130 | 131 | | 序号 | 文件夹名称 | 主要功能描述 | 132 | | :---: | :---: | :---: | 133 | | 1 | Backup | 适配 Pro 版本的备份与恢复容器文件夹,所有的备份将存储到此文件夹中 | 134 | | 2 | Cloud | 适配 Pro 版本的 Rclone 挂载 OpenList 可视化脚本挂载文件夹 | 135 | | 3 | Compose | 存放Docker Compose配置文件,包含服务编排定义和环境变量设置 | 136 | | 4 | Docker | 存储Docker容器相关数据,包括自定义镜像、容器配置和持久化存储卷 | 137 | | 5 | Downloads | 迅雷远程下载默认存储路径,支持多协议文件下载和分类管理 | 138 | | 6 | Music | 音乐媒体库,支持自动元数据识别和媒体服务器集成 | 139 | | 7 | Photos | 照片管理目录,优化图片存储结构和缩略图生成 | 140 | | 8 | Synchronous | 跨设备同步文件夹,支持双向文件同步和版本控制 | 141 | | 9 | Video | 影视媒体库,包含原文件存储和硬链接优化结构,支持Emby/Jellyfin媒体服务器 | 142 | 143 | ## 四、服务包服务菜单(仅支持 Pro 版本) 144 | 145 | | 序号 | 服务菜单名称 | 主要功能描述 | 146 | | :---: | :---: | :---: | 147 | | 1 | 三人行精简版服务一键安装脚本下载 | 精简版服务包脚本,集成基础 Docker 容器进行一键部署 | 148 | | 2 | 三人行精简版适配插件下载 | 适配服务包的一些容器插件(主题,字体等....) | 149 | | 3 | 三人行服务包更新脚本下载 | 内置自动更新版本脚本 | 150 | | 4 | Docker升级服务脚本下载 | Docker Compose 升级脚本 | 151 | | 5 | 三人行 Sun-Panel 配置文件更改 IP 脚本下载 | 按要求输入地址自动更改 Sun-Panel 配置 IP 地址 | 152 | | 6 | 三人行 jellyfin-library-poster 创建 Json 文件脚本下载 | 按要求输入自动生成 jellyfin-library-poster 的 Json 配置文件 | 153 | | 7 | 三人行 OpenList 挂载 Webdav 脚本下载 | 按要求输入通过 Rclone 自动挂载 OpenList 到本地 | 154 | 155 | ## 五、使用指南 156 | 157 | 详细使用教程请参考官方 Wiki:[wiki.yutumay.cn](https://wiki.yutumay.cn) 158 | 159 | ## 六、更新日志 160 | 161 | 更新日志详情请参考官方 Wiki:[wiki.yutumay.cn](https://wiki.yutumay.cn) 162 | 163 | ## 七、联系作者 164 | 165 | **哔哩哔哩主页:** [最后三人行个人主页](https://space.bilibili.com/3546844344879871?spm_id_from=333.1007.0.0) 166 | 167 | **博客地址:** [三人行博客](https://blog.yutumay.cn) 168 | 169 | **联系方式:** 170 | - 微信:M13051661743 171 | - Telegram:[Last Three](https://t.me/+ytneiJtDPeFjOWM9) 172 | 173 | ## 八、特别鸣谢 174 | 175 | [Geekertao的项目](https://github.com/Geekertao/CF-Workers-GitHub-Proxy) 加速节点的提供者! 176 | -------------------------------------------------------------------------------- /fnOS/all-in-one.yml: -------------------------------------------------------------------------------- 1 | name: Last_Three_All_In_One 2 | 3 | services: 4 | 1panel: 5 | image: koryking/1panel:latest 6 | container_name: 1panel 7 | ports: 8 | - 30010:10086 9 | volumes: 10 | - /vol1/1000/Docker/1panel:/opt/1panel 11 | - /vol1/1000/:/vol1/1000/ 12 | - /var/run/docker.sock:/var/run/docker.sock 13 | environment: 14 | - TZ=Asia/Shanghai 15 | - PANEL_BASE_DIR=/opt/1panel 16 | - PANEL_PORT=10086 17 | - PANEL_ENTRANCE=123456 18 | - PANEL_USERNAME=admin 19 | - PANEL_PASSWORD=password 20 | network_mode: bridge 21 | restart: always 22 | 23 | aipan: 24 | image: unilei/aipan-netdisk-search-simple:latest 25 | container_name: aipan 26 | ports: 27 | - 24000:3000 28 | environment: 29 | - NUXT_HOST="0.0.0.0" 30 | - NUXT_PORT=3000 31 | restart: always 32 | network_mode: bridge 33 | 34 | alist-strm: 35 | image: itefuir/alist-strm:latest 36 | container_name: alist-strm 37 | stdin_open: true 38 | tty: true 39 | ports: 40 | - 30050:5000 41 | volumes: 42 | - /vol1/1000/Docker/alist-strm:/config 43 | - /vol1/1000/Video:/Video 44 | restart: always 45 | network_mode: bridge 46 | 47 | alist: 48 | image: xhofe/alist:latest 49 | container_name: alist 50 | ports: 51 | - 24005:5244 52 | volumes: 53 | - /vol1/1000/Docker/alist:/opt/alist/data 54 | environment: 55 | - PUID=1000 56 | - PGID=1001 57 | - UMASK=022 58 | - TZ=Asia/Shanghai 59 | restart: always 60 | network_mode: bridge 61 | 62 | babybuddy: 63 | image: linuxserver/babybuddy:latest 64 | container_name: babybuddy 65 | ports: 66 | - 25020:8000 67 | volumes: 68 | - /vol1/1000/Docker/babybuddy:/config 69 | environment: 70 | - TZ=Asia/Shanghai 71 | restart: always 72 | network_mode: bridge 73 | 74 | chinesesubfinder: 75 | image: allanpk716/chinesesubfinder:latest 76 | container_name: chinesesubfinder 77 | ports: 78 | - 20025:19035 79 | volumes: 80 | - /vol1/1000/Docker/chinesesubfinder/config:/config 81 | - /vol1/1000/Docker/chinesesubfinder/cache:/app/cache 82 | - /vol1/1000/Video:/media 83 | environment: 84 | - PUID=1000 85 | - PGID=1001 86 | - TZ=Asia/Shanghai 87 | restart: always 88 | network_mode: bridge 89 | 90 | clouddrive2: 91 | image: cloudnas/clouddrive2:latest 92 | container_name: clouddrive2 93 | privileged: true 94 | ports: 95 | - 24015:19798 96 | volumes: 97 | - /vol1/1000/Docker/clouddrive2:/Config 98 | - /vol1/1000/Cloud:/CloudNAS:shared 99 | - /vol1/1000/Video:/media:shared 100 | environment: 101 | - TZ=Asia/Shanghai 102 | - CLOUDDRIVE_HOME=/Config 103 | restart: always 104 | network_mode: bridge 105 | 106 | cloudsaver: 107 | image: jiangrui1994/cloudsaver:latest 108 | container_name: cloudsaver 109 | ports: 110 | - 24010:8008 111 | volumes: 112 | - /vol1/1000/Docker/cloudsaver/data:/app/data 113 | - /vol1/1000/Docker/cloudsaver/config:/app/config 114 | restart: always 115 | network_mode: bridge 116 | 117 | dockge: 118 | image: louislam/dockge:1 119 | container_name: dockge 120 | ports: 121 | - 30040:5001 122 | volumes: 123 | - /vol1/1000/Docker/dockge/data:/app/data 124 | - /vol1/1000/Docker/dockge:/home/stacks 125 | - /var/run/docker.sock:/var/run/docker.sock 126 | restart: always 127 | network_mode: bridge 128 | 129 | dpanel: 130 | image: dpanel/dpanel:latest 131 | container_name: dpanel 132 | ports: 133 | - 30060:8080 134 | volumes: 135 | - /vol1/1000/Docker/dpanel:/dpanel 136 | - /var/run/docker.sock:/var/run/docker.sock 137 | restart: always 138 | network_mode: bridge 139 | 140 | emby: 141 | image: amilys/embyserver:latest 142 | container_name: embyserver 143 | privileged: true 144 | ports: 145 | - 20015:8096 146 | volumes: 147 | - /vol1/1000/Docker/emby/config:/config 148 | - /vol1/1000/Video:/data 149 | restart: always 150 | network_mode: bridge 151 | 152 | emulatorjs: 153 | image: lscr.io/linuxserver/emulatorjs:latest 154 | container_name: emulatorjs 155 | ports: 156 | - 23000:3000 157 | - 23001:80 158 | volumes: 159 | - /vol1/1000/Docker/emulatorjs/config:/config 160 | - /vol1/1000/Docker/emulatorjs/data:/data 161 | environment: 162 | - PUID=1000 163 | - PGID=1001 164 | - TZ=Asia/Shanghai 165 | restart: always 166 | network_mode: bridge 167 | 168 | firefox: 169 | image: jlesage/firefox:latest 170 | container_name: firefox 171 | ports: 172 | - 27000:5800 173 | volumes: 174 | - /vol1/1000/Docker/firefox/config:/config:rw 175 | - /vol1/1000/Docker/firefox/fonts:/usr/share/fonts 176 | - /vol1/1000/Downloads:/config/downloads 177 | environment: 178 | - USER_ID=1000 179 | - GROUP_ID=1001 180 | - UMASK=022 181 | - TZ=Asia/Shanghai 182 | restart: always 183 | network_mode: bridge 184 | 185 | frpc: 186 | image: snowdreamtech/frpc:latest 187 | container_name: frpc 188 | volumes: 189 | - /vol1/1000/Frpc:/etc/frp 190 | command: -c /etc/frp/frpc.ini 191 | restart: always 192 | network_mode: host 193 | 194 | homeassistant: 195 | image: homeassistant/home-assistant:latest 196 | container_name: homeassistant 197 | ports: 198 | - 25030:8123 199 | volumes: 200 | - /vol1/1000/Docker/homeassistant:/config 201 | environment: 202 | - TZ=Asia/Shanghai 203 | restart: always 204 | network_mode: bridge 205 | 206 | homebox: 207 | image: hfhc1309/homebox-zh:latest 208 | container_name: homebox 209 | ports: 210 | - 25015:7745 211 | volumes: 212 | - /vol1/1000/Docker/homebox:/data/ 213 | environment: 214 | - TZ=Asia/Shanghai 215 | restart: always 216 | network_mode: bridge 217 | 218 | icloudpd: 219 | image: icloudpd/icloudpd:latest 220 | container_name: icloudpd 221 | tty: true 222 | ports: 223 | - 24020:8080 224 | volumes: 225 | - /vol1/1000/Photos:/data 226 | environment: 227 | - TZ=Asia/Shanghai 228 | command: icloudpd --directory /data --username youemail@xx.xx --mfa-provider webui --domain cn --password-provider webui --watch-with-interval 3600 229 | restart: always 230 | network_mode: bridge 231 | 232 | ip-tool: 233 | image: jason5ng32/myip:latest 234 | container_name: ip-tool 235 | ports: 236 | - 27005:18966 237 | restart: always 238 | network_mode: bridge 239 | 240 | iptv-api: 241 | image: guovern/iptv-api:latest 242 | container_name: iptv-api 243 | ports: 244 | - 20020:8000 245 | volumes: 246 | - /vol1/1000/Docker/iptv-api/config:/iptv-api/config 247 | - /vol1/1000/Docker/iptv-api/output:/iptv-api/output 248 | restart: always 249 | network_mode: bridge 250 | 251 | iyuuplus: 252 | image: iyuucn/iyuuplus:latest 253 | container_name: iyuuplus 254 | ports: 255 | - 30000:8780 256 | volumes: 257 | - /vol1/1000/Docker/iyuuplus/iyuu:/iyuu 258 | - /vol1/1000/Docker/iyuuplus/data:/data 259 | - /vol1/1000/Docker/qbittorrent/qBittorrent/BT_backup:/qb 260 | - /vol1/1000/Docker/transmission/torrents:/tr 261 | environment: 262 | - PUID=0 263 | - PGID=0 264 | - TZ=Asia/Shanghai 265 | restart: always 266 | network_mode: bridge 267 | 268 | jackett: 269 | image: linuxserver/jackett:latest 270 | container_name: jackett 271 | ports: 272 | - 30030:9117 273 | volumes: 274 | - /vol1/1000/Docker/jackett/config:/config 275 | - /vol1/1000/Docker/jackett/downloads:/downloads 276 | environment: 277 | - PUID=1000 278 | - PGID=1001 279 | - TZ=Asia/Shanghai 280 | - AUTO_UPDATE=false 281 | restart: always 282 | network_mode: bridge 283 | 284 | jellyfin-library-poster: 285 | image: evanqu/jellyfin-library-poster:latest 286 | container_name: jellyfin-library-poster 287 | volumes: 288 | - /vol1/1000/Docker/jellyfin-library-poster/config:/app/config 289 | - /vol1/1000/Docker/jellyfin-library-poster/poster:/app/poster 290 | - /vol1/1000/Docker/jellyfin-library-poster/output:/app/output 291 | - /vol1/1000/Docker/jellyfin-library-poster/logs:/app/logs 292 | - /vol1/1000/Docker/jellyfin-library-poster/myfont:/app/myfont 293 | restart: always 294 | network_mode: bridge 295 | 296 | jellyfin: 297 | image: nyanmisaka/jellyfin:latest 298 | container_name: jellyfin 299 | privileged: true 300 | devices: 301 | - /dev/dri:/dev/dri 302 | ports: 303 | - 20010:8096 304 | volumes: 305 | - /vol1/1000/Docker/jellyfin/config:/config 306 | - /vol1/1000/Docker/jellyfin/cache:/cache 307 | - /vol1/1000/Video:/video 308 | restart: always 309 | network_mode: bridge 310 | 311 | kkfileview: 312 | image: pi4k8s/kkfileview:4.4.0 313 | container_name: kkfileview 314 | ports: 315 | - 26020:8012 316 | volumes: 317 | - /vol1/1000/Docker/kkfileview:/opt/kkFileView-4.4.0 318 | environment: 319 | - KK_OFFICE_PREVIEW_TYPE=pdf 320 | - KK_OFFICE_PREVIEW_SWITCH_DISABLED=true 321 | - KK_PDF_DOWNLOAD_DISABLE=true 322 | - KK_FILE_UPLOAD_ENABLED=false 323 | - KK_CONTEXT_PATH=/ 324 | restart: always 325 | network_mode: bridge 326 | 327 | komga: 328 | image: gotson/komga:latest 329 | container_name: komga 330 | ports: 331 | - 22005:25600 332 | volumes: 333 | - /vol1/1000/Docker/komga/config:/config 334 | - /vol1/1000/Docker/komga/data:/data 335 | environment: 336 | - PUID=1000 337 | - PGID=1001 338 | - TZ=Asia/Shanghai 339 | network_mode: bridge 340 | restart: always 341 | 342 | libretv: 343 | image: bestzwei/libretv:latest 344 | container_name: libretv 345 | ports: 346 | - 20035:80 347 | restart: always 348 | network_mode: bridge 349 | 350 | lucky: 351 | image: gdy666/lucky:latest 352 | container_name: lucky 353 | volumes: 354 | - /vol1/1000/Docker/lucky:/goodluck 355 | restart: always 356 | network_mode: host 357 | 358 | lyricapi: 359 | image: hisatri/lyricapi:latest 360 | container_name: lyricapi 361 | ports: 362 | - 21010:28883 363 | volumes: 364 | - /vol1/1000/Music:/music 365 | restart: always 366 | network_mode: bridge 367 | 368 | mdcx: 369 | image: stainless403/mdcx-builtin-gui-base:latest 370 | container_name: mdcx 371 | ports: 372 | - 20045:5800 373 | - 20046:5900 374 | volumes: 375 | - /vol1/1000/Docker/mdcx/config:/config 376 | - /vol1/1000/Docker/mdcx/mdcx-config:/mdcx-config 377 | - /vol1/1000/Docker/mdcx/logs:/app/log 378 | - /vol1/1000/Video:/data 379 | environment: 380 | - USER_ID=1000 381 | - GROUP_ID=1001 382 | - TZ=Asia/Shanghai 383 | restart: always 384 | network_mode: bridge 385 | 386 | mediago: 387 | image: registry.cn-beijing.aliyuncs.com/caorushizi/mediago:latest 388 | container_name: mediago 389 | ports: 390 | - 28015:8899 391 | volumes: 392 | - /vol1/1000/Downloads:/root/mediago 393 | restart: always 394 | network_mode: bridge 395 | 396 | metatube: 397 | image: ghcr.io/metatube-community/metatube-server:latest 398 | container_name: metatube 399 | ports: 400 | - 20030:8080 401 | environment: 402 | - PORT=8080 403 | - DB_MAX_IDLE_CONNS=0 404 | - DB_MAX_OPEN_CONNS=0 405 | - DB_PREPARED_STMT=0 406 | - DB_AUTO_MIGRATE=0 407 | restart: always 408 | network_mode: bridge 409 | 410 | moviepilot: 411 | image: jxxghp/moviepilot-v2:latest 412 | container_name: moviepilot 413 | ports: 414 | - 20005:3000 415 | volumes: 416 | - /vol1/1000/Video:/downloads 417 | - /vol1/1000/Docker/moviepilot:/config 418 | environment: 419 | - NGINX_PORT=3000 420 | - PORT=3001 421 | - PUID=1000 422 | - PGID=1001 423 | - UMASK=000 424 | - TZ=Asia/Shanghai 425 | - SUPERUSER=admin 426 | restart: always 427 | network_mode: bridge 428 | 429 | music-tag-web: 430 | image: xhongc/music_tag_web:latest 431 | container_name: music-tag-web 432 | ports: 433 | - 21005:8001 434 | volumes: 435 | - /vol1/1000/Music:/app/media 436 | - /vol1/1000/Docker/music-tag-web:/app/data 437 | restart: always 438 | network_mode: bridge 439 | 440 | nastool: 441 | image: hsuyelin/nas-tools:latest 442 | container_name: nastool 443 | ports: 444 | - 20000:3000 445 | volumes: 446 | - /vol1/1000/Docker/nastool:/config 447 | - /vol1/1000/Video:/downloads 448 | environment: 449 | - PUID=1000 450 | - PGID=1001 451 | - UMASK=022 452 | - NASTOOL_AUTO_UPDATE=false 453 | - NASTOOL_CN_UPDATE=false 454 | - REPO_URL=https://ghproxy.com/https://github.com/hsuyelin/nas-tools.git 455 | restart: always 456 | network_mode: bridge 457 | 458 | navidrome: 459 | image: deluan/navidrome:latest 460 | container_name: navidrome 461 | ports: 462 | - 21000:4533 463 | volumes: 464 | - /vol1/1000/Docker/navidrome:/data 465 | - /vol1/1000/Music:/music 466 | restart: always 467 | network_mode: bridge 468 | 469 | newsnow: 470 | image: ghcr.io/ourongxing/newsnow:latest 471 | container_name: newsnow 472 | ports: 473 | - 30025:4444 474 | environment: 475 | - INIT_TABLE=true 476 | - ENABLE_CACHE=true 477 | network_mode: bridge 478 | restart: always 479 | 480 | npc: 481 | image: yisier1/npc:latest 482 | container_name: npc 483 | volumes: 484 | - /vol1/1000/Docker/npc:/conf 485 | command: -server=127.0.0.1:8024 -vkey=自行填写密钥 -type=tcp 486 | restart: always 487 | network_mode: host 488 | 489 | ollama: 490 | image: ollama/ollama:latest 491 | container_name: ollama 492 | ports: 493 | - 26025:11434 494 | volumes: 495 | - /vol1/1000/Docker/ollama:/root/.ollama 496 | - /vol1/1000/Docker/ollama/models:/data/models 497 | environment: 498 | - TZ=Asia/Shanghai 499 | restart: always 500 | network_mode: bridge 501 | 502 | open-webui: 503 | image: ghcr.io/open-webui/open-webui:latest 504 | container_name: open-webui 505 | ports: 506 | - 26030:8080 507 | volumes: 508 | - /vol1/1000/Docker/open-webui:/app/backend/data 509 | environment: 510 | - ENABLE_OPENAI_API=False 511 | - OFFLINE_MODE=True 512 | - OLLAMA_BASE_URL=http://127.0.0.1:26025 513 | - USE_OLLAMA_DOCKER=False 514 | - TZ=Asia/Shanghai 515 | restart: always 516 | network_mode: bridge 517 | 518 | qbittorrent: 519 | image: linuxserver/qbittorrent:4.6.6 520 | container_name: qbittorrent 521 | ports: 522 | - 28000:28000 523 | volumes: 524 | - /vol1/1000/Docker/qbittorrent:/config 525 | - /vol1/1000/Video:/downloads 526 | environment: 527 | - PUID=1000 528 | - PGID=1001 529 | - TZ=Asia/Shanghai 530 | - WEBUI_PORT=28000 531 | restart: always 532 | network_mode: bridge 533 | 534 | qiandao: 535 | image: qdtoday/qd:latest 536 | container_name: qiandao 537 | ports: 538 | - 30035:80 539 | volumes: 540 | - /vol1/1000/Docker/qiandao/:/usr/src/app/config 541 | restart: always 542 | network_mode: bridge 543 | 544 | qinglong: 545 | image: whyour/qinglong:latest 546 | container_name: qinglong 547 | ports: 548 | - 30015:5700 549 | volumes: 550 | - /vol1/1000/Docker/qinglong:/ql/data 551 | environment: 552 | - QlPort=5700 553 | restart: always 554 | network_mode: bridge 555 | 556 | reader: 557 | image: hectorqin/reader:latest 558 | container_name: reader 559 | ports: 560 | - 22000:8080 561 | volumes: 562 | - /vol1/1000/Docker/reader/log:/log 563 | - /vol1/1000/Docker/reader/storage:/storage 564 | restart: always 565 | network_mode: bridge 566 | 567 | rustdesk-server: 568 | image: rustdesk/rustdesk-server-s6:latest 569 | container_name: rustdesk-server 570 | ports: 571 | - 30065:21115 572 | - 30066:21116 573 | - 30066:21116/udp 574 | - 30067:21117 575 | - 30068:21118 576 | - 30069:21119 577 | environment: 578 | - RELAY=域名:端口 579 | - ENCRYPTED_ONLY=1 580 | volumes: 581 | - /vol1/1000/Docker/rustdesk:/data 582 | restart: always 583 | network_mode: bridge 584 | 585 | siyuan-note-unlock: 586 | image: apkdv/siyuan-unlock:latest 587 | container_name: siyuan-note-unlock 588 | ports: 589 | - 26035:6806 590 | command: 591 | - --workspace=/siyuan/workspace/ 592 | - --accessAuthCode=100 593 | volumes: 594 | - /vol1/1000/Docker/siyuan-note-unlock:/siyuan/workspace 595 | environment: 596 | - PUID=1000 597 | - PGID=1001 598 | - UMASK=022 599 | - TZ=Asia/Shanghai 600 | - LANG=zh_CN.UTF-8 601 | - LC_ALL=zh_CN.UTF-8 602 | restart: always 603 | network_mode: bridge 604 | 605 | stirling-pdf: 606 | image: stirlingtools/stirling-pdf:latest 607 | container_name: stirling-pdf 608 | ports: 609 | - 26015:8080 610 | volumes: 611 | - /vol1/1000/Docker/stirling-pdf/trainingData:/usr/share/tessdata 612 | - /vol1/1000/Docker/stirling-pdf/extraConfigs:/configs 613 | - /vol1/1000/Docker/stirling-pdf/customFiles:/customFiles/ 614 | - /vol1/1000/Docker/stirling-pdf/logs:/logs/ 615 | - /vol1/1000/Docker/stirling-pdf/pipeline:/pipeline/ 616 | environment: 617 | - DOCKER_ENABLE_SECURITY=false 618 | - LANGS=en_GB 619 | restart: always 620 | network_mode: bridge 621 | 622 | sun-panel: 623 | image: hslr/sun-panel:latest 624 | container_name: sun-panel 625 | ports: 626 | - 30005:3002 627 | volumes: 628 | - /vol1/1000/Docker/sun-panel:/app/conf 629 | - /var/run/docker.sock:/var/run/docker.sock 630 | restart: always 631 | network_mode: bridge 632 | 633 | synctv: 634 | image: synctvorg/synctv:latest 635 | container_name: synctv 636 | ports: 637 | - 20040:8080 638 | volumes: 639 | - /vol1/1000/Docker/synctv:/root/.synctv 640 | restart: always 641 | network_mode: bridge 642 | 643 | tailscale: 644 | image: tailscale/tailscale:latest 645 | container_name: tailscale 646 | environment: 647 | - TS_AUTHKEY=密钥 648 | - TS_STATE_DIR=/var/lib/tailscale 649 | - TS_ROUTES=127.0.0.1/24 650 | restart: always 651 | network_mode: host 652 | 653 | taoSync: 654 | image: dr34m/tao-sync:latest 655 | container_name: taoSync 656 | ports: 657 | - 30045:8023 658 | volumes: 659 | - /vol1/1000/Docker/taoSync:/app/data 660 | restart: always 661 | network_mode: bridge 662 | 663 | transmission: 664 | image: linuxserver/transmission:4.0.5 665 | container_name: transmission 666 | ports: 667 | - 28005:9091 668 | volumes: 669 | - /vol1/1000/Docker/transmission:/config 670 | - /vol1/1000/Video:/downloads 671 | environment: 672 | - PUID=1000 673 | - PGID=1001 674 | - TZ=Asia/Shanghai 675 | - TRANSMISSION_WEB_HOME=/config/webui/Transmission Theme 676 | - USER=root 677 | - PASS=root 678 | restart: always 679 | network_mode: bridge 680 | 681 | upsnap: 682 | image: ghcr.io/seriousm4x/upsnap:3.0.3 683 | container_name: upsnap 684 | command: ["./upsnap", "serve", "--http", "0.0.0.0:30070"] 685 | volumes: 686 | - /vol1/1000/Docker/upsnap:/app/pb_data 687 | environment: 688 | - TZ=Asia/Shanghai 689 | - UPSNAP_INTERVAL=@every 10s 690 | - UPSNAP_SCAN_RANGE=127.0.0.0/24 691 | - UPSNAP_WEBSITE_TITLE=网络唤醒 692 | healthcheck: 693 | test: wget --no-verbose --tries=1 --spider http://localhost:30070/api/health || exit 1 694 | interval: 1m 695 | timeout: 10s 696 | retries: 3 697 | restart: always 698 | network_mode: host 699 | 700 | v2raya: 701 | image: v2raya/v2raya:latest 702 | container_name: v2raya 703 | privileged: true 704 | ports: 705 | - 27010:2017 706 | volumes: 707 | - /vol1/1000/Docker/v2raya:/etc/v2raya 708 | restart: always 709 | network_mode: bridge 710 | 711 | vaultwarden: 712 | image: vaultwarden/server:latest 713 | container_name: vaultwarden 714 | ports: 715 | - 30080:80 716 | volumes: 717 | - /vol1/1000/Docker/vaultwarden:/data 718 | environment: 719 | - DOMAIN=https://vaultwarden.example.com 720 | - SIGNUPS_ALLOWED=true 721 | restart: always 722 | network_mode: bridge 723 | 724 | vertex: 725 | image: lswl/vertex:latest 726 | container_name: vertex 727 | ports: 728 | - 30020:32110 729 | volumes: 730 | - /vol1/1000/Docker/vertex:/vertex 731 | environment: 732 | - PORT=32110 733 | - TZ=Asia/Shanghai 734 | restart: always 735 | network_mode: bridge 736 | 737 | verysync: 738 | image: jonnyan404/verysync:latest 739 | container_name: verysync 740 | ports: 741 | - 26010:8886 742 | volumes: 743 | - /vol1/1000/Synchronous:/data 744 | restart: always 745 | network_mode: bridge 746 | 747 | vscode: 748 | image: linuxserver/code-server:latest 749 | container_name: vscode 750 | ports: 751 | - 30055:8443 752 | volumes: 753 | - /vol1/1000/Docker/vscode:/config 754 | environment: 755 | - TZ=Asia/Shanghai 756 | - PASSWORD=password 757 | restart: always 758 | network_mode: bridge 759 | 760 | wallos: 761 | image: bellamy/wallos:latest 762 | container_name: wallos 763 | ports: 764 | - 25010:80 765 | volumes: 766 | - /vol1/1000/Docker/wallos/data:/var/www/html/db 767 | - /vol1/1000/Docker/wallos/logos:/var/www/html/images/uploads/logos 768 | environment: 769 | - TZ=Asia/Shanghai 770 | restart: always 771 | network_mode: bridge 772 | 773 | watchtower: 774 | image: containrrr/watchtower:latest 775 | container_name: watchtower 776 | volumes: 777 | - /var/run/docker.sock:/var/run/docker.sock 778 | environment: 779 | - WATCHTOWER_RUN_ONCE=true 780 | - TZ=Asia/Shanghai 781 | restart: always 782 | command: --schedule "0 0 20 * * 0" --cleanup 783 | 784 | wechat: 785 | image: ricwang/docker-wechat:latest 786 | container_name: wechat 787 | privileged: true 788 | ports: 789 | - 26005:5800 790 | - 26006:5900 791 | volumes: 792 | - /vol1/1000/Docker/wechat/config:/root/.xwechat 793 | - /vol1/1000/Docker/wechat/files:/root/xwechat_files 794 | - /vol1/1000/Downloads:/root/downloads 795 | environment: 796 | - TZ=Asia/Shanghai 797 | - LANG=zh_CN.UTF-8 798 | - USER_ID=0 799 | - GROUP_ID=0 800 | - WEB_AUDIO=0 801 | network_mode: bridge 802 | restart: always 803 | 804 | wps-office: 805 | image: linuxserver/wps-office:chinese 806 | container_name: wps-office 807 | ports: 808 | - 26000:3000 809 | - 26001:3001 810 | volumes: 811 | - /vol1/1000/Docker/wps-office/config:/config 812 | - /vol1/1000/Docker/wps-office/Desktop:/config/Desktop 813 | - /vol1/1000/Docker/wps-office/Fonts:/usr/share/fonts/wps-fonts 814 | environment: 815 | - PUID=1000 816 | - PGID=1001 817 | - TZ=Asia/Shanghai 818 | - CUSTOM_USER=admin 819 | - PASSWORD=admin 820 | restart: always 821 | network_mode: bridge 822 | 823 | xiaoaimusic: 824 | image: hanxi/xiaomusic:latest 825 | container_name: xiaoaimusic 826 | ports: 827 | - 25025:8090 828 | volumes: 829 | - /vol1/1000/Docker/xiaoaimusic:/app/conf 830 | - /vol1/1000/Music:/app/music 831 | environment: 832 | - XIAOMUSIC_PUBLIC_PORT=8090 833 | restart: always 834 | network_mode: bridge 835 | 836 | xunlei: 837 | image: cnk3x/xunlei:latest 838 | container_name: xunlei 839 | privileged: true 840 | ports: 841 | - 28010:2345 842 | volumes: 843 | - /vol1/1000/Docker/xunlei:/xunlei/data 844 | - /vol1/1000/Downloads:/xunlei/downloads 845 | environment: 846 | - XL_GID=0 847 | - XL_UID=0 848 | - TZ=Asia/Shanghai 849 | - XL_DASHBOARD_USERNAME=admin 850 | - XL_DASHBOARD_PASSWORD=admin 851 | restart: always 852 | network_mode: bridge 853 | 854 | yesplaymusic: 855 | image: fogforest/yesplaymusic:latest 856 | container_name: yesplaymusic 857 | ports: 858 | - 21015:80 859 | restart: always 860 | network_mode: bridge 861 | 862 | zerotier: 863 | image: zerotier/zerotier:latest 864 | container_name: zerotier 865 | privileged: true 866 | volumes: 867 | - /vol1/1000/Docker/zerotier:/var/lib/zerotier-one 868 | restart: always 869 | network_mode: host 870 | -------------------------------------------------------------------------------- /Last_Three_Service_Package_Free.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | RED='\033[0;31m' 4 | GREEN='\033[0;32m' 5 | YELLOW='\033[0;33m' 6 | BLUE='\033[0;34m' 7 | CYAN='\033[0;36m' 8 | MAGENTA='\033[0;35m' 9 | BOLD='\033[1m' 10 | NC='\033[0m' 11 | 12 | SEPARATOR_LENGTH=120 13 | SEPARATOR=$(printf "%${SEPARATOR_LENGTH}s" "" | tr " " "=") 14 | 15 | ACCELERATOR_OPTIONS=( 16 | "不加速(建议墙外用户使用)" 17 | "使用脚本自带加速链接: https://gitproxy.click/" 18 | "使用脚本自带加速链接: https://github.moeyy.xyz/" 19 | "使用脚本自带加速链接: https://github.tbedu.top/" 20 | "使用脚本自带加速链接: https://github.proxy.class3.fun/" 21 | "使用脚本自带加速链接: https://ghfile.geekertao.top/" 22 | "使用脚本自带加速链接: https://github.proxy.class3.fun/" 23 | "使用脚本自带加速链接: https://github-proxy.lixxing.top/" 24 | "使用脚本自带加速链接: https://ghf.无名氏.top/" 25 | "使用脚本自带加速链接: https://ghm.078465.xyz/" 26 | "使用脚本自带加速链接: https://gh-proxy.net/" 27 | "手动输入加速链接(自行寻找加速链接)" 28 | ) 29 | 30 | function show_accelerator_menu() { 31 | clear 32 | show_info 33 | echo -e "${YELLOW}${BOLD}请选择加速链接方式:(本脚本加速方式源于网络,并非本人持有,一切解释权归链接作者)${NC}" 34 | for i in "${!ACCELERATOR_OPTIONS[@]}"; do 35 | printf " ${YELLOW}%-2d. %-15s${NC}\n" $((i + 1)) "${ACCELERATOR_OPTIONS[$i]}" 36 | done 37 | echo -e "${BLUE}${BOLD}${SEPARATOR}${NC}" 38 | } 39 | 40 | function handle_accelerator_selection() { 41 | show_accelerator_menu 42 | read -e -p "请输入选项编号 (0 退出): " choice 43 | if ! [[ $choice =~ ^[0-9]+$ ]]; then 44 | echo -e "${RED}${BOLD}输入无效,请输入 0 到 12 之间的数字。${NC}" 45 | sleep 1 46 | handle_accelerator_selection 47 | fi 48 | if [ "$choice" -eq 0 ]; then 49 | echo -e "${GREEN}${BOLD}退出脚本,感谢您的使用!${NC}" 50 | exit 0 51 | elif [ "$choice" -eq 1 ]; then 52 | ACCELERATOR="" 53 | elif [ "$choice" -eq 2 ]; then 54 | ACCELERATOR="https://gitproxy.click/" 55 | elif [ "$choice" -eq 3 ]; then 56 | ACCELERATOR="https://github.moeyy.xyz/" 57 | elif [ "$choice" -eq 4 ]; then 58 | ACCELERATOR="https://github.tbedu.top/" 59 | elif [ "$choice" -eq 5 ]; then 60 | ACCELERATOR="https://github.proxy.class3.fun/" 61 | elif [ "$choice" -eq 6 ]; then 62 | ACCELERATOR="https://ghfile.geekertao.top/" 63 | elif [ "$choice" -eq 7 ]; then 64 | ACCELERATOR="https://github.proxy.class3.fun/" 65 | elif [ "$choice" -eq 8 ]; then 66 | ACCELERATOR="https://github-proxy.lixxing.top/" 67 | elif [ "$choice" -eq 9 ]; then 68 | ACCELERATOR="https://ghf.无名氏.top/" 69 | elif [ "$choice" -eq 10 ]; then 70 | ACCELERATOR="https://ghm.078465.xyz/" 71 | elif [ "$choice" -eq 11 ]; then 72 | ACCELERATOR="https://gh-proxy.net/" 73 | elif [ "$choice" -eq 12 ]; then 74 | read -e -p "请输入加速链接: " ACCELERATOR 75 | else 76 | echo -e "${RED}${BOLD}输入无效,请输入 0 到 12 之间的数字。${NC}" 77 | sleep 1 78 | handle_accelerator_selection 79 | fi 80 | } 81 | 82 | function show_info() { 83 | echo -e "${BLUE}${BOLD}${SEPARATOR}${NC}" 84 | echo "" 85 | echo -e "${BOLD}${CYAN} ██╗ █████╗ ███████╗████████╗ ████████╗██╗ ██╗██████╗ ███████╗███████╗ ███████╗██████╗ ███████╗███████╗ ${NC}" 86 | echo -e "${BOLD}${CYAN} ██║ ██╔══██╗██╔════╝╚══██╔══╝ ╚══██╔══╝██║ ██║██╔══██╗██╔════╝██╔════╝ ██╔════╝██╔══██╗██╔════╝██╔════╝ ${NC}" 87 | echo -e "${BOLD}${CYAN} ██║ ███████║███████╗ ██║ ██║ ███████║██████╔╝█████╗ █████╗ █████╗ ██████╔╝█████╗ █████╗ ${NC}" 88 | echo -e "${BOLD}${CYAN} ██║ ██╔══██║╚════██║ ██║ ██║ ██╔══██║██╔══██╗██╔══╝ ██╔══╝ ██╔══╝ ██╔══██╗██╔══╝ ██╔══╝ ${NC}" 89 | echo -e "${BOLD}${CYAN} ███████╗██║ ██║███████╗ ██║ ██║ ██║ ██║██║ ██║███████╗███████╗ ██║ ██║ ██║███████╗███████╗ ${NC}" 90 | echo -e "${BOLD}${CYAN} ╚══════╝╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝ ${NC}" 91 | echo "" 92 | echo -e "${CYAN} 博客地址:blog.yutumay.cn 作者微信:M13051661743 脚本版权:LastThree 此版本为 Free 版本,如果被骗与作者无关 ${NC}" 93 | echo -e "${CYAN} 当前您使用的 Last_Three_Service_Package_Free 脚本的版本号为:V 1.2.2 版本,请您认真核对版本号,如有问题请及时反馈 ${NC}" 94 | echo "" 95 | echo -e "${BLUE}${BOLD}${SEPARATOR}${NC}" 96 | } 97 | 98 | MAX_ATTEMPTS=3 99 | COMPOSE_FILES=( 100 | "all-in-one" 101 | "1panel" 102 | "aipan" 103 | "alist-strm" 104 | "babybuddy" 105 | "bitmagnet" 106 | "cashbook" 107 | "chinesesubfinder" 108 | "cloud189" 109 | "clouddrive2" 110 | "cloudsaver" 111 | "dockge" 112 | "dpanel" 113 | "emby" 114 | "emulatorjs" 115 | "ezbookkeeping" 116 | "firefox" 117 | "frpc" 118 | "godoos" 119 | "halo" 120 | "hanime-server" 121 | "homeassistant" 122 | "homebox" 123 | "icloudpd" 124 | "immich" 125 | "ip-tool" 126 | "iptv-api" 127 | "istoreos" 128 | "iyuuplus" 129 | "jackett" 130 | "jellyfin-library-poster" 131 | "jellyfin" 132 | "kkfileview" 133 | "komga" 134 | "libretv" 135 | "lsky-pro" 136 | "lucky" 137 | "lyricapi" 138 | "mariadb" 139 | "mdcx" 140 | "mediago" 141 | "metatube" 142 | "moontv" 143 | "moviepilot" 144 | "mtphotos" 145 | "music-tag-web" 146 | "mysql" 147 | "nastool" 148 | "navidrome" 149 | "newsnow" 150 | "npc" 151 | "ollama" 152 | "open-webui" 153 | "openlist" 154 | "php-epg" 155 | "postgres" 156 | "qbittorrent" 157 | "qiandao" 158 | "qinglong" 159 | "reader" 160 | "rustdesk-server" 161 | "safeline" 162 | "siyuan-note-unlock" 163 | "stirling-pdf" 164 | "sun-panel" 165 | "synctv" 166 | "tailscale" 167 | "taoSync" 168 | "teamspeak" 169 | "transmission" 170 | "upsnap" 171 | "v2raya" 172 | "vaultwarden" 173 | "vertex" 174 | "verysync" 175 | "vscode" 176 | "wallos" 177 | "watchtower" 178 | "wechat" 179 | "wps-office" 180 | "xiaoaimusic" 181 | "xunlei" 182 | "yesplaymusic" 183 | "zerotier" 184 | ) 185 | SERVICE_ALIASES=( 186 | "三人行精简版集成" 187 | "服务器面板" 188 | "网盘资源索引器" 189 | "Strm流文件生成" 190 | "育儿面板" 191 | "种子爬取器" 192 | "记账工具" 193 | "中文字幕下载器" 194 | "天翼网盘strm" 195 | "网盘挂载器" 196 | "网盘资源转存器" 197 | "Docker可视化工具" 198 | "Docker监控工具" 199 | "媒体服务器开心版" 200 | "复古掌机模拟器" 201 | "记账工具" 202 | "火狐浏览器" 203 | "穿透工具" 204 | "办公轻量化系统" 205 | "博客网站" 206 | "里番在线观看" 207 | "智能家具管理面板" 208 | "家庭资产管理面板" 209 | "苹果云照片转存器" 210 | "AI相册" 211 | "ip工具箱" 212 | "iptv源" 213 | "软路由" 214 | "转辅种工具" 215 | "资源索引器" 216 | "媒体服务器自动生成海报" 217 | "媒体服务器" 218 | "在线文件查看工具" 219 | "漫画服务器" 220 | "电视剧在线观看" 221 | "私人图床" 222 | "网络转发" 223 | "音流刮削音乐" 224 | "数据库" 225 | "小姐姐刮削服务器" 226 | "流媒体下载器" 227 | "小姐姐刮削服务器" 228 | "在线影院" 229 | "影视管理面板" 230 | "AI相册" 231 | "音乐刮削器" 232 | "数据库" 233 | "影视管理面板" 234 | "音乐服务器" 235 | "最新资讯获取" 236 | "穿透工具" 237 | "智能体" 238 | "AI可视化面板" 239 | "网盘挂载" 240 | "IPTV工具" 241 | "数据库" 242 | "下载器" 243 | "每日签到" 244 | "脚本管理面板" 245 | "阅读服务器" 246 | "远程桌面" 247 | "雷池WAF" 248 | "思源笔记免登录版" 249 | "PDF工具箱" 250 | "导航面板" 251 | "多人在线共享影院" 252 | "异地组网工具" 253 | "网盘同步工具" 254 | "游戏语音服务器" 255 | "下载器" 256 | "局域网络唤醒设备" 257 | "代理" 258 | "密码管理服务器" 259 | "PT刷流" 260 | "微力同步" 261 | "代码编辑器" 262 | "个人订阅管理面板" 263 | "自动更新镜像" 264 | "网页版微信" 265 | "网页版WPS" 266 | "小爱音响" 267 | "下载器" 268 | "音乐播放器" 269 | "异地组网工具" 270 | ) 271 | 272 | SYSTEMS=("fnOS") 273 | FRIENDLY_SYSTEMS=("飞牛系统") 274 | 275 | function check_root_user() { 276 | if [ "$EUID" -ne 0 ]; then 277 | echo -e "${YELLOW}当前不是 root 用户,将尝试获取 root 权限。请输入 root 密码。${NC}" 278 | sudo -i << 'EOF' 279 | bash "$0" 280 | EOF 281 | exit 0 282 | fi 283 | } 284 | 285 | function select_system() { 286 | selected_system="${SYSTEMS[0]}" 287 | friendly_selected="${FRIENDLY_SYSTEMS[0]}" 288 | } 289 | 290 | PAGE_SIZE=20 291 | current_page=1 292 | 293 | function show_menu() { 294 | clear 295 | show_info 296 | local start_index=$(( (current_page - 1) * PAGE_SIZE )) 297 | local end_index=$(( start_index + PAGE_SIZE - 1 )) 298 | if [ $end_index -ge ${#COMPOSE_FILES[@]} ]; then 299 | end_index=$(( ${#COMPOSE_FILES[@]} - 1 )) 300 | fi 301 | for ((i = start_index; i <= end_index; i++)); do 302 | printf "%2d. %-20s - %s\n" $((i + 1)) "${COMPOSE_FILES[i]}" "${SERVICE_ALIASES[i]}" 303 | done 304 | echo -e "${BLUE}${BOLD}${SEPARATOR}${NC}" 305 | local extra_prompt="" 306 | if [ $(( (current_page - 1) * PAGE_SIZE )) -gt 0 ]; then 307 | extra_prompt+="输入 p 上一页" 308 | fi 309 | if [ $(( (current_page) * PAGE_SIZE )) -lt ${#COMPOSE_FILES[@]} ]; then 310 | if [ -n "$extra_prompt" ]; then 311 | extra_prompt+="," 312 | fi 313 | extra_prompt+="输入 n 下一页" 314 | fi 315 | local main_prompt="主要操作:请输入要下载的服务序号(可多个,用空格分隔)" 316 | if [ -n "$extra_prompt" ]; then 317 | main_prompt+=",$extra_prompt" 318 | fi 319 | echo -e "${YELLOW}$main_prompt${NC}" 320 | echo -e "${CYAN}其他操作:0 - 退出 F - 搜索 D - 删除容器 U - 查UID/GID NET - 建网络${NC}" 321 | echo -e "${BLUE}${BOLD}${SEPARATOR}${NC}" 322 | } 323 | 324 | SAVED_PATH_FILE=".saved_path" 325 | 326 | function handle_input() { 327 | local input 328 | read -e -p "请输入序号或 f 或 d 或 u 或 net 或 p 或 n: " input 329 | case $input in 330 | 0) 331 | echo -e "${YELLOW}退出脚本。${NC}" 332 | exit 0 333 | ;; 334 | f) 335 | handle_search_input 336 | ;; 337 | d) 338 | handle_delete_container_input 339 | ;; 340 | u) 341 | handle_query_uid_gid_input 342 | ;; 343 | net) 344 | create_docker_network 345 | ;; 346 | p) 347 | if [ $current_page -gt 1 ]; then 348 | current_page=$((current_page - 1)) 349 | fi 350 | ;; 351 | n) 352 | if [ $(( (current_page) * PAGE_SIZE )) -lt ${#COMPOSE_FILES[@]} ]; then 353 | current_page=$((current_page + 1)) 354 | fi 355 | ;; 356 | *) 357 | handle_number_choices_input "$input" 358 | ;; 359 | esac 360 | } 361 | 362 | function handle_search_input() { 363 | read -e -p "请输入要搜索的镜像名称: " search_name 364 | local found=false 365 | for idx in "${!COMPOSE_FILES[@]}"; do 366 | file_name="${COMPOSE_FILES[$idx]}" 367 | if [[ $file_name == *"$search_name"* ]]; then 368 | read -e -p "找到匹配的容器: $file_name,是否为该容器?(y/n): " confirm 369 | if [[ $confirm =~ ^[Yy]$ ]]; then 370 | choice=$((idx + 1)) 371 | choices=("$choice") 372 | found=true 373 | break 374 | fi 375 | fi 376 | done 377 | if $found; then 378 | continue_loop=false 379 | else 380 | echo -e "${RED}未找到匹配的镜像,返回选择页面。${NC}" 381 | sleep 2 382 | fi 383 | } 384 | 385 | function handle_delete_container_input() { 386 | echo -e "${YELLOW}以下是当前正在运行的 Docker 容器列表:${NC}" 387 | local running_containers=$(docker ps --format "{{.Names}}") 388 | if [ -z "$running_containers" ]; then 389 | echo -e "${YELLOW}没有找到正在运行的 Docker 容器。${NC}" 390 | else 391 | echo "$running_containers" 392 | fi 393 | read -e -p "请输入要删除的容器名称(可多个,用空格分隔): " containers_to_delete 394 | local IFS=' ' 395 | local -a container_array=($containers_to_delete) 396 | for container in "${container_array[@]}"; do 397 | docker stop "$container" 2>/dev/null 398 | docker rm "$container" 2>/dev/null 399 | if [ $? -eq 0 ]; then 400 | echo -e "${GREEN}容器 $container 删除成功。${NC}" 401 | else 402 | echo -e "${RED}容器 $container 删除失败。${NC}" 403 | fi 404 | done 405 | read -e -p "按任意键继续选择其他操作..." -n 1 -s 406 | printf "\033[2K\r" 407 | } 408 | 409 | function handle_query_uid_gid_input() { 410 | read -e -p "请输入要查询的用户名: " username 411 | local user_info=$(id "$username" 2>/dev/null) 412 | if [ $? -eq 0 ]; then 413 | local uid=$(echo "$user_info" | sed 's/.*uid=\([0-9]*\).*/\1/') 414 | local gid=$(echo "$user_info" | sed 's/.*gid=\([0-9]*\).*/\1/') 415 | echo -e "${GREEN}用户 $username 的 UID 是: $uid,GID 是: $gid${NC}" 416 | else 417 | echo -e "${RED}用户 $username 不存在。${NC}" 418 | fi 419 | read -e -p "按任意键继续选择其他操作..." -n 1 -s 420 | printf "\033[2K\r" 421 | } 422 | 423 | function create_docker_network() { 424 | echo -e "${YELLOW}当前 Docker 网络列表:${NC}" 425 | docker network ls 426 | while true; do 427 | read -e -p "请输入要创建的网络名称 (输入 0 返回主菜单): " network_name 428 | if [ "$network_name" = "0" ]; then 429 | echo -e "${YELLOW}返回主菜单。${NC}" 430 | break 431 | fi 432 | docker network create --driver bridge "$network_name" 433 | if [ $? -eq 0 ]; then 434 | echo -e "${GREEN}网络 $network_name 创建成功。${NC}" 435 | else 436 | echo -e "${RED}网络 $network_name 创建失败。${NC}" 437 | fi 438 | read -e -p "按任意键继续选择其他操作..." -n 1 -s 439 | printf "\033[2K\r" 440 | break 441 | done 442 | } 443 | 444 | function handle_service_alias_input() { 445 | clear 446 | show_info 447 | echo -e "${YELLOW}服务中文名和英文名对照表:${NC}" 448 | for i in "${!COMPOSE_FILES[@]}"; do 449 | printf "%2d. %-20s - %s\n" $((i + 1)) "${COMPOSE_FILES[i]}" "${SERVICE_ALIASES[i]}" 450 | done 451 | read -e -p "请输入要下载的服务序号(可多个,用空格分隔,输入 0 返回主菜单): " input_choices 452 | if [[ "$input_choices" == "0" ]]; then 453 | continue_loop=true 454 | return 455 | fi 456 | local IFS=' ' 457 | read -r -a temp_choices <<< "$input_choices" 458 | choices=() 459 | for choice in "${temp_choices[@]}"; do 460 | if [[ $choice =~ ^[0-9]+$ ]]; then 461 | if [[ $choice -ge 1 && $choice -le ${#COMPOSE_FILES[@]} ]]; then 462 | choices+=("$choice") 463 | else 464 | echo -e "${RED}无效的选择: $choice,请输入 1 - ${#COMPOSE_FILES[@]} 之间的序号。${NC}" 465 | continue_loop=true 466 | return 467 | fi 468 | else 469 | echo -e "${RED}无效的输入格式,每个选项应该是数字。${NC}" 470 | continue_loop=true 471 | return 472 | fi 473 | done 474 | continue_loop=false 475 | } 476 | 477 | function handle_number_choices_input() { 478 | local input="$1" 479 | local IFS=' ' 480 | read -r -a temp_choices <<< "$input" 481 | local start_index=$(( (current_page - 1) * PAGE_SIZE + 1 )) 482 | local end_index=$(( start_index + PAGE_SIZE - 1 )) 483 | if [ $end_index -gt ${#COMPOSE_FILES[@]} ]; then 484 | end_index=${#COMPOSE_FILES[@]} 485 | fi 486 | choices=() 487 | for choice in "${temp_choices[@]}"; do 488 | if [[ $choice =~ ^[0-9]+$ ]]; then 489 | if [[ $choice -ge $start_index && $choice -le $end_index ]]; then 490 | choices+=("$choice") 491 | else 492 | echo -e "${RED}无效的选择: $choice,请输入当前页面的序号($start_index - $end_index)。${NC}" 493 | sleep 2 494 | continue_loop=true 495 | return 496 | fi 497 | else 498 | echo -e "${RED}无效的输入格式,每个选项应该是数字。${NC}" 499 | sleep 2 500 | continue_loop=true 501 | return 502 | fi 503 | done 504 | continue_loop=false 505 | } 506 | 507 | function download_compose_file() { 508 | local idx=$1 509 | local file="${COMPOSE_FILES[$idx]}.yml" 510 | local url="${ACCELERATOR}https://raw.githubusercontent.com/ATaKi-Myt/Last_Three_Service_Package_Free/refs/heads/main/${selected_system}/${file}" 511 | if [ -f "$file" ]; then 512 | read -e -p "文件 $file 已存在,是否重新下载?(y/n): " re_download 513 | if [[ $re_download =~ ^[Yy]$ ]]; then 514 | wget -q "$url" -O "$file" 515 | if [ $? -eq 0 ]; then 516 | echo -e "${GREEN}文件 $file 重新下载成功。${NC}" 517 | read -e -p "下载完成,是否继续运行?(y/n): " continue_run 518 | if [[ $continue_run =~ ^[Yy]$ ]]; then 519 | return 0 520 | else 521 | return 1 522 | fi 523 | else 524 | echo -e "${RED}文件 $file 重新下载失败。${NC}" 525 | read -e -p "按任意键继续选择其他容器..." -n 1 -s 526 | printf "\033[2K\r" 527 | return 1 528 | fi 529 | else 530 | echo -e "${YELLOW}跳过下载,使用已存在的文件 $file。${NC}" 531 | read -e -p "使用已存在文件,是否继续运行?(y/n): " continue_run 532 | if [[ $continue_run =~ ^[Yy]$ ]]; then 533 | return 0 534 | else 535 | return 1 536 | fi 537 | fi 538 | else 539 | wget -q "$url" -O "$file" 540 | if [ $? -eq 0 ]; then 541 | echo -e "${GREEN}文件 $file 下载成功。${NC}" 542 | read -e -p "下载完成,是否继续运行?(y/n): " continue_run 543 | if [[ $continue_run =~ ^[Yy]$ ]]; then 544 | return 0 545 | else 546 | return 1 547 | fi 548 | else 549 | echo -e "${RED}文件 $file 下载失败。${NC}" 550 | read -e -p "按任意键继续选择其他容器..." -n 1 -s 551 | printf "\033[2K\r" 552 | return 1 553 | fi 554 | fi 555 | } 556 | 557 | function path_replace() { 558 | local file=$1 559 | # 仅保留飞牛系统路径提示和替换逻辑 560 | echo -e "${YELLOW}飞牛路径示例:/vol1/*/ * vol1 存储空间1 * 用户ID${NC}" 561 | echo -e "${YELLOW}所有 * 均改为自己对应的数字${NC}" 562 | read -e -p "是否要进行路径替换操作?(y/n): " do_replace 563 | if [[ $do_replace =~ ^[Yy]$ ]]; then 564 | read -e -p "请输入替换后的新路径(输入 l 使用保存的路径): " new_path 565 | if [[ $new_path == "l" ]]; then 566 | if [ -f "$SAVED_PATH_FILE" ]; then 567 | new_path=$(cat "$SAVED_PATH_FILE") 568 | echo -e "${YELLOW}已加载保存的路径: $new_path${NC}" 569 | else 570 | echo -e "${RED}未找到保存的路径,请先保存路径。${NC}" 571 | return 572 | fi 573 | fi 574 | echo -e "\n${YELLOW}即将在所有 compose.yml 文件中执行替换:${NC}" 575 | local sed_commands=("s|/vol1/1000/|$new_path|g") 576 | echo -e "${YELLOW}/vol1/1000/ → [新路径] $new_path${NC}" 577 | read -e -p "确认替换?(y/n) " confirm 578 | if [[ $confirm =~ ^[Yy]$ ]]; then 579 | for cmd in "${sed_commands[@]}"; do 580 | sed -i "$cmd" "$file" 581 | done 582 | echo -e "${GREEN}路径替换完成。${NC}" 583 | else 584 | echo -e "${YELLOW}取消路径替换。${NC}" 585 | fi 586 | fi 587 | } 588 | 589 | function modify_ports() { 590 | local file=$1 591 | read -e -p "是否要修改端口?(y/n): " do_port_change 592 | if [[ $do_port_change =~ ^[Yy]$ ]]; then 593 | local port_count=0 594 | local in_ports=false 595 | local existing_ports=() 596 | while IFS= read -r line; do 597 | if [[ $line =~ ^([[:space:]]*)[Pp][Oo][Rr][Tt][Ss]:[[:space:]]*$ ]]; then 598 | in_ports=true 599 | continue 600 | elif $in_ports && [[ $line =~ ^([[:space:]]*) ]]; then 601 | local current_indent=${#BASH_REMATCH[1]} 602 | if [ $current_indent -lt ${#BASH_REMATCH[1]} ]; then 603 | in_ports=false 604 | fi 605 | fi 606 | if $in_ports && [[ $line =~ ^[[:space:]]*-[[:space:]]*([0-9]+):([0-9]+) ]]; then 607 | ((port_count++)) 608 | existing_ports+=("${BASH_REMATCH[1]}:${BASH_REMATCH[2]}") 609 | fi 610 | done < "$file" 611 | echo -e "${YELLOW}查询到文件中有 $port_count 个端口需要修改。当前端口如下:${NC}" 612 | for port in "${existing_ports[@]}"; do 613 | echo -e "${YELLOW}- $port${NC}" 614 | done 615 | read -e -p "请输入新的主机端口(共 $port_count 个,用空格分隔): " new_host_ports 616 | local IFS=' ' 617 | local -a new_ports_array=($new_host_ports) 618 | if [ ${#new_ports_array[@]} -ne $port_count ]; then 619 | echo -e "${RED}输入的端口数量与需要修改的端口数量不匹配,请重新操作。${NC}" 620 | return 1 621 | fi 622 | local port_index=0 623 | local in_ports=false 624 | local ports_indent=0 625 | local temp_file=$(mktemp) 626 | while IFS= read -r line; do 627 | if [[ $line =~ ^([[:space:]]*)[Pp][Oo][Rr][Tt][Ss]:[[:space:]]*$ ]]; then 628 | in_ports=true 629 | ports_indent=${#BASH_REMATCH[1]} 630 | echo "$line" >> "$temp_file" 631 | continue 632 | elif $in_ports && [[ $line =~ ^([[:space:]]*) ]]; then 633 | local current_indent=${#BASH_REMATCH[1]} 634 | if [ $current_indent -lt $ports_indent ]; then 635 | in_ports=false 636 | fi 637 | fi 638 | 639 | if $in_ports && [[ $line =~ ^[[:space:]]*-[[:space:]]*([0-9]+):([0-9]+) ]]; then 640 | if [ $port_index -lt ${#new_ports_array[@]} ]; then 641 | local container_port="${BASH_REMATCH[2]}" 642 | local new_host_port="${new_ports_array[$port_index]}" 643 | local new_port_line="${line//${BASH_REMATCH[1]}/$new_host_port}" 644 | echo -e "${YELLOW}将端口 ${BASH_REMATCH[1]}:${container_port} 更改为 ${new_host_port}:${container_port}${NC}" 645 | echo "$new_port_line" >> "$temp_file" 646 | ((port_index++)) 647 | else 648 | echo "$line" >> "$temp_file" 649 | fi 650 | else 651 | echo "$line" >> "$temp_file" 652 | fi 653 | done < "$file" 654 | 655 | mv "$temp_file" "$file" 656 | 657 | echo -e "${GREEN}端口修改完成。${NC}" 658 | fi 659 | } 660 | 661 | function check_and_create_volumes() { 662 | local file=$1 663 | local in_volumes=false 664 | local volumes_indent=0 665 | while IFS= read -r line; do 666 | if [[ $line =~ ^([[:space:]]*)[Vv][Oo][Ll][Uu][Mm][Ee][Ss]:[[:space:]]*$ ]]; then 667 | in_volumes=true 668 | volumes_indent=${#BASH_REMATCH[1]} 669 | continue 670 | elif $in_volumes && [[ $line =~ ^([[:space:]]*) ]]; then 671 | local current_indent=${#BASH_REMATCH[1]} 672 | if (( current_indent < volumes_indent )); then 673 | in_volumes=false 674 | fi 675 | fi 676 | 677 | if $in_volumes && [[ $line =~ ^[[:space:]]*-[[:space:]]*([^:]+): ]]; then 678 | local path="${BASH_REMATCH[1]}" 679 | path=$(echo "$path" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') 680 | if [[ ! $path =~ ^(http|https):// ]] && [[ ! $path =~ ^[A-Z_]+= ]]; then 681 | if [ -n "$path" ]; then 682 | if [ -d "$path" ]; then 683 | echo -e "${GREEN}路径 $path 已存在。${NC}" 684 | else 685 | echo -e "${YELLOW}路径 $path 不存在,正在创建...${NC}" 686 | mkdir -p "$path" 687 | if [ $? -eq 0 ]; then 688 | echo -e "${GREEN}路径 $path 创建成功。${NC}" 689 | else 690 | echo -e "${RED}路径 $path 创建失败。${NC}" 691 | break 692 | fi 693 | fi 694 | fi 695 | fi 696 | fi 697 | done < "$file" 698 | } 699 | 700 | function pull_image() { 701 | local file=$1 702 | echo -e "${YELLOW}开始拉取镜像,请稍候...${NC}" 703 | docker compose -f "$file" pull | while IFS= read -r line; do 704 | if [[ $line =~ ([0-9]+)% ]]; then 705 | local percent="${BASH_REMATCH[1]}" 706 | local bar_length=50 707 | local filled_length=$((percent * bar_length / 100)) 708 | local empty_length=$((bar_length - filled_length)) 709 | local filled_bar=$(printf '#%.0s' $(seq 1 $filled_length)) 710 | local empty_bar=$(printf ' %.0s' $(seq 1 $empty_length)) 711 | printf "\r[%-${bar_length}s] %3d%%" "$filled_bar$empty_bar" "$percent" 712 | fi 713 | done 714 | printf "\n" 715 | if [ $? -eq 0 ]; then 716 | echo -e "${GREEN}镜像拉取成功。${NC}" 717 | else 718 | echo -e "${RED}镜像拉取失败。${NC}" 719 | read -e -p "按任意键继续选择其他容器..." -n 1 -s 720 | printf "\033[2K\r" 721 | return 1 722 | fi 723 | return 0 724 | } 725 | 726 | function start_container() { 727 | local file=$1 728 | docker compose -f "$file" up -d 2>&1 | grep -v "Found orphan containers" 729 | if [ $? -eq 0 ]; then 730 | echo -e "${GREEN}Compose 文件 $file 运行成功。${NC}" 731 | else 732 | echo -e "${RED}运行 Compose 文件 $file 失败。${NC}" 733 | fi 734 | } 735 | 736 | function main() { 737 | check_root_user 738 | handle_accelerator_selection 739 | select_system 740 | local continue_loop=true 741 | while true; do 742 | while $continue_loop; do 743 | show_menu 744 | handle_input 745 | done 746 | 747 | for choice in "${choices[@]}"; do 748 | local idx=$((choice - 1)) 749 | if ! download_compose_file "$idx"; then 750 | continue 751 | fi 752 | local file="${COMPOSE_FILES[$idx]}.yml" 753 | path_replace "$file" 754 | modify_ports "$file" 755 | check_and_create_volumes "$file" 756 | if ! pull_image "$file"; then 757 | continue 758 | fi 759 | start_container "$file" 760 | done 761 | read -e -p "按任意键继续选择其他容器..." -n 1 -s 762 | printf "\033[2K\r" 763 | continue_loop=true 764 | done 765 | } 766 | 767 | main 768 | --------------------------------------------------------------------------------