Virtualhost:使用 Docker 将 Flask 网站放到网上

Virtualhost: Put online a Flask website with Docker

我尝试使用 Docker 将 Flask 网站放到网上。因此,我创建了一个 Docker 文件,一个 docker-compose,现在我可以使用我的域名在线查看我的网站。

尽管有我的虚拟主机,但我无法使用子域和没有端口“:5000”的方式访问我的网站。这个虚拟主机似乎完全被忽略了!

Docker文件:

从python:latest

RUN apt-get update && apt-get install -y apache2 \
    libapache2-mod-wsgi \
    build-essential \
    python \
    python-dev \
    python-pip \
    vim \
&& apt-get clean \
&& apt-get autoremove

RUN apt-get install -y wget

COPY src /var/www/flask

RUN apt-get install -y python-requests
RUN pip install flask-user
RUN pip install -r var/www/flask/myapp/requirements.txt

COPY src/myapp/myapp.conf /etc/apache2/sites-available/myapp.conf
RUN a2enmod rewrite
RUN a2enmod wsgi
RUN a2enmod proxy_http
RUN a2ensite myapp.conf
RUN service apache2 restart

EXPOSE 80

docker-compose.yml

flask:
    image: flask:latest
    command: python /var/www/flask/myapp/__init__.py
    volumes:
    - "/root/workspace/python/src/:/var/www/flask"
    ports:
    - "5000:5000"

虚拟主机

<VirtualHost *:80>
    ServerName my.domain.guru

    WSGIDaemonProcess myapp
    WSGIScriptAlias / /var/www/flask/myapp/myapp.wsgi

    <Directory /var/www/flask/myapp>
        WSGIProcessGroup myapp
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>

        ProxyPass / http://localhost:5000/
        ProxyPassReverse / http://localhost:5000/
        ProxyPreserveHost On
</VirtualHost>

__init__.py

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
  return "test" 

if __name__ == "__main__":
  app.run(host='0.0.0.0')

有了这些 URL 我可以看到我的网站:

但是,我只想通过 URL 访问我的网站:“my.domain.guru”。如果我尝试使用此 URL,我会收到以下错误消息:

Forbidden

You don't have permission to access / on this server.

如何操作?

(我无法使用80端口,因为它已经被其他网站使用了)

这是端口 80:"my.domain.guru",因此您需要配置当前 运行 位于 80 的 Web 服务器以在 5000 中代理您的应用程序。

此外,您永远不会 运行 连接 Apache,因为您的命令 运行 仅 __init__.py。不要将容器视为具有自己的服务管理的轻量级 VM。容器 运行 仅包含您在 Dockerfile 或 docker-compose 中定义的 command/entrypoint。

所以我的建议是将您的命令更改为 运行 Apache (/usr/sbin/apache2 -DFOREGROUND) 或将您当前的 Web 服务器指向端口 80 以代理 flask 的端口 5000。