Skip to content
返回云服务

用 Docker Compose 自托管

在一台 VPS 上用 docker-compose.yml、网络和卷运行多个自托管服务(Postgres、Redis、Nextcloud、Plausible)。

VPS 与自托管进阶

为什么

Docker Compose 让你在一个 YAML 文件中声明多服务栈(应用+数据库+缓存+反向代理),可版本控制和复现。卷持久化数据,网络隔离服务,'docker compose up -d' 启动整个栈。

这是标准自托管模式。

何时使用

单主机多容器自托管设置用 Compose。需要多主机或滚动更新时才用 Swarm/K8s。单 VPS 运行少量服务时 Compose 是正确工具。

如何做

1. 安装 Docker Engine + compose 插件。 2. 编写 docker-compose.yml,含服务、卷和网络。 3. 密钥放 .env 文件(gitignore)或 Docker secrets。 4. docker compose up -d 启动。 5. docker compose logs -f 跟踪日志。 6. docker compose pull && docker compose up -d 更新镜像。 ```bash curl -fsSL https://get.docker.com | sh # 编写 docker-compose.yml 和 .env docker compose up -d docker compose ps ```

示例

Caddy 后的自托管分析栈(Plausible + Postgres + Clickhouse): ```yaml # docker-compose.yml services: caddy: image: caddy:2 ports: ["80:80", "443:443"] volumes: ["./Caddyfile:/etc/caddy/Caddyfile", "caddy_data:/data"] plausible: image: ghcr.io/plausible/community:v2 env_file: .env depends_on: [db, events] db: image: postgres:16 volumes: ["pg:/var/lib/postgresql/data"] environment: { POSTGRES_PASSWORD: \${PG_PWD} } events: image: clickhouse/clickhouse-server:24 volumes: ["ch:/var/lib/clickhouse"] volumes: { caddy_data: {}, pg: {}, ch: {} } ```

常见问题

  • ⚠'docker compose down' 丢数据 —— 卷默认保留,但 'down -v' 会删除;生产环境绝不用 -v。
  • ⚠服务互不可解析 —— 在不同网络;放同一命名网络或用 Compose 创建的默认网络。
  • ⚠80/443 端口冲突 —— 仅反向代理应绑定 80/443;其他服务仅绑内部端口并通过代理访问。

最佳实践

  • ✓镜像标签固定到具体版本(postgres:16 而非 postgres:latest),使拉取可复现且可控升级时机。
  • ✓数据库数据用命名卷(非绑定挂载),使 Docker 管理权限并通过 'docker run --volumes-from' 备份。
  • ✓每个服务设 restart: unless-stopped,使栈重启后无需手动干预即可恢复。

常见问题解答

什么是用 Docker Compose 自托管?它解决什么问题?

在一台 VPS 上用 docker-compose.yml、网络和卷运行多个自托管服务(Postgres、Redis、Nextcloud、Plausible)。 它可帮助开发者在不自建基础设施的前提下完成部署、存储与扩展,是云服务选型的核心参考。

如何在 5 分钟内上手用 Docker Compose 自托管?

两步即可跑通:① 安装 Docker Engine + compose 插件。;② 编写 docker-compose.yml,含服务、卷和网络。。建议先用免费套餐验证流程,再接入生产环境。

用 Docker Compose 自托管 最容易踩的坑是什么?

最高频的问题是:'docker compose down' 丢数据 —— 卷默认保留,但 'down -v' 会删除;生产环境绝不用 -v。。建议在上线前用 checklist 逐项核对,并在 CI 中加入策略与配置扫描。

用 Docker Compose 自托管 的最佳实践有哪些?

用 Docker Compose 自托管 的最佳实践包括:镜像标签固定到具体版本(postgres:16 而非 postgres:latest),使拉取可复现且可控升级时机。;数据库数据用命名卷(非绑定挂载),使 Docker 管理权限并通过 'docker run --volumes-from' 备份。;每个服务设 restart: unless-stopped,使栈重启后无需手动干预即可恢复。。其中首条「镜像标签固定到具体版本(postgres:16 而非 postgres:latest),使拉取可复现且可控升级时机。」应作为团队默认规范写入 IaC 模板。

用 Docker Compose 自托管 如何控制成本与避免账单意外?

三招防超支:① 为所有资源打 env/team 标签并启用账单告警;② 用预算阈值触发 Slack/邮件通知;③ 定期用 Cost Explorer 审查闲置资源并清理。用 Docker Compose 自托管 多数提供免费套餐,先在免费额度内验证再放量。