家用住宅主机Linux Traefik反向代理容器多站点

为什么要在家用主机上使用Traefik反向代理

如果你有一台Linux家用服务器,
想跑多个Web服务(比如博客、
导航页、
文件管理器),
直接用端口区分既麻烦又不安全。Traefik 是一个专为容器环境设计的反向代理工具,
能自动发现Docker容器,
自动申请HTTPS证书,
非常适合家用场景下的多站点管理。

本文假设你有基础的Linux操作能力(会使用终端),其余步骤按顺序来即可。

前置准备:硬件与软件要求

  • 一台运行Linux的家庭主机(推荐Ubuntu 22.04或Debian 11)。
  • 确保设备有公网IP(或内网穿透能力),并已将域名(例如 site1.example.com)解析到主机IP。
  • 安装 Docker 和 Docker Compose。如果没有,请先执行以下命令:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
# 重新登录或 newgrp docker 使生效
sudo apt install docker-compose-plugin   # 或安装 docker-compose 独立命令
注意:如果你使用的是轻量云主机或内网环境,需要先配置好端口映射和域名解析。

第一步:编写Traefik的Compose配置文件

创建一个项目目录,并编写 docker-compose.yml

version: '3.8'

services:
  traefik:
    image: traefik:v3.0
    container_name: traefik
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./config:/etc/traefik
      - ./letsencrypt:/letsencrypt
    networks:
      - web

networks:
  web:
    external: true

如果 web 网络未创建,先运行:

docker network create web

接着创建 config/traefik.yaml 核心配置:

api:
  dashboard: true

entryPoints:
  web:
    address: ":80"
  websecure:
    address: ":443"

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false
    network: web

certificatesResolvers:
  letsencrypt:
    acme:
      email: your-email@example.com
      storage: /letsencrypt/acme.json
      httpChallenge:
        entryPoint: web

启动 Traefik:

docker compose up -d

打开浏览器访问 http://你的IP:8080 可看到 Dashboard(安全起见生产环境不建议暴露端口,可后续调整)。

第二步:添加第一个容器站点

以简单的 nginx 静态网站为例,新建另一个 docker-compose.yml 或使用以下命令启动:

version: '3.8'

services:
  site1:
    image: nginx:alpine
    container_name: site1
    restart: unless-stopped
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.site1.rule=Host(`site1.example.com`)"
      - "traefik.http.routers.site1.entrypoints=websecure"
      - "traefik.http.routers.site1.tls.certresolver=letsencrypt"
    networks:
      - web

networks:
  web:
    external: true

启动后,Traefik 会自动发现该容器,并为 site1.example.com 申请 SSL 证书。
稍等几秒,访问 https://site1.example.com 就能看到 Nginx 默认页面。

第三步:部署第二个站点(以 Portainer 为例)

同理,再创建一个 docker-compose-site2.yml

version: '3.8'

services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./portainer_data:/data
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.portainer.rule=Host(`admin.example.com`)"
      - "traefik.http.routers.portainer.entrypoints=websecure"
      - "traefik.http.routers.portainer.tls.certresolver=letsencrypt"
    networks:
      - web

networks:
  web:
    external: true

启动后,访问 https://admin.example.com 即可进入 Portainer 管理界面。

避坑指南(常见问题)

  1. Docker socket 权限不足:确保挂载了 /var/run/docker.sock:ro,如果 Traefik 日志报 Permission denied,检查 socket 权限或使用 docker group
  2. 网络未共享:所有容器必须在同一个 web 网络中,否则 Traefik 无法发现它们。
  3. 域名解析未生效:先 ping 一下域名确认解析到主机 IP。
  4. 端口被占用:80/443 端口不能被其他程序占用(如 nginx、apache)。
  5. Let's Encrypt 证书申请失败:检查邮箱是否正确,且域名 80 端口对外可达(用于 HTTP 验证)。
  6. Dashboard 暴露风险:建议在正式环境为 Dashboard 也添加域名规则,而不是直接开放 8080 端口。

效果验证

  • 分别访问你的两个域名,确认能正常加载 HTTPS 页面并显示绿色锁标志。
  • 检查 Traefik 日志:docker logs traefik,观察是否有 certificate obtained 等成功信息。
  • 在 Dashboard 中查看路由和证书状态,确认所有 Router 和 Service 都 active。

如果你后续需要添加更多站点,只需按照第二步的标签格式复制一份容器配置即可。
整个架构稳定、安全,无需手动管理 SSL 证书,非常适合家用住宅主机的多站点场景。

遇到其他异常时,优先检查网络、标签和 traefik.enable=true 是否遗漏。
祝你的家庭服务器运行顺利!

分享到:
上一篇
外贸站宝塔面板服务器挖矿病毒完整查杀步骤
下一篇
跨境独立站宝塔面板WooCommerce外贸商城搭建
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意