2

嗨,我在同一个 Ubuntu 12.04 服务器上通过 Docker 和 Apache 服务器安装了 Discourse。

Discourse 容器暴露在 81 端口,Apache 在 80 端口。

如何设置 Apache 以显示 Apache web 像“something.com”和话语 docker 像“forum.something.com”这样的东西。

我将它用于 Discourse:https ://github.com/discourse/discourse_docker

4

2 回答 2

3

我为此使用了一个单独的虚拟主机。我假设您想使用 SSL。

<VirtualHost *:443>
        ServerName forum.something.com
        ProxyPreserveHost On
        ProxyPass        "/" "http://localhost:2080/"
        ProxyPassReverse "/" "http://localhost:2080/"
        RequestHeader set X-Forwarded-Proto "https"
        DocumentRoot /home/pub

        [... SSL stuff ...]

</VirtualHost>

非 SSL 虚拟主机重定向到 SSL 虚拟主机:

<VirtualHost *:80>
    ServerName forum.something.com

    # Use the next lines if you want to exclude the 
    # Let's Encrypt verification URL from proxied to Discourse
    # otherwise, only use the Redirect clause.
    <LocationMatch "^/(?!\.well-known)">
                   Redirect permanent / https://forum.something.com/
    </LocationMatch>
    DocumentRoot /home/pub

Discource docker 映像的 container.yml 文件包含

expose:
  - "127.0.0.1:2080:80"   # http

在 Discourse 设置中,您还应该启用force_https. 因此,Discourse 本身不向外界公开任何主机。

于 2017-09-08T12:02:48.943 回答
2

您可以使用任何反向代理来执行此操作。

您有一个用于 apache 的容器,一个用于话语的容器(或两个容器),并且您没有公开任何端口(不要使用-p)。PORT但是,如果您通过 dockerfile 构建映像,则可能需要使用该指令。

<ip container apache>:80容器运行后,您应该能够通过<ip container discourse>:81主机访问它们。

现在您可以使用反向代理启动一个新容器。如果您使用过PORT,您甚至可以链接容器(即docker run -link <apache container name>:apache -link <discourse container name>:discourse)以便在 env 上拥有 ips。

您可以使用反向代理,如 apache、nginx 或 hipache。

当您运行反向代理容器时,您需要指定-p 0.0.0.0:80:80它以使其在主机外部可用。

使用 docker 链接进行反向代理的 nginx 配置示例:https ://github.com/creack/prod/blob/master/nginx/nginx.conf#L27

于 2014-02-05T00:36:55.530 回答