使用Docker-Compose部署Flask+Gunicorn+Nginx应用 日付: 11月 12, 2018 リンクを取得 Facebook × Pinterest メール 他のアプリ ## Project Folder Structures ``` ├── app │ ├── Dockerfile │ ├── main.py │ └── requirements.txt ├── docker-compose.yml ├── Makefile └── nginx.conf ``` ## Deployment Architecture Flask虽然自带有简易的server,但是不能用于生产环境,因此需要利用nginx等成熟的server。 python的web项目在部署时一般是用uWSGI或Gunicorn等server软件拉起来。Gunicorn本身可以直接作为server,但是一般还需要nginx做反向代理,实现动静分离、提高安全性等。nginx对于静态文件等可以直接response,对于动态请求则通过socket发送到Gunicorn服务器,Gunicorn再调用Flask的代码处理。 `Client <=> nginx <=> WSGI Server <=> Flask` ## Flask + Gunicorn Flask项目代码放在app目录下 #### app/main.py Flask的入口文件 ```python import flask app = flask.Flask(__name__) @app.route('/') def index(): return "Hello World" if __name__ == '__main_': app.run() ``` #### app/Dockerfile 运行Gunicorn的容器Dockerfile,主要是安装必要的python包 ```docker FROM python:slim WORKDIR /root COPY requirements.txt . RUN pip3 install --no-cache-dir -r requirements.txt CMD ["gunicorn", "--workers=3", "main:app", "-b", "0.0.0.0:80"] ``` ## nginx nginx的docker容器直接使用官方image即可,但是需要自定义配置文件 #### nginx.conf 主要需要定义向uwsgi转发地址和端口 ```nginx user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { sendfile on; keepalive_timeout 65; server { listen 80; server_name _; charset utf-8; location / { proxy_pass gunicorn:80; } } } ``` ## docker-compose #### Installation ```bash sudo curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ``` #### docker-compose.yml 定义两个docker容器uwsgi和nginx的运行参数,主要的配置项有 * 将配置文件和代码文件挂载到容器中的对应路径 * 设置host到Gunicorn的端口映射 * 设置nginx到Gunicorn的连接 ```yml version: "3" services: gunicorn: build: ./app volumes: - ./app:/root/app environment: TZ: "Asia/Shanghai" nginx: image: nginx:alpine ports: - "25000:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf links: - gunicorn environment: TZ: "Asia/Shanghai" ``` ## make 到此就可以用docker-compose管理service了。还可以可选的用make管理常用的一些命令。这里定义了`run`, `stop`和`restart`等命令 #### Makefile ```Makefile run: docker-compose build docker-compose up -d stop: docker-compose stop restart: docker-compose restart ``` 之后就可以用`make run`, `make stop`和`make restart`命令管理 コメント
コメント
コメントを投稿