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 并重跑。上游项目常有安全漏洞,联网服务器上跑过时服务不安全,应定期更新重跑。
支持与源码
- 项目源码与 Issues:mother-of-all-self-hosting/mash-playbook
- Matrix 房间:#mash-playbook:devture.com
- GitHub issues:提交问题
- 安装文档:仓库
docs/目录 - 许可证:AGPL-3.0