嗨,我在同一个 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
嗨,我在同一个 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
我为此使用了一个单独的虚拟主机。我假设您想使用 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 本身不向外界公开任何主机。
您可以使用任何反向代理来执行此操作。
您有一个用于 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