记录一下在用或用过的一些 Docker 程序,方便下次需要的时候复制粘贴。
这里把重复使用的变量写成了 .env
配置项,将其放在 compose.yml
同路径即可生效,可以在需要变更的时候批量修改。
PUID=1000
PGID=1000
TZ=Asia/Shanghai
NETWORK=caddy
另外,使用 Caddy 或 Nginx 配置反向代理时,可以直接利用 docker 内网寻址的方式获取容器地址。因此默认注释掉了端口映射,有需要的话可以自行开启。
外部网络使用以下命令创建,例如创建一个名为 caddy
的网络:
docker network create caddy
然后需要在 compose.yml
文件末尾指定这个网络,例如:
networks:
caddy:
external: true
文件
h5ai
h5ai 是个我年轻的时候比较流行的 PHP 文件列表程序,现在有容器版本倒是方便了不少。因为 h5ai 需要开启很多 PHP 环境变量,似乎现在比较少见到大家用这个了。以前还有过内置 Dplayer 的版本。
h5ai is a modern file indexer for HTTP web servers with focus on your files. Directories are displayed in a appealing way and browsing them is enhanced by different views, a breadcrumb and a tree overview. Initially h5ai was an acronym for HTML5 Apache Index but now it supports other web servers too.
h5ai 是一款现代化的 HTTP Web 服务器文件索引器,专注于您的文件。目录以美观的方式呈现,并通过不同的视图、面包屑导航和树形概览增强了浏览体验。h5ai 最初是 HTML5 Apache Index 的缩写,但现在也支持其他 Web 服务器。
另外 h5ai 还有很多可自定义的配置项,有需要请参考:《H5AI 部署、配置与美化》。
services:
h5ai:
image: awesometic/h5ai
container_name: h5ai
# ports:
# - 80:80
environment:
- TZ=${TZ}
- PUID=${PUID}
- PGID=${PGID}
volumes:
- ./h5ai:/config
- /your/shared/dir:/h5ai
restart: unless-stopped
networks:
- ${NETWORK}
File Browser
File Browser 要比 h5ai 强悍许多,不仅可以直接编辑文件、创建分享链接,还支持多用户。功能上更接近「个人云盘」,因此可以当作轻量云盘使用。
File Browser provides a file managing interface within a specified directory and it can be used to upload, delete, preview and edit your files. It is a create-your-own-cloud-kind of software where you can just install it on your server, direct it to a path and access your files through a nice web interface.
File Browser 可以在指定目录中提供文件管理界面,支持上传、删除、预览和编辑文件。它是一款类似于 “个人云盘” 的软件,您只需将其安装在服务器上,指定路径,然后即可通过美观的 Web 界面访问文件。
我这里的配置和官方有些许不同。官方需要挂载两处文件,而我统一挂载为 /config
。
services:
filebrowser:
image: filebrowser/filebrowser:s6
container_name: filebrowser
volumes:
- ./config:/config
- ./srv:/srv
environment:
- TZ=${TZ}
- PUID=${PUID}
- PGID=${PGID}
# ports:
# - "80:80"
restart: unless-stopped
networks:
- ${NETWORK}
只是需要在 /config
文件夹中手动创建两个文件。一个是数据库文件 filebrowser.db
,另一个则是 settings.json
:
{
"port": 80,
"baseURL": "",
"address": "",
"log": "stdout",
"database": "/config/filebrowser.db",
"root": "/srv"
}
如果对 root
根目录的路径有自定义的需求,可以在 settings.json
中修改,只是相应地也要修改挂载的路径,不要忘了。
Cloudreve
Cloudreve 和前面俩不一样,是真正意义上的云盘,可以通过多种存储策略构建兼备自用或公用的网盘服务。存在付费功能,但个人版够用。
- ☁️ 支持本机、从机、七牛、阿里云 OSS、腾讯云 COS、华为云 OBS、又拍云、OneDrive (包括世纪互联版) 、S3 兼容协议 作为存储端
- 📤 上传/下载 支持客户端直传,支持下载限速
- 💾 可对接 Aria2 离线下载,可使用多个从机节点分担下载任务
- 📚 在线 压缩/解压缩、多文件打包下载
- 💻 覆盖全部存储策略的 WebDAV 协议支持
- 👩👧👦 多用户、用户组、多存储策略
- 🔗 创建文件、目录的分享链接,可设定自动过期
- 🌈 ... ...
在没有配置数据库的情况下,Cloudreve 会使用 SQLite 存储数据。但 SQLite 不支持高并发,官方建议在生产环境中使用其他数据库。
同时,Cloudreve 支持使用 Redis 作为键值缓存,但 Redis 不是必须的,在没有配置 Redis 的情况下,Cloudreve 会使用内存缓存,并在正常退出前将内存缓存的数据持久化到 cache_persist.bin
文件中。
另外,虽然官方文档写着「其中默认包含并启用了 Aria2」,但我没找到 Aria2 相关的配置,比如后台秘钥。
因此,下面的 compose.yml 增加了 Aria2 容器,配置了 PostgreSQL 数据库,并将 Cloudreve 和 Aria2 的下载目录映射至同一路径。
services:
cloudreve:
image: cloudreve/cloudreve:latest
container_name: cloudreve
depends_on:
- postgresql
- redis
# ports:
# - 5212:5212
environment:
- CR_CONF_Database.Type=postgres
- CR_CONF_Database.Host=postgresql
- CR_CONF_Database.User=cloudreve
- CR_CONF_Database.Name=cloudreve
- CR_CONF_Database.Port=5432
- CR_CONF_Redis.Server=redis:6379
volumes:
- ./cloudreve:/cloudreve/data
- ./downloads:/downloads
restart: unless-stopped
networks:
- ${NETWORK}
postgresql:
image: postgres:latest
container_name: postgresql
environment:
- POSTGRES_USER=cloudreve
- POSTGRES_DB=cloudreve
- POSTGRES_HOST_AUTH_METHOD=trust
volumes:
- ./postgresql:/var/lib/postgresql/data
restart: unless-stopped
networks:
- ${NETWORK}
aria2:
image: p3terx/aria2-pro
container_name: aria2
# ports:
# - 6888:6888
# - 6888:6888/udp
volumes:
- ./downloads:/downloads
- ./aria2:/config
environment:
- TZ=${TZ}
- PUID=${PUID}
- PGID=${PGID}
- RPC_SECRET=your_secret_here
restart: unless-stopped
networks:
- ${NETWORK}
redis:
image: redis:latest
container_name: redis
volumes:
- ./redis:/data
restart: unless-stopped
networks:
- ${NETWORK}
Zfile
ZFile 是一个基于 Java 的在线网盘程序,功能上大体和 Cloudreve 类似,不过不支持离线下载。
- 支持 S3 协议, 阿里云 OSS, FTP, 华为云 OBS, 本地存储, MINIO, OneDrive 国际/家庭/个人版/世纪互联版/SharePoint, , 七牛云 KODO, 腾讯云 COS, 又拍云 USS.
- 支持文件操作:上传、下载、重命名、删除、新建文件夹等
- 图片画廊模式,且支持自定义列数,间距等信息。
- 文件/文件夹加密、隐藏
- 目录
readme
文档- 支持在线浏览文本文件、PDF、图片、音乐、视频(支持 mp4、flv、hls)
- 文件直链和二维码
- 同时挂载多个存储策略
services:
zfile:
image: zhaojun1998/zfile:latest
# ports:
# - 8080:8080
volumes:
- ./db:/root/.zfile-v4/db
- ./logs:/root/.zfile-v4/logs
restart: unless-stopped
container_name: zfile
networks:
- ${NETWORK}
Caddy
Caddy 也能快速搭建一个文件管理列表出来,对于只是浏览和下载来说非常方便,界面也比较美观。
只需要在反代的时候加上 file_server browse
,例如:
example.com {
encode zstd gzip
root * /home/wwwroot/file
file_server browse
}
同步
Syncthing
Syncthing 是一个全平台的同步工具,可以在两台或多台设备之间即时同步文件,保证文件的一致性。
- Github:https://github.com/syncthing/syncthing
- 官网:https://syncthing.net/
- 第三方镜像文档:https://hub.docker.com/r/linuxserver/syncthing
Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers. We strive to fulfill the goals below. The goals are listed in order of importance, the most important ones first.
Syncthing 是一款持续文件同步程序 。它可以在两台或多台计算机之间同步文件。我们致力于实现以下目标。这些目标按重要性排序,最重要的放在最前面。
这里使用的是 LinuxServer.io 的镜像。另外由于 Syncthing 连接的需求,需要映射 22000
端口。
services:
syncthing:
image: linuxserver/syncthing:latest
container_name: syncthing
# hostname: syncthing #optional
environment:
- TZ=${TZ}
- PUID=${PUID}
- PGID=${PGID}
volumes:
- ./config:/config
- ./data:/data
ports:
# - 8384:8384
- 22000:22000/tcp
- 22000:22000/udp
- 21027:21027/udp
restart: unless-stopped
networks:
- ${NETWORK}
监控
Uptime Kuma
Uptime Kuma 是一款易于使用的自托管监控工具。
Github:https://github.com/louislam/uptime-kuma
Monitoring uptime for HTTP(s) / TCP / HTTP(s) Keyword / HTTP(s) Json Query / Ping / DNS Record / Push / Steam Game Server / Docker Containers
监控 HTTP(s) / TCP / HTTP(s) 关键字 / HTTP(s) Json 查询 / Ping / DNS 记录 / 推送 / Steam 游戏服务器 / Docker 容器的正常运行时间
- Notifications via Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP), and 90+ notification services, click here for the full list
通过 Telegram、Discord、Gotify、Slack、Pushover、电子邮件 (SMTP) 和 90 多种通知服务发送通知Multi Languages
多语言
Multiple status pages
多个状态页面
不过 uptime-kuma 包含 Chromium,不仅占空间,还吃内存,需要一定配置的设备运行。
services:
uptimekuma:
image: louislam/uptime-kuma:beta
container_name: uptimekuma
volumes:
- ./uptimekuma:/app/data
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=${TZ}
restart: unless-stopped
networks:
- ${NETWORK}
Nezha
开源、轻量、易用的服务器监控与运维工具。
一键安装:支持一键安装面板和监控服务,操作便捷。兼容主流系统,包括 Linux、Windows、macOS、OpenWRT 以及群晖。
实时监控:支持同时监控多个服务器的状态,提供历史网络状态和延迟图表,监控网页、端口可用性和 SSL 证书状态。支持故障和流量等状态告警,可通过 Telegram、邮件、微信等多种方式提醒。
轻松运维:提供 API 获取服务器状态,支持WebSSH、DDNS 和流量监控。可设置定时和触发任务,并批量执行服务器任务。
可以不用脚本安装面板端:
nezha:
image: ghcr.io/nezhahq/nezha
container_name: nezha
volumes:
- ./nezha:/dashboard/data
environment:
- TZ=${TZ}
# ports:
# - "8008:8008"
restart: unless-stopped
networks:
- ${NETWORK}
参考官方文档使用 Nginx 反代即可用 443
端口连接。需要在面板后台设置中勾选「Agent 使用 TLS 连接」,「Agent对接地址」填写「域名:端口」,例如 example.com:443
,然后就可以在安装监控端的时候正常连接了。
信息
RSSTT
基于 Telegram 机器人创建的 RSS 通知。利用通讯工具的即时属性,可以用来订阅某些重要的通知。
Github:https://github.com/Rongronggg9/RSS-to-Telegram-Bot
这里只列出了必须的环境变量,其他变量如有需求请自行参考官方文档。
services:
rsstt:
image: rongronggg9/rss-to-telegram:dev # stable image: rongronggg9/rss-to-telegram
container_name: rsstt
volumes:
- ./data:/app/config
environment:
- TOKEN=xxxx #访问 @BotFather 获取
- MANAGER=xxxx # 访问 @userinfobot 获取,使用;分隔多用户。例如 1234567890;987654321
# ↓------ To disable sending via Telegraph, comment out this area ------↓ #
# 访问以下链接获取 Telegraph API access tokens: https://api.telegra.ph/createAccount?short_name=RSStT&author_name=Generated%20by%20RSStT&author_url=https%3A%2F%2Fgithub.com%2FRongronggg9%2FRSS-to-Telegram-Bot
# 刷新页面即可获取新的 token,如果你有一堆订阅,请至少使用5个token
# ↓ Replace with your access tokens ↓
- TELEGRAPH_TOKEN=
xxx
xxx
- MULTIUSER=1 #多用户模式,0关闭,1启用,默认为1
- TZ=${TZ}
restart: unless-stopped
networks:
- ${NETWORK}
RSSHub
万物皆可 RSS,世界上最大的 RSS 网络。
由于配置了 browserless,因此 RSSHub 非常吃配置,需要部署在稍微给力点的机子上。
services:
rsshub:
image: diygod/rsshub:latest
container_name: rsshub
# ports:
# - '1200:1200'
environment:
- NODE_ENV=production
- CACHE_TYPE=redis
- REDIS_URL=redis://redis:6379/
# - PIXIV_REFRESHTOKEN=
# - PIXIV_IMG_PROXY=
# - PIXIV_BYPASS_DOH=https://dns.google/dns-query
# - PIXIV_BYPASS_CDN=true
- PUPPETEER_WS_ENDPOINT=ws://browserless:3000 # marked
# - PROXY_URI='socks5h://warp-socks:9091'
restart: unless-stopped
depends_on:
# - redis
- browserless
networks:
- ${NETWORK}
browserless: # marked
image: browserless/chrome # marked
container_name: browserless
restart: unless-stopped # marked
ulimits: # marked
core: # marked
hard: 0 # marked
soft: 0 # marked
networks:
- ${NETWORK}
FreshRSS
自托管 RSS 信息流聚合器。
这里使用的是 LinuxServer.io 的镜像,另外配置了两个插件。时间久远我也不记得这俩咋用了,如有需要请自行研究。
services:
freshrss:
image: linuxserver/freshrss:latest
container_name: freshrss
# ports:
# - 80:80
volumes:
- ./config:/config
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- CRON_MIN=*/20
logging:
options:
max-size: 10m
restart: unless-stopped
networks:
- ${NETWORK}
read:
image: phpdockerio/readability-js-server
container_name: read
restart: unless-stopped
networks:
- ${NETWORK}
merc:
image: wangqiru/mercury-parser-api
container_name: merc
restart: unless-stopped
networks:
- ${NETWORK}
工具
Vaultwarden
自托管密码管理器。
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
volumes:
- ./data:/data
environment:
- WEBSOCKET_ENABLED=true
# - ADMIN_TOKEN=
- SMTP_HOST=
- SMTP_FROM=
- SMTP_PORT=
- SMTP_SECURITY=starttls
- SMTP_USERNAME=
- SMTP_PASSWORD=
- SMTP_AUTH_MECHANISM="Login"
- DOMAIN=https://
- SIGNUPS_ALLOWED=false
restart: unless-stopped
networks:
- ${NETWORK}
Nazurin
帮助你从各种网站收集 ACG 插画的 Telegram 机器人。
这个工具对于我这种收图党来说非常好用,有空水一下用法。
services:
nazurin:
image: ghcr.io/y-young/nazurin:latest
container_name: nazurin
user: ${PUID}:${PGID}
# build: .
env_file:
- ".env"
volumes:
- ./data:/app/data
- ./Nazurin:/Nazurin
# ports:
# - "80"
environment:
- TZ=${TZ}
restart: unless-stopped
networks:
- ${NETWORK}
由于包含了所有存储配置,默认的环境变量非常长。如果你像我一样也将图片保存在本地,且服务不想对外,可以试试这么写:
# 访问以下链接获取更多信息:https://nazurin.readthedocs.io/getting-started/configuration/
# ---------- Required ----------
# Telegram bot token
TOKEN = xx
# 默认选项(production)使用 Webhook 模式,你可以设置为 development 以使用轮询模式。
ENV = development
# 发送到 Telegram 服务器的 Webhook URL,机器人的服务器应能通过此 URL 访问,应以 / 结尾,例如 https://xxx.fly.dev/。
# 如使用 Webhook 模式则必需
# WEBHOOK_URL =
# 要绑定到的主机地址,默认为 0.0.0.0。使用反向代理时请设置为 127.0.0.1。
# 如使用 Webhook 模式则必需
HOST = 0.0.0.0
# Webhook 端口,使用 Heroku 时自动设定。
# 如使用 Webhook 模式则必需
PORT = 8080
# 存储类型
STORAGE = Local
# 数据库类型
DATABASE = Local
# 管理员用户的 Telegram 用户 ID(不是用户名),机器人的一些功能仅限管理员用户使用。
ADMIN_ID = xx
# ---------- Optional ----------
# 本地或远程存储的目录路径,如不存在则自动创建。
STORAGE_DIR = /Nazurin
# 同时下载的最大文件数。
MAX_PARALLEL_DOWNLOAD = 6
# 临时目录清理的间隔时间,单位为天。每次清理时将删除访问时间在一天前的文件。设置为 0 时将禁用自动清理。
CLEANUP_INTERVAL = 7
# 图片收藏成功后的反馈方式,可选值如下:
# reply:回复原消息
# reaction: 在原消息上添加表情回应
# both:回复并添加表情回应
FEEDBACK_TYPE = reaction
# ---------- 站点 ----------
# ----- Bilibili -----
# 存储路径
BILIBILI_FILE_PATH = Bilibili
# 文件名称
# BILIBILI_FILE_NAME = {id_str}_{index} - {user[name]}({user[mid]})
# ----- Pixiv 配置项-----
# Refresh token
PIXIV_TOKEN = xx
# 浏览作品时的图片代理,用于帮助 Telegram 服务器更稳定地获取图片,下载作品时仍然会使用 Pixiv 服务器。
# PIXIV_MIRROR =
# 标签的显示语言,如果没有可用翻译则使用日语原文。默认使用原文,配置值将设置在 HTTP Header 的 Accept-Language 选项中。例如:zh-CN, en-US
PIXIV_TRANSLATION = zh-CN
# 收藏可见性 (public/private)
# PIXIV_BOOKMARK_PRIVACY = public
# 存储路径
PIXIV_FILE_PATH = Pixiv/{user[id]}
# 文件名称
PIXIV_FILE_NAME = {filename}
# ----- Twitter 配置项-----
# 要使用的 API,web 或 syndication。Web API 来自网页应用,而 Syndication API 来自 https://publish.twitter.com。
# Syndication API 无法获取被标记为敏感内容的推文,但如果设置了 TWITTER_AUTH_TOKEN,则可以通过 Web API 获取。
# 当 Web API 不可用时,你可以选择切换到 Syndication API。
TWITTER_API = web
# Web API 的授权令牌
TWITTER_AUTH_TOKEN = xx
# 存储路径
TWITTER_FILE_PATH = Twitter
# 文件名称
TWITTER_FILE_NAME = {id_str}_{index} - {user[name]}({user[id_str]})
其他
gh-proxy-go
gh-proxy 的 Go 语言版本。
Github:https://github.com/Xm798/gh-proxy-go
默认的配置文件 config.json
支持自定义以下选项,挂载 /app/config
即可:
host
: 默认 "0.0.0.0",服务器监听地址port
: 默认 8080,服务器监听端口whiteList
: 允许访问的 GitHub 用户/组织列表,配置后将拒绝所有未在列表中的请求blackList
: 禁止访问的 GitHub 用户/组织列表,配置后将拒绝所有在列表中的请求forceEnUSForRaw
: 默认false
,是否强制使用 en-US 语言访问 raw.githubusercontent.com,以规避中文用户可能的 429 错误sizeLimit
: 默认 10240,文件大小限制(单位:MB)注意:
host
和port
配置不支持热重载,需要重启服务才能生效。其他配置项支持热重载。
services:
ghproxy:
image: xm798/gh-proxy-go:latest
container_name: ghproxy
# ports:
# - 8080:8080
# volumes:
# - ./ghproxy:/app/config
environment:
- TZ=${TZ}
restart: unless-stopped
networks:
- ${NETWORK}
hubproxy
一个轻量级、高性能的多功能镜像服务。
Github:https://github.com/sky22333/hubproxy
services:
hubproxy:
container_name: hubproxy
image: ghcr.io/sky22333/hubproxy
restart: always
# ports:
# - 5000:5000
networks:
- ${NETWORK}
最后
还有啥等想起来再加进来。
本文作者:mikusa
本文链接:https://www.himiku.com/archives/docker-compose-cheatsheet.html
版权声明:所有文章除特别声明外均系本人自主创作,转载及引用请联系作者,并注明出处(作者、原文链接等)。
我得说我除了Docker之外没用过列表上的任何一个工具。