nginx is used as the server, mongo is the database support, and flask is the web framework of the python language. Using the container features of docker, it can be simply deployed on the Linux server
Project preparation
The main directory of the project is as follows
__ project-name |__ docker-file |__ ningx |__ dockerfile |__ conf |__ nginx.conf |__ flask |__ dockerfile |__ requirements.txt |__ mongo |__ dockerfile |__ setup.sh |__ docker-compose.yml |__ src |__ app |__ ... |__ run.py
Brief description
The docker-file directory is the configuration file for docker deployment
The src directory is the python code of the flask application
Docker’s detailed configuration
##docker-compose configuration
version: '2.2' services: mongo: build: ./mongo volumes: - "./mongo/db:/data/db" restart: always ports: - "27017:27017" environment: mongo_initdb_root_username: root mongo_initdb_root_password: 123456 flask: build: ./flask links: - mongo ports: - "5000:5000" expose: - "5000" volumes: - ../src:/home/web nginx: build: ./nginx links: - flask volumes: - "./nginx/log:/var/log/nginx" - "../:/usr/share/nginx/html" ports: - "80:80" - "8080:8080" - "443:443" restart: always
mongodb configuration
from mongo:3.6 # 设置时区 env tz=asia/shanghai run ln -snf /usr/share/zoneinfo/$tz /etc/localtime && echo $tz > /etc/timezone # 设置工作目录 env workdir /usr/local/work env auto_run_dir /docker-entrypoint-initdb.d env install_mongo_shell setup.sh run mkdir -p $workdir # 复制数据库的初始化命令 copy ./$install_mongo_shell $auto_run_dir/ run chmod +x $auto_run_dir/$install_mongo_shell
#!/bin/bash mongo <<eof use admin; db.auth('root', '123456'); use dmx_aluminum; db.createuser({user:'test',pwd:'test',roles:[{role:'readwrite',db:'test'}]}); db.createcollection("user"); eof
flask application The configuration
from python:3.6 # 设置时区 env tz=asia/shanghai run ln -snf /usr/share/zoneinfo/$tz /etc/localtime && echo $tz > /etc/timezone # 设置工作区 run mkdir -p /home/web workdir /home/web # 添加依赖 add requirements.txt /home/web/requirements.txt run pip3 install -i https://pypi.douban.com/simple/ -r requirements.txt # 使用gunicorn启动应用 cmd gunicorn -w 4 -b 0.0.0.0:5000 run:app
from app import create_app app = create_app('default') app.debug=false # if __name__ == '__main__': # app.run()
nginx configuration
The contents of
from nginx:1.14 # 设置时区 env tz=asia/shanghai run ln -snf /usr/share/zoneinfo/$tz /etc/localtime && echo $tz > /etc/timezone # 复制配置 copy conf/nginx.conf /etc/nginx/nginx.conf
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; # 开启gzip gzip on; gzip_min_length 1k; gzip_buffers 4 16k; #gzip_http_version 1.0; gzip_comp_level 1; gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; gzip_vary off; gzip_disable "msie [1-6]\."; server { listen 80; server_name localhost; keepalive_timeout 5; root /usr/share/nginx/html; location /static/ { alias /usr/share/nginx/html/src/app/static/; } location / { # checks for static file, if not found proxy to app try_files $uri @flask_app; } location @flask_app { proxy_pass http://192.168.0.2:5000; # 发布在阿里云上,应填写内网ip proxy_redirect off; proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; proxy_set_header host $http_host; proxy_set_header x-real-ip $remote_addr; #proxy_buffers 8 32k; #proxy_buffer_size 64k; } } }
Start deployment
Trampling on pitfalls
add setup.sh /data/setup.sh run chmod +x /data/setup.sh cmd ["/data/setup.sh"]
mongodb_settings = { 'db': 'test', 'host': 'mongo', # 127.0.0.1 host地址一定要写你配置的--link的名字 'username': 'test', 'password': 'test', 'port': 27017 }
The above is the detailed content of How to use Docker to deploy Nginx+Flask+Mongo applications. For more information, please follow other related articles on the PHP Chinese website!