过去两年我用 Docker 跑了 7 个自托管服务,替代了 7 个商业 SaaS。

年成本从约 1200 元降到一台服务器的钱。更重要的是数据完全在自己手里。

1. Vaultwarden — 替代 1Password / Bitwarden 付费版

Bitwarden 的轻量开源实现,Rust 编写,内存占用不到 50MB。

services:
  vaultwarden:
    image: vaultwarden/server:latest
    ports:
      - "8080:80"
    volumes:
      - ./vw-data:/data
    environment:
      - DOMAIN=https://vault.example.com
      - SIGNUPS_ALLOWED=false

关键配置:SIGNUPS_ALLOWED=false,关掉公开注册,只允许你自己创建账号。否则任何人都能在你的服务器上注册。

手机端用官方 Bitwarden App,设置里把服务器地址改成你的域名,体验和付费版几乎一样。

2. Gitea — 替代 GitHub Private Repo

轻量 Git 服务,Go 编写,启动不到 2 秒。我的私人代码仓库全在这里。

services:
  gitea:
    image: gitea/gitea:latest
    ports:
      - "3000:3000"
      - "2222:22"
    volumes:
      - ./gitea-data:/data
    environment:
      - GITEA__server__DOMAIN=git.example.com
      - GITEA__server__SSH_PORT=2222

SSH 端口用 2222 而不是 22,避免和宿主机 SSH 冲突。

3. Nextcloud — 替代 Google Drive / Dropbox

文件同步、共享、在线预览。功能比商业云盘多,但也更重。

services:
  nextcloud:
    image: nextcloud:latest
    ports:
      - "8081:80"
    volumes:
      - ./nc-data:/var/www/html
    environment:
      - MYSQL_HOST=db
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=yourpassword
  db:
    image: mariadb:latest
    environment:
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_ROOT_PASSWORD=yourrootpassword
    volumes:
      - ./db-data:/var/lib/mysql

Nextcloud 是这些服务里最吃资源的。2GB 内存起步,文件多了以后同步速度会变慢。轻量替代方案考虑 Seafile。

4. n8n — 替代 Zapier

工作流自动化。比 Zapier 灵活,但学习曲线更陡。

services:
  n8n:
    image: n8nio/n8n:latest
    ports:
      - "5678:5678"
    volumes:
      - ./n8n-data:/home/node/.n8n
    environment:
      - N8N_HOST=flow.example.com
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://flow.example.com/

我目前用它自动化三件事:RSS 新文章推送到 Telegram、GitHub Release 通知、每日天气预报。Webhook 触发,免费额度内随便用。

5. Linkding — 替代 Pocket / Raindrop.io

极简书签管理。支持标签、全文搜索、网页存档。

services:
  linkding:
    image: sissbruecker/linkding:latest
    ports:
      - "9090:9090"
    volumes:
      - ./linkding-data:/etc/linkding/data

装个浏览器插件,一键保存当前页面。比 Pocket 快,比 Raindrop 轻。

6. Umami — 替代 Google Analytics

隐私友好的网站分析。不追踪用户、不用 Cookie、不需要隐私政策横幅。

services:
  umami:
    image: ghcr.io/umami-software/umami:postgresql-latest
    ports:
      - "3001:3000"
    environment:
      - DATABASE_URL=postgresql://umami:umami@db:5432/umami
      - DATABASE_TYPE=postgresql
      - APP_SECRET=replace-me-with-a-random-string
  db:
    image: postgres:16-alpine
    environment:
      - POSTGRES_DB=umami
      - POSTGRES_USER=umami
      - POSTGRES_PASSWORD=umami
    volumes:
      - ./umami-db:/var/lib/postgresql/data

我的博客分析就用的 Umami。数据够用,界面清爽,没有 GA 的那些广告和追踪。

7. Homepage — 自托管仪表盘

把上面所有服务集中到一个起始页。

services:
  homepage:
    image: ghcr.io/benphelps/homepage:latest
    ports:
      - "3002:3000"
    volumes:
      - ./homepage-config:/app/config

YAML 配置,几行就能加一个服务卡片。打开浏览器第一眼看到所有服务的状态,不用记端口号。

共同踩过的坑

反向代理。 所有服务都需要 HTTPS,用 Nginx Proxy Manager 或 Caddy 统一处理。Caddy 更简单,自动申请 Let’s Encrypt 证书。

数据备份。 Docker volume 不是备份。我写了个脚本,每天把所有 volume 打 tar 包传到另一个位置。下周计划接入 rclone 同步到云存储。

内存。 7 个服务跑在一台 4GB 内存的 VPS 上,Nextcloud 是大头。如果内存紧张,砍 Nextcloud 或者加 swap。

更新。 Watchtower 容器自动拉取最新镜像并重启服务。方便,但生产环境建议手动更新——大版本升级可能有 breaking changes。

继续阅读Continue Reading

关于本文About

评论Comments

留下你的想法

欢迎在下方评论区留下你的看法,一起把话题聊得更深。

COMMENTS