INFO
以下示例 Docker Compose 文件中的一些定义采用了我的习惯和风格。不必和我相同,按自己的需要定义即可
一些:端口映射的的外部端口、数据存储路径
docker-wechat
Compose
name: wechat
services:
wechat:
image: ricwang/docker-wechat:latest
container_name: wechat
volumes:
- /app/WeChat/.xwechat:/root/.xwechat # 程序配置
- /app/WeChat/xwechat_files:/root/xwechat_files # 聊天记录
- /app/WeChat/downloads:/root/downloads # 文件交互
- /dev/snd:/dev/snd
ports:
- 5800:5800
- 5900:5900
environment:
- LANG=zh_CN.UTF-8
- USER_ID=0
- GROUP_ID=0
- WEB_AUDIO=1
- TZ=Asia/Shanghai
privileged: trueSyncThing
Compose
name: "syncthing"
services:
Syncthing:
image: lscr.io/linuxserver/syncthing
container_name: syncthing
hostname: syncthing # 可选
network_mode: host
environment:
- PUID=3000 # NAS中的用户名和用户组
- PGID=950
- TZ=Asia/Shanghai
volumes:
- /app/syncthing/config:/config
- mynfs:/mnt/nfs
# ports:
# - 8384:8384
# - 22000:22000/tcp
# - 22000:22000/udp
# - 21027:21027/udp
restart: always
volumes:
mynfs:
external: true安装完成后,管理页在服务器的端口8384
Vault Wardens
更多提示可参考 Vaultwarden Wiki 中文版
创建管理员令牌。该令牌可以是任何字符,但建议使用随机生成的长字符串。
openssl rand -base64 48 # 生成随机的长字符串示例
Compose
# 密码管理器
services:
Vaultwarden:
image: vaultwarden/server:latest
container_name: Vaultwarden
restart: always
environment:
# 管理
SIGNUPS_ALLOWED: "true" # 创建账户后,使用 "false" 停用此选项,这样就不会有陌生人注册了
ADMIN_TOKEN: XXX
DOMAIN: "https://pwd.example.com:80" # 使用反向代理时必填;您的域名;Vaultwarden 需要知道它是 https 才能正确处理附件
# 电子邮件 用于通知
SMTP_HOST: smtp.qq.com
SMTP_PORT: 465
SMTP_FROM: xxx@qq.com
SMTP_SECURITY: force_tls
SMTP_USERNAME: xxx@qq.com
SMTP_PASSWORD: xxx
# # 移动客户端推送通知
# PUSH_ENABLED: true
# PUSH_INSTALLATION_ID: xxx
# PUSH_INSTALLATION_KEY: xxx
volumes:
- /app/Vaultwarden:/data # 数据挂载路径
ports:
- 5053:80meTube
Compose
name: metube
services:
metube:
image: ghcr.io/alexta69/metube
container_name: metube
restart: unless-stopped
ports:
- "5039:8081"
volumes:
- mysmb:/downloads
- /app/MeTube/cookie.txt:/cookies/cookies.txt
environment:
- DEFAULT_THEMEDEFAULT_THEME=Dark
# - DOWNLOAD_DIR=/mnt/nas/Download/Video
- DOWNLOAD_DIRS_INDEXABLE=true
- CUSTOM_DIRS=true
- YTDL_OPTIONS={"cookiefile":"/cookies/cookies.txt"}
volumes:
mysmb:
driver_opts:
type: "cifs"
o: "addr=192.168.5.25,username=用户,password=密码,dir_mode=0777,file_mode=0777,vers=3.0"
device: "//192.168.5.25/pool_1/Download/Video"获取Cookie
YouTube禁止未登录用户的限制较多,需要先登录。
简单的方式是,让metube 使用使用已有的凭证。
- 打开浏览器
- 安装Cookie Editor
- 在YT界面,点击
Cookie Editor的导出,选择格式Netscape - 粘贴到
/app/MeTube/cookie.txt
Open Speed Test
Compose
name: open-speed-test
version: '3.3'
services:
speedtest:
restart: unless-stopped
container_name: openspeedtest
ports:
- '5029:3000'
- '5030:3001'
image: openspeedtest/latestNavidrome
航海机场 在线音乐平台
Compose
name: "navidrome"
services:
navidrome:
image: deluan/navidrome:latest
ports:
- "5037:4533"
environment:
# Optional: put your config options customization here. Examples:
ND_LASTFM_LANGUAGE: zh-Hans
ND_COVERJPEGQUALITY: 100 # 封面Jpeg质量
ND_ENABLECOVERANIMATION: false # 启用封面动画
ND_ENABLESTARRATING: false # 在 UI 中启用 5 星评级
ND_ENABLETRANSCODINGCONFIG: true # 在 UI 中启用转码配置
# ND_CONFIGFILE: "/config/navidrome.toml"
volumes:
- "/app/Navidrome/data:/data"
- "/app/Navidrome/config:/config"
- "/mnt/NAS/Music:/music:ro" # 你的音乐文件夹
# music-tag:
# image: xhongc/music_tag_web:latest
# container_name: music-tag-web
# ports:
# - "5036:8001"
# volumes:
# - /mnt/NAS/Music:/app/media:rw
# - /app/music-tag-web/data:/app/data
# command: /start
# restart: alwaysbili-sync
同步 bilibili 中的收藏夹、视频列表、稍后再看到本地
详见bili-sync 文档
Compose
name: bili-sync
services:
bili-sync-rs:
image: amtoaer/bili-sync-rs:latest
restart: always
network_mode: bridge
# 该选项请仅在日志终端支持彩色输出时启用,否则日志中可能会出现乱码
tty: true
# 非必需设置项,推荐设置为宿主机用户的 uid 及 gid (`$uid:$gid`)
# 可以执行 `id ${user}` 获取 `user` 用户的 uid 及 gid
# 程序下载的所有文件权限将与此处的用户保持一致,不设置默认为 Root
# user: 3000:950
hostname: bili-sync-rs
container_name: bili-sync-rs
volumes:
- /app/bili-sync:/app/.config/bili-sync
- /app/jellyfin/config/metadata/People:/app/.config/bili-sync/upper_face # Jellyfin的演员信息的保存位置
- my_smb:/mnt/nas
# 还需要有一些其它必要的挂载,包括 up 主信息位置、视频下载位置
# 这些目录不是固定的,只需要确保此处的挂载与 bili-sync-rs 的配置文件相匹配
# ...
# environment:
# - RUST_BACKTRACE=full
# - PUID=3000 # NAS中的用户名和用户组
# - PGID=950
logging:
driver: "local"
volumes:
my_smb:
external: true安装应用后,按文档修改 配置文件 即可。
Suwayomi
浏览器看漫画
Compose
name: suwayomi
services:
suwayomi:
image: ghcr.io/suwayomi/tachidesk:latest
environment:
- TZ=Asia/Shanghai # 使用TZ数据库中的时区名称,详见https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
# 如果不使用本文件底部的flaresolverr容器,可以注释掉下面两行
- FLARESOLVERR_ENABLED=true
- FLARESOLVERR_URL=http://flaresolverr:8191
# ###################################################################################################
# !!! 重要 !!!
# - 服务器设置可以在WebUI中运行时更改
# - 提供环境变量将在启动容器时覆盖当前设置值
# ###################################################################################################
# 设置环境变量的示例:
# - BIND_IP=0.0.0.0
# - BIND_PORT=4567
# - SOCKS_PROXY_ENABLED=false
# - DOWNLOAD_AS_CBZ=true
# - BASIC_AUTH_ENABLED=true
# - BASIC_AUTH_USERNAME=manga
# - BASIC_AUTH_PASSWORD=hello123
# - EXTENSION_REPOS=["http://github.com/orginazation-name/repo-name", "http://github.com/orginazation-name-2/repo-name-2"]
volumes:
- /app/suwayomi/data:/home/suwayomi/.local/share/Tachidesk
# - /app/suwayomi/sources:/home/suwayomi/.local/share/Tachidesk/my_sources
# chown 1000:1000 /app/suwayomi/data # suwayomi 默认不以用户 root 运行。需要修改宿主机上的文件属主,以允许程序访问。
ports:
- "4567:4567"
restart: on-failure:3
flaresolverr:
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: flaresolverr
environment:
- TZ=Asia/Shanghai # 使用TZ数据库中的时区名称,详见https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
ports:
- "8191:8191"
restart: unless-stoppedWebUI > 设置 > 语言 :选择中文
WebUI > 设置 > 浏览 > 扩展库 :添加漫画源。
https://github.com/keiyoushi/extensions/raw/refs/heads/repo/index.min.json
https://raw.githubusercontent.com/stevenyomi/copymanga/repo/index.min.jsonWebUI > 浏览 > 插件 :在右上角选择需要的语言,安装需要的插件WebUI > 浏览 > 图源 :在右上角选择需要的语言。
INFO
部分网站需要科学上网
MCSManager
纯Docker部署
Compose
name: mcsmanager
services:
web:
image: githubyumao/mcsmanager-web:latest
ports:
- 23333:23333
volumes:
- /etc/localtime:/etc/localtime:ro
- /app/MCSManager/web/data:/opt/mcsmanager/web/data
- /app/MCSManager/web/logs:/opt/mcsmanager/web/logs
daemon:
image: githubyumao/mcsmanager-daemon:latest
restart: unless-stopped
network_mode: host
ports:
- 24444:24444
environment:
- MCSM_DOCKER_WORKSPACE_PATH=/app/MCSManager/daemon/data/InstanceData
volumes:
- /etc/localtime:/etc/localtime:ro
- /app/MCSManager/daemon/data:/opt/mcsmanager/daemon/data
- /app/MCSManager/daemon/logs:/opt/mcsmanager/daemon/logs
- /var/run/docker.sock:/var/run/docker.sockMCSManager 分为前端、后端,前者用于展示管理页,后者用于控制MC的进程。使用Docker安装,须修改后端的地址。 webUI > 节点 > 本地:远程节点 IP 地址为宿主机的IP,如 192.168.7.32。
MC Java 版服务端 运行在 容器
webUI > 应用实例 > 新建应用 > 您想部署一个什么应用实例? > Minecraft Java版游戏服务器 > .. > 请选择部署应用实例的方式? > Minecraft 快速部署:选择服务端版本,前往实例控制台。
webUI > 应用实例 > 某实例 > 功能组 > 应用实例设置 > 容器化 :启用 Docker 容器:开 ;Docker 镜像:新建镜像 > 新增镜像 > 创建 OpenJDK 17 环境镜像webUI > 应用实例 > 某实例 > 功能组 > 应用实例设置 > 容器化:选择刚刚创建的镜像。建议设置一个容器名,如mc-java
默认情况下,外部不能主动连接容器。有2个解决方案:
- 网络模式:
host - 开放端口:
19132:19132/TCP
至此,可以启动MC服务端了。在游戏中,可以用宿主机的IP+端口19132来连接。MC服务端运行在名为mc-java的容器中。
UpSnap
Compose
name: upsnap
ervices:
upsnap:
container_name: upsnap
image: ghcr.io/seriousm4x/upsnap:4
network_mode: host
restart: unless-stopped
volumes:
- /app/UpSnap/data:/app/pb_data
environment:
- TZ=Asia/Shanghai # 设置容器的时区以便于 cron 调度
# - UPSNAP_INTERVAL=@every 10s # 设置设备 ping 的间隔时间
# - UPSNAP_SCAN_RANGE=192.168.5.0/24 # 扫描范围,用于本地网络上的设备发现
# - UPSNAP_SCAN_TIMEOUT=500ms # 扫描超时是 nmap 的 --host-timeout 值,用于等待设备响应 (https://nmap.org/book/man-performance.html)
# - UPSNAP_PING_PRIVILEGED=true # 如果没有 root 用户权限,请设置为 false
# - UPSNAP_WEBSITE_TITLE=Custom name # 自定义网站标题
# # dns 用于网络扫描期间的名称解析
# dns:
# - 192.18.0.1
# - 192.18.0.2
# # 可以像这样更改容器内的监听 ip、port
# entrypoint: /bin/sh -c "./upsnap serve --http 0.0.0.0:5037"
# healthcheck:
# test: curl -fs "http://localhost:5037/api/health" || exit 1
# interval: 10s
# # 或者安装自定义包以便于关闭
# entrypoint: /bin/sh -c "apk update && apk add --no-cache <YOUR_PACKAGE> && rm -rf /var/cache/apk/* && ./upsnap serve --http 0.0.0.0:8090"Sub Store
name: sub-store
services:
sub-store:
restart: unless-stopped
environment:
- SUB_STORE_CRON=55 23 * * *
- SUB_STORE_FRONTEND_BACKEND_PATH=/4GWP5NSloOA1EgS
ports:
- 3001:3001
volumes:
- /app/sub-store:/opt/app/data
container_name: sub-store
image: xream/sub-store通过此格式的链接访问管理面板
http://<机器IP>:3001?api=http://<机器IP>:3001/<入口>例子
http://192.168.1.7:3001?api=http://192.168.1.7:3001/4GWP5NSloOA1EgS # 内网访问
https://sub.example.com?api=https://sub.example.com/4GWP5NSloOA1EgS # 公网访问以下是2套预设,可以节省一些时间。保存此内容为文件,然后在左上角导入,即可。
白嫖,付费
节点可用性测试
可以使用一个脚本,来剔除不可用的节点。
用法:在某个订阅的管理页面添加一个“操作”:脚本操作。链接为此脚本。
可以在链接的末尾添加一个#,然后写参数。参数间用&连接。更多用法可以查阅脚本的开头和在TG的说明
绕过代理
如果机器处于代理下(如软路由),可能导致结果不准。如果能绕过代理,就能解决这个问题。
一个方法是 MACvLAN。即让此应用的流量拥有自己的MAC地址,就能让OpenClash绕过此MAC地址(此应用)的流量。
Compose
name: sub-store
services:
sub-store:
restart: unless-stopped
environment:
- SUB_STORE_CRON=55 * * * *
- SUB_STORE_FRONTEND_BACKEND_PATH=/4GWP5NSloOA1EgS
ports:
- 3001:3001
volumes:
- /app/sub-store:/opt/app/data
container_name: sub-store
image: xream/sub-store:http-meta
networks:
my-macvlan:
ipv4_address: 192.168.5.30
networks:
my-macvlan:
external: trueWARNING
如果你曾用过我编写的 qbittorrent的 Docker Compose,那么网络的名称就不是这个。
绕过软路由的代理 有更多的细节。