Nginx Proxy Manager + Docker+ docker-compose+ yamllint+ Traefik

用 docker-compose 统一管理自建服务器全套服务配置

Traefik 作反向代理统一入口,nginx 可横向扩展,各服务独立文件夹由 compose 聚合管理

✓ 配置集中一处管理✓ 服务按文件夹模块化组织 ✕ compose 版本低于2.20需自定义✕ 需自行修改数据库密码与VPN密钥

方案简介

make-my-server 是一套基于 docker-compose 的自建服务器完整配置方案。它将服务器上的各个服务(如 Traefik 反向代理、nginx、Minecraft、Discord MusicBot 等)分别放在独立文件夹中,每个文件夹包含该服务的全部配置,再通过 docker-compose 把所有 docker-compose 文件聚合到一起统一启动与管理。

这个方案解决的问题是:自建服务器往往要跑多个服务,各服务的启动命令、配置文件、数据卷、日志分散各处,难以维护。make-my-server 用统一的目录架构和环境变量(.env 文件)把这些配置收拢,提供了带默认配置的完整模板。

适合想用 Docker 管理自己服务器的个人开发者,或希望以模块化方式增删服务、并通过 lint 与 CI 测试保证配置质量的团队。

亮点与能力

  • 一个命令聚合启动全部服务:SITE=tom.moulard.org docker-compose up -d
  • 每个服务独立文件夹,包含 conf/data/logs/docker-compose 文件/README,结构统一
  • 提供 .env.default 默认环境变量模板,一键复制为 .env 后按需修改
  • 支持通过 .env 设置多组 Basic Auth 用户凭证
  • 支持服务横向扩展,如 docker-compose scale nginx=2
  • 本地开发可通过修改 /etc/hosts 调试 Traefik
  • 使用 yamllint 强制检查所有 YAML 文件(PR 强制执行)
  • 提供测试脚本 ./test.sh 校验 compose 文件有效性、可解析性与 .env.default 一致性,GitHub Action 会自动运行并生成 patch 文件

组成与分工

  • docker-compose:核心编排工具,把散落在各服务文件夹中的 compose 文件聚合为一份完整配置统一管理
  • Traefik:反向代理服务,traefik/ 文件夹包含运行它所需的全部配置,其他服务位于其后
  • nginx:可被 scale 扩展的 Web 服务,数据库密码等服务处于反向代理之后
  • yamllint:用于 lint 所有 YAML 配置文件,PR 强制执行
  • GitHub Action:自动运行测试脚本,并生成 patch.patch 帮助修复问题
  • Discord MusicBot / Minecraft:由社区贡献者通过 PR 添加的服务示例(见 PR #6)

前置要求

  • Docker 与 docker-compose;若 docker compose 版本低于 2.20,需要用自定义 bash 函数聚合配置文件:

bash
docker-compose ()

docker-compose $(find -name 'docker-compose.*.yml' -type f -printf '%p\t%d\n' 2>/dev/null | sort -n -k2 | cut -f 1 | awk '{print "-f "$0}') $@

  • 如需运行 lint 测试,需安装 yamllint:

bash
yamllint .

实施步骤

1. 启动整套服务

bash
SITE=tom.moulard.org docker-compose up -d

2. 使用 .env 管理配置

bash
cp .env.default .env

然后编辑 .env 文件填入正确的配置。

3. 设置访问密码

bash
echo "USERS=$(htpasswd -nB $USER)" >> .env

也可在 .env 中添加多组凭证:

env
USERS=toto:pass,tata:pass, ...

4. 新增服务

每个文件夹代表一个可用服务,目录必须遵循以下架构:

service/
├── conf
│ └── ...
├── data
│ └── ...
├── docker-compose.servicename.yml
├── logs
│ ├── access.log
│ └── error.log
└── README.md

其中 data/ 存服务数据,conf/ 存服务配置,logs/ 存 Docker 日志之外的服务日志。欢迎通过 Pull Request 添加新服务。

使用与配置要点

  • 启动后可通过 docker-compose config 查看聚合后的完整配置
  • 关停全部服务:

bash
docker-compose down

  • 扩容服务:

bash
docker-compose scale nginx=2

  • 本地调试 Traefik 时,编辑 /etc/hosts 给反向代理提供正确的 URL,例如添加:

bash
127.0.0.1 traefik.moulard.org

  • .env.default 可用以下命令重新生成:

bash
grep '${' */docker-compose..yml | sed "s/.\${\(.\)}.*/\1/g" | cut -d":" -f 1 | sort -u | sort | xargs -I % echo "%=" >> .env.default

注意事项与常见问题

  • 不要忘记修改:数据库密码(可能不需要,因为它们位于反向代理之后)、VPN 密钥(未提供时会自动生成)
  • yamllint 与 ./test.sh(即 docker-compose config 校验)对所有 PR 强制执行
  • 测试失败时会生成一批被修改的文件(如 test_config.yml)指出问题所在
  • GitHub Action 会自动运行测试脚本,并生成 patch.patch 文件,应能解决大部分问题

优缺点

  • ✓ 配置集中一处管理
  • ✓ 服务按文件夹模块化组织
  • ✕ compose 版本低于2.20需自定义
  • ✕ 需自行修改数据库密码与VPN密钥

出处

本方案挖掘自开源项目 tomMoulard/make-my-server,方案内容与实施命令均来自其 README 原文。

方案出处
tomMoulard/make-my-server:Docker Compose with Traefik and lots of services
592 star Docker Compose with Traefik and lots of services

本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。