自托管 Docker 应用
示例指南
- caddy_v2 - 反向代理
- vaultwarden - 密码管理器
- bookstack - 笔记和文档
- kopia - 替代 borg 的备份工具
- borg_backup - 备份工具
- ddclient - 自动 DNS 更新
- dnsmasq - DNS 和 DHCP 服务器
- gotify / ntfy / signal - 即时通知应用
- frigate - 安全摄像头管理
- jellyfin - 视频和音乐流媒体
- minecraft - 游戏服务器
- meshcrentral - 基于网页的远程桌面,类似 TeamViewer 或 AnyDesk
- rustdesk - 远程桌面,类似 TeamViewer 或 AnyDesk
- nextcloud - 文件共享和同步
- opnsense - 企业级防火墙
- qbittorrent - 种子客户端
- portainer - Docker 管理
- prometheus_grafana_loki - 监控
- unifi - Ubiquiti 设备管理工具
- snipeit - IT 资产管理
- trueNAS scale - 网络文件共享
- uptime kuma - 在线时间警报工具
- squid - 匿名转发代理
- wireguard - 唯一值得考虑的 VPN
- wg-easy - 带网页界面的 Docker 版 WireGuard
- zammad - 工单系统
- arch_linux_host_install
也可以查看顶部列出的目录以了解正在进行的工作
另请查看 StarWhiz / docker_deployment_notes
该仓库以类似格式记录了自托管应用,并也使用 Caddy 作为反向代理
核心概念
docker-compose.yml
无需编辑即可启动,更改应在.env
文件中进行。- 对于持久存储,使用绑定挂载
./whatever_data
。 不使用卷或静态路径...只使用相对于 compose 文件的路径。 - compose 文件开头不声明版本,因为这种做法已被 弃用
要求
基本的 Linux 和 Docker Compose 知识。 这里的内容相当详细,但仍不应该是你第一次运行 Docker 容器。
Caddy 反向代理
Caddy 反向代理 是这个设置的核心。
它被描述得最为详细,所有指南都有反向代理部分,
包含针对它们的特定 Caddyfile 配置。
Caddy 在简化 HTTPS 证书的混乱方面非常出色,
你不必真正处理任何事情,同时拥有一个简单、
可读的配置文件。
但如果使用 traefik 或 nginx 代理管理器也没问题。你只需自行处理代理设置, 90% 的情况下只需将流量发送到 80 端口,别无其他。
Docker 网络
你真的应该创建一个自定义命名的 Docker 网络并使用它。
docker network create caddy_net
它可以命名为任何名称,但与默认网络相比,它提供了
容器之间的自动 DNS 解析。
这意味着可以进入一个容器并通过主机名 ping 另一个容器。
这使配置文件更简单、更清晰。
.env
通常 .env
文件被用作 env_file
,
这个概念乍看可能有点难以理解。
env_file: .env
.env
- 仅由 compose 使用的实际文件名。
只要它在docker-compose.yml
所在目录中就会自动使用
其中的变量在容器构建过程中可用, 但除非在environment:
选项中命名,否则在容器运行后不可用。env_file
- compose 中定义现有外部文件的选项。
该文件中的变量将在运行的容器中可用, 但在容器构建过程中不可用。
因此,具有 env_file: .env
的 compose 文件将这两者混合在一起。
好处是你不需要在多个地方进行更改。
在 .env
中添加变量或更改名称不需要
你也去 compose 中添加/更改...此外 compose 文件
看起来更整洁,不那么拥挤。
唯一的问题是 .env
文件中的所有变量都可用于
所有使用这种 env_file: .env
方法的容器。
如果容器拾取了intended for 堆栈中不同容器的环境变量,
可能会导致潜在问题。
在这里的设置中它是有效的并经过测试,但如果你开始到处使用它
而不理解它,你可能会遇到问题。
因此,故障排除步骤之一可能是放弃 .env
并直接在
compose 文件中只在想要它们的容器下写出变量。
Docker 镜像 latest 标签
大多数情况下,镜像都没有任何标签,
这默认使用 latest
标签。
这是不推荐的,
一旦运行正常,你应该在那里放置当前标签。
当你知道可以用备份回滚到工作版本并知道镜像版本时,
这将使更新更容易。
Cloudflare
用于管理 DNS 记录。免费层提供了许多管理选项和 好处。比如在你的域名和服务器之间设置代理,这样 没人能仅通过你的域名获取你的公共 IP。或者 5 条防火墙规则, 允许你阻止除你所在国家之外的整个世界。 如何迁移到Cloudflare。
ctop
类似htop的实用工具,用于快速管理容器。
它简单而高效,绝对令人惊叹。
- 硬件使用概览,让你知道每个容器使用了多少CPU、内存、带宽、IO等
- 容器详细信息,包括IP地址、发布和暴露的端口、创建时间等
- 快速管理,可以快速进入容器、查看日志、停止容器等
用Go语言编写,因此速度极快,安装也非常简单,只需一个二进制文件。
下载linux-amd64
版本;用chmod +x使其可执行;移动到/usr/bin/
;
现在你可以在任何地方使用ctop了。
Brevo
服务通常需要发送电子邮件的功能,用于通知、注册、密码重置等...Sendinblue是免费的,每天提供300封邮件额度,且设置简单。
EMAIL_HOST=smtp-relay.brevo.com
EMAIL_PORT=587
EMAIL_HOST_USER=whoever_example@gmail.com
EMAIL_HOST_PASSWORD=xcmpwik-c31d9eykwef3342df2fwfj04-FKLzpHgMjGqP23
EMAIL_USE_TLS=1
将Archlinux作为Docker主机
我首选Archlinux,因为我最熟悉它。 通常在虚拟机中使用,并在更新前进行快照。
对于Arch的安装,我之前有这些笔记
关于如何安装以及之后需要做什么。
但在archinstall脚本
开始包含在arch ISO中后,我就改用它了。
对于安装后的设置,我创建了
Ansible-Arch仓库,几分钟内就能完成设置,不用担心遗漏什么。
Ansible非常易于使用,playbook也很容易阅读和理解,
所以花时间了解这个概念并设置自己的ansible脚本可能是值得的。
拥有这样一个仓库的最大好处是,它为记录遇到的问题的解决方案, 或为所有未来部署启用新发现的功能提供了一个专门的地方。
其他指南
- StarWhiz/docker_deployment_notes
- 受其启发,以类似方式为各种服务编写了设置指南
- BaptisteBdn/docker-selfhosted-apps
- 使用traefik作为反向代理的多种服务
- Awesome Docker Compose Examples
Docker新手指南
YouTube频道
也许列出一些值得关注的YouTube频道不是个坏主意。
- Fireship - 有趣的新闻和技巧
- TechnoTim - 家庭服务器自托管综合内容
- Craft Computing - 家庭服务器综合内容,更关注硬件和搭建
- Wolfgang's Channel - 家庭服务器自托管综合内容,注重功耗
- Lawrence Systems - 家庭服务器自托管综合内容
- Christian Lempa - 家庭服务器自托管综合内容
- NASCompares - NAS搭建 / 家庭服务器
- Peter Brockie - NAS搭建 / 家庭服务器
- Awesome Open Source - 开源软件洞察
- Hardware Haven - 专注于NAS、服务器、迷你PC
- ServeTheHome - 硬件、迷你PC、交换机等