我正在运行最近的版本(V1.9)码头工人图像麦璐在 Ubuntu 服务器 22.04 上。
现在我该如何经营一个网站用一些 php除此之外? Mailu 服务器有一个在端口 80 和 443 上运行的 Webmail 页面,位于 mailroot 的子目录中 www.url.com/webmail. 该网站应该在www.url.com。我不知道 docker 镜像是否使用 apache nginx 或其他什么,也不知道应该在哪个目录中放置一些 html 代码……
the ports are like this
root@jammy:~# lsof -i -P -n | grep LISTEN
systemd-r 653 systemd-resolve 14u IPv4 18958 0t0 TCP 127.0.0.53:53 (LISTEN)
sshd 721 root 3u IPv4 19021 0t0 TCP *:22 (LISTEN)
sshd 721 root 4u IPv6 19023 0t0 TCP *:22 (LISTEN)
docker-pr 4218 root 4u IPv4 31659 0t0 TCP 192.168.2.53:995 (LISTEN)
docker-pr 4232 root 4u IPv4 34450 0t0 TCP 192.168.2.53:993 (LISTEN)
docker-pr 4246 root 4u IPv4 38151 0t0 TCP 192.168.2.53:587 (LISTEN)
docker-pr 4260 root 4u IPv4 38168 0t0 TCP 192.168.2.53:465 (LISTEN)
docker-pr 4274 root 4u IPv4 30442 0t0 TCP 192.168.2.53:443 (LISTEN)
docker-pr 4288 root 4u IPv4 34463 0t0 TCP 192.168.2.53:143 (LISTEN)
docker-pr 4302 root 4u IPv4 33363 0t0 TCP 192.168.2.53:110 (LISTEN)
docker-pr 4316 root 4u IPv4 38963 0t0 TCP 192.168.2.53:80 (LISTEN)
docker-pr 4334 root 4u IPv4 33374 0t0 TCP 192.168.2.53:25 (LISTEN)
安装的是
- Ubuntu 服务器 22.04 LTS
- docker 23.0.3 和 docker compose 2.17.2
- Mailu 邮件服务器 1.9 作为 Docker 容器
答案1
有几个不同的组件必须协同工作才能实现您想要的目标。我会简要介绍一下它们,但这个答案永远不可能成为包含所有内容的全面指南 - 那将有几百页。
成分
我可以确定您需要阅读和配置的 3 个主要组件:
- Docker / Web 服务(主要用于端口)
- 反向代理
- DNS(域名服务)
Docker / Web 服务
首先,要明白每个 Web 服务(包括在容器中运行的服务)都可以配置为在不同的端口上运行。使用 Docker 尤其容易,因为您可以根据需要公开(发布)和映射端口(Docker 参考)。
例如,如果您想将容器中的端口 80 重新映射到主机上的端口 8080,则可以添加参数-p
来启动容器:
docker run -p 8080:80 <image>:<tag>
冒号前面的端口:
是主机上暴露的端口(可以根据自己的喜好更改),后面的端口:
是内部端口(不能更改)。
反向代理
接下来,反向代理简单来说,反向代理可以接受不同的 DNS 请求并转发到不同的主机和/或端口,如下例所示(本例中您的主机 IP 为 10.10.10.X):
网站地址 | 目标主机和端口 |
---|---|
sub1.你的域名.com | 10.10.10.10:8080 |
sub2.你的域名.com | 10.10.10.10:9090 |
sub3.你的域名.com | 10.10.10.50:10000 |
这是一个非常简单的例子。当然,诀窍是让你的反向代理服务器在普通的HTTP 和 HTTPS 端口(80 和 443)。现在,当您进入https://sub1.yourdomain.com
浏览器时,它会将端口上的流量重定向443
到10.10.10.10:8080
表中所示的位置。
此外,反向代理还可以做很多其他事情,比如统一证书等。有几种反向代理解决方案,如 Apache、Nginx、Traefik、HAProxy 等。
DNS(域名服务)
最后,为了使反向代理响应 DNS 子域,必须设置 DNS 解析器。
如果需要在互联网上访问,则应在公共 DNS 服务(如 Cloudflare 等)上配置所有必需的域名。将所有域指向您的 WAN IP 地址,并将防火墙中的端口转发到您的反向代理服务器。
此外,您还可以运行自己的内部 DNS 服务,以在您的 LAN 上公开服务。这里的一些常见选项是 Bind9、Unbound 等。
实例
只是为了让你了解我的一些网络服务是如何设置的:
其他相关问答
此外,这里还有一些其他的答案涉及这个主题: