我正在关注这个example和answer on stackoverflow,我被困住了.我在digitalocean VPS上运行此示例.我的文件结构如下:项目结构docker-compose.ymlmainweb/nginx/README泊坞窗,compose.ymlversion: 2services:app:...

我正在关注这个example和answer on stackoverflow,我被困住了.
我在digitalocean VPS上运行此示例.我的文件结构如下:
项目结构
docker-compose.yml
mainweb/
nginx/
README
泊坞窗,compose.yml
version: '2'
services:
app:
restart: always
build: ./mainweb
command: gunicorn -w 2 -b :5000 wsgi:app
networks:
- mainnet
expose:
- "5000"
ports:
- "5000:5000"
nginx:
restart: always
build: ./nginx
networks:
- mainnet
links:
- app
volumes:
- /www/static
expose:
- 8080
ports:
- "8880:8080"
networks:
mainnet:
mainweb /
app.py
Dockerfile
requirements.txt
templates/
wsgi.py
mainweb / app.py
from flask import Flask, render_template
app=Flask(__name__)
@app.route('/')
def home()():
return render_template('templates/home.html')
if __name__=="__main__":
app.run(host="0.0.0.0", port=5000)
mainweb / Dockerfile
FROM python:3.5
MAINTAINER castellanprime
RUN mkdir /mainweb
COPY . /mainweb
WORKDIR /mainweb
RUN pip install -r requirements.txt
mainweb /模板/
home.html
mainweb /模板/ home.html做为
<!doctype html>
<html>
<head>
<title> My website </title>
</head>
<body>
<h1> I am here </h1>
</body>
</html>
mainweb / wsgi.py
from app import app
if __name__=="__main__":
app.run()
nginx的
Dockerfile
sites-enabled.conf
static/
nginx的/ Dockerfile
FROM nginx:1.13.1-alpine
MAINTAINER castellanprime
ADD sites-enabled.conf /etc/nginx/conf.d/sites-enabled.conf
ADD static/ /www/static/
nginx的/网站,enabled.conf
server{
listen 8080;
server_name app; # Should I put my actual www.XXXXXX.XXXXX address here
charset utf-8;
location /static{
alias /www/static/;
}
location / {
proxy_pass http://app:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X_Forwared-For $proxy_add_x_forwarded_for;
}
}
nginx的/静
css/
js/
运行命令docker-compose up -d后,我从另一个系统上的另一个Web客户端检查www.XXXXXX.com:8880或www.XXXXXX.com:8080.
我得到了标准的nginx网页.
如何将其重定向到home.html?
解决方法:
退后一步,单独运行Flask应用程序.
你有一些语法错误.
from flask import Flask, render_template
app=Flask(__name__)
@app.route('/')
def home(): # Remove double brackets
return render_template('home.html') # The templates folder is already picked up
if __name__=="__main__":
app.run(host="0.0.0.0", port=5000)
然后在Docker容器中,没有gunicorn
FROM python:3.5
RUN mkdir /mainweb
COPY . /mainweb
WORKDIR /mainweb
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python3","/mainweb/app.py"]
运行它,看它是否有效.
cd mainapp
docker build -t flask:test .
docker run --rm -p 5000:5000 flask:test
打开http://server:5000
然后从docker-compose开始只使用该容器并根据需要定义nginx.
nginx的/ Dockerfile
FROM nginx:1.13.1-alpine
ADD flask.conf /etc/nginx/conf.d/
EXPOSE 8080
nginx / flask.conf(我根据项目中的文件改变了这个)
server {
listen 8080; # This is the port to EXPOSE in nginx container
server_name app; # You can change this, but not necessary
charset utf-8;
location ^~ /static/ {
alias /usr/share/nginx/html/;
}
location / {
try_files $uri $uri/ @flask;
}
location @flask {
proxy_pass http://app:5000; # This is the port Flask container EXPOSE'd
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X_Forwared-For $proxy_add_x_forwarded_for;
}
}
最后,撰写.您不希望您的网站暴露5000和80(您不希望人们绕过nginx),所以只是不要暴露5000
version: '2'
services:
app:
restart: always
build: ./mainweb
networks:
- mainnet
nginx:
restart: always
build: ./nginx
networks:
- mainnet
links:
- app
volumes:
- ./mainweb/static:/usr/share/nginx/html
ports:
- "80:8080"
networks:
mainnet:
本文标题为:python – Nginx没有服务我的Flask网站


基础教程推荐
- 30 个 Python 函数,加速数据分析处理速度 2023-08-11
- python-pycurl失败,但是curl(来自bash)在ubuntu中工作 2023-11-10
- 详解Python中的List 2 2023-08-11
- 【python安装】Windows上安装和创建python开发环境 2023-09-03
- python os模块介绍 2023-08-11
- 【转】新装的CentOS 7安装python3 2023-09-03
- python-为大型对象分配名称似乎会大大增加内存使用量 2023-11-14
- python的内存管理 2023-09-03
- Python:忽略后台进程中的信号 2023-11-12
- Python:使用多处理从不同进程附加到同一列表 2023-11-15