使用Docker搭建Nginx+uWSGI+Flask环境

因为非常紧急,所以我制作了它。

环境

操作系统:Windows 11专业版
已安装Docker桌面应用

Flask应用程序

我会确保显示到最低限度。

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
	return "Hello World!"

if __name__ == "__main__":
	app.run(debug=True)

Nginx 是一个广泛使用的开源反向代理服务器,用于提供高性能的网站和应用程序服务。

server {
	listen 5000;
	server_name  localhost;

	location / {
		include uwsgi_params;
		uwsgi_pass unix:///tmp/uwsgi.sock;
	}
}

uWSGI

[uwsgi]
module = app
callable = app
master = true
processes = 1
socket = /tmp/uwsgi.sock
chmod-socket = 666
vacuum = true
die-on-term = true
wsgi-file = /app.py

Docker
容器

HOME_PATH = './'
ROOT_PATH = '/var/www/html/'
flask
uwsgi
FROM python:3.11

RUN mkdir -p /var/www/html/
COPY requirements.txt /var/www/html/
COPY uwsgi.ini /var/www/html/
COPY .env /var/www/html/
COPY const.py /var/www/html/
COPY app.py /var/www/html/
COPY /data/ /var/www/html/
WORKDIR /var/www/html/

RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
RUN pip install -r requirements.txt
version: '3'

services:
  app:
    image: python:3.11
    build: ${HOME_PATH}
    container_name: app
    working_dir: ${ROOT_PATH}
    volumes:
      - ${HOME_PATH}:${ROOT_PATH}
      - socket:/tmp
    command: uwsgi --ini ${ROOT_PATH}uwsgi.ini
    restart: always
    tty: true

  nginx:
    image: nginx:latest
    ports:
      - "5000:5000"
    volumes:
      - ${HOME_PATH}web/nginx.conf:/etc/nginx/conf.d/default.conf
      - socket:/tmp

volumes:
  socket:

组成

這樣大概就是這樣了。
雖然應該要好好區分,但暫時先這樣吧…

app/
 ├── web/
 │    └── nginx.conf
 ├── .env
 ├── app.py
 ├── docker-compose.yml
 ├── Dockerfile
 ├── requirements.txt
 └── uwsgi.ini

执行

docker compose up --build
image.png

大致来说,我正在进行的工作是配置Nginx和uWSGI之间的通信,以确保套接字文件等设置正确。
在Docker启动时,我将执行文件复制到Nginx的公共目录(/var/www/html)中,并执行命令“uwsgi –ini /var/www/html/uwsgi.ini”。

请参考

我已参考您的意见。多谢。

尝试使用Flask + uWSGI + Nginx运行WSGI
在さくら的VPS(CentOS 6.6)上运行Flask + uWSGI + Nginx直到Hello World为止
使用Flask + uwsgi + Nginx执行API

广告
将在 10 秒后关闭
bannerAds