如何创建在子域上运行Caddy服务器和其他服务器的Docker文件?

时间:2019-06-17 01:17:35

标签: docker self-hosting caddy

我想在其各自的子域上运行以下服务/ docker映像。

╔═══════════╦═════════════════════╦═════════════════════════╗
║  Service  ║         URL         ║         Docker          ║
╠═══════════╬═════════════════════╬═════════════════════════╣
║ Plex      ║    plex.example.com ║ plexinc/pms-docker      ║
║ Calibre   ║ calibre.example.com ║ linuxserver/calibre-web ║
║ NextCloud ║   cloud.example.com ║ nextcloud               ║
║ Gitea     ║     git.example.com ║ gitea/gitea             ║
║ Caddy     ║         example.com ║ abiosoft/caddy          ║
╚═══════════╩═════════════════════╩═════════════════════════╝

我该怎么做??我对Docker的了解很少,但了解它在模块化和沙箱方面的优势。我找到了this,但这是专门针对nginx和Nextcloud的。我更喜欢使用Caddy,因为它具有自动HTTPS注册和HTTP / 2支持。

在路径而不是子域上运行不是首选,但可以接受。

2 个答案:

答案 0 :(得分:0)

我对Caddy本身并没有真正的经验,但是听起来您想设置代理服务器。您要做的是将Caddy端口(假设80和443)映射到主机(https://docs.docker.com/compose/compose-file/#ports),然后在Caddy配置中设置必要的代理转发。

例如,要将所有请求转发到plex.example.com,您只需将plex.example.com域指向服务器,在服务器中,您的docker-compose(我假设)项目将以80和443个端口映射到Caddy服务。然后,当收到请求时,您的Caddy可以根据域名转发请求。因此,在这种情况下,您将检查plex.example.com的传入请求,以将其转发到plex服务(使用docker时,可以将plex服务名称用作主机名。在docker-compose命令创建的网络中,服务名称解析为相应的IP地址)

答案 1 :(得分:0)

根据您的描述,所有服务都在同一台计算机上运行,​​但是具有不同的端口,如下所示:

╔═══════════╦═════════════════════╦═════════════════════════╦═════════════════╗
║  Service  ║         URL         ║         Docker          ║      Address    ║ 
╠═══════════╬═════════════════════╬═════════════════════════╬═════════════════╣
║ Plex      ║    plex.example.com ║ plexinc/pms-docker      ║ localhost:10001 ║
║ Calibre   ║ calibre.example.com ║ linuxserver/calibre-web ║ localhost:10002 ║
║ NextCloud ║   cloud.example.com ║ nextcloud               ║ localhost:10003 ║
║ Gitea     ║     git.example.com ║ gitea/gitea             ║ localhost:10004 ║
║ Caddy     ║         example.com ║ abiosoft/caddy          ║ localhost:10000 ║
╚═══════════╩═════════════════════╩═════════════════════════╩═════════════════╝

然后您的Caddyfile可能如下所示:

example.com {
    proxy / localhost:10000 {
        transparent
    }
}

plex.example.com {
    proxy / localhost:10001 {
        transparent
    }
}

calibre.example.com {
    proxy / localhost:10002 {
        transparent
    }
}

cloud.example.com {
    proxy / localhost:10003 {
        transparent
    }
}

git.example.com {
    proxy / localhost:10004 {
        transparent
    }
}

如果所有服务都在Docker中运行,您可能还需要考虑Traefik