使用 Docker Compose 搭建自托管服务全记录
自托管(Self-Hosting)是掌控个人数据和服务的最佳方式。本文记录了我使用 Docker Compose 搭建一整套自托管服务的过程,包括反向代理、认证、数据库等核心组件。
为什么选择 Docker Compose
相比直接安装软件,容器化部署有明显优势:
- 环境隔离,不污染宿主系统
- 一个 YAML 文件定义全部服务,方便版本管理
- 迁移和备份极其简单,打包 volumes 即可
- 升级只需更改镜像 tag 并重新拉取
项目结构
我将所有服务按功能拆分到不同目录,每个服务独立一个 docker-compose.yml,通过外部网络互联:
/opt/docker-services/
├── npm/ # Nginx Proxy Manager
│ ├── docker-compose.yml
│ └── data/
├── authelia/ # 统一认证
│ ├── docker-compose.yml
│ └── config/
├── postgres/ # PostgreSQL 数据库
│ ├── docker-compose.yml
│ └── data/
└── app/ # 业务应用
└── docker-compose.yml
网络规划
所有服务共享一个名为 proxy-network 的外部 Docker 网络,这样 Nginx Proxy Manager 可以通过容器名访问后端服务:
# 创建外部网络
docker network create proxy-network
# 在每个 docker-compose.yml 中引用
networks:
proxy-network:
external: true
部署顺序
推荐按以下顺序启动服务:
- 第一步:启动基础设施 — 数据库、反向代理
- 第二步:启动认证服务 — Authelia
- 第三步:启动业务应用
数据备份
定时备份是自托管的生命线。我使用一个简单的 cron 脚本,每天凌晨打包所有 data 目录:
# /etc/cron.d/backup-services
0 4 * * * tar czf /backup/services-$(date +\%F).tar.gz /opt/docker-services/*/data/
总结
Docker Compose 让自托管变得非常轻松。只要规划好网络和持久化存储,就能在一台小服务器上跑起一整套私有服务。关键是做好备份,这样即使服务器出问题,也能快速恢复。