综合 MASH playbook:用一套 Ansible 部署 Nextcloud、Jellyfin、Vaultwarden 等自托管服务

2026-10-16 20:01:12

MASH playbook:用一套 Ansible 部署 Nextcloud、Jellyfin、Vaultwarden 等自托管服务

MASH(Mother-of-All-Self-Hosting) 是一个 Ansible playbook,把各类 FOSS 服务以 Docker 容器形式部署到自己的服务器上。项目主要语言 Python,AGPL-3.0 许可证,约 1.1k star、134 fork。支持 Nextcloud、Jellyfin、Immich、Vaultwarden、PeerTube、Jitsi、Forgejo、Paperless-ngx、AdGuard Home、ntfy、Miniflux 等,列表持续扩充。

为什么合并成一个 playbook

作者团队此前为 Matrix、Nextcloud、Gitea、GitLab、Vaultwarden、PeerTube 等分别维护独立 playbook,大多已并入此仓库;Matrix playbook 因组件庞大仍独立维护。合并的出发点是:不用在多个 playbook 间来回切换,也避免同机装多个服务时冲突。共享组件(Postgres、Traefik、备份)只需维护一份,试用新服务只需加几行配置。所有服务共用同一基础数据路径和同一个 Postgres 实例,备份更简单。

一个 playbook 管所有服务,不等于必须挤在一台机器上,可以按需拆到多台服务器。

安装:在本地机器上执行

安装步骤跑在你自己电脑上,不是服务器上。

git clone https://github.com/mother-of-all-self-hosting/mash-playbook.git
cd mash-playbook

配置 DNS 与 playbook,具体见仓库中的 docs/。

安装前先更新 Ansible roles:

just update
# 等价于 git pull + just roles

没有 just 时用 ansible-galaxy:

rm -rf roles/galaxy
ansible-galaxy install -r requirements.yml -p roles/galaxy/ --force

然后安装:

just install-all
# 等价于 just run-tags install-all,start

不用 just 时:

ansible-playbook -i inventory/hosts setup.yml --tags=install-all,start

导入旧数据时先别启动

如果要把旧数据导入新服务器,先只跑安装、不启动服务:

just run-tags install-all

不要用 just install-all,因为它会在结尾自动启动服务。导入 Postgres 数据之后,再执行:

just start-all
# 或
ansible-playbook -i inventory/hosts setup.yml --tags=start

tags 与重跑

任务用 tags 分区,可以只跑其中一部分:

just run-tags COMMA_SEPARATED_TAGS

重跑设置用 just install-all;如果需要包含卸载任务,用 just setup-all。重跑安装命令是幂等的:Ansible 会按你的配置把服务器更新到一致状态。

更新与维护

playbook 会随时间演进,有时含向后不兼容变更,升级时看 changelog。它不会自动跑维护任务,需要手动更新 playbook 并重跑。上游项目常有安全漏洞,联网服务器上跑过时服务不安全,应定期更新重跑。

支持与源码

复制全文 生成海报 Ansible Docker 自托管 运维 MASH

推荐文章

程序员茄子在线接单