Rumah >Operasi dan penyelenggaraan >Nginx >Cara menggunakan Docker untuk menggunakan aplikasi Nginx+Flask+Mongo
nginx digunakan sebagai pelayan, mongo ialah sokongan pangkalan data, dan flask ialah rangka kerja web bahasa python Menggunakan ciri bekas docker, ia boleh digunakan dengan mudah pada pelayan Linux
Persediaan projek
__ project-name |__ docker-file |__ ningx |__ dockerfile |__ conf |__ nginx.conf |__ flask |__ dockerfile |__ requirements.txt |__ mongo |__ dockerfile |__ setup.sh |__ docker-compose.yml |__ src |__ app |__ ... |__ run.py
Penerangan ringkas
The Direktori fail docker ialah fail konfigurasi yang digunakan oleh dockerDirektori src ialah kod python bagi aplikasi flaskKonfigurasi terperinci Dockerversion: '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
/mongo/setup.sh Kandungannya adalah seperti berikut
Tujuan fail ini adalah untuk mencipta ujian pengguna dengan kata laluan ujian selepas memulakan mongodb, dan berikannya operasi baca dan tulis ujian pangkalan data
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
/flask/dockerfile adalah seperti berikut
#!/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
/src/app/run.py kod
Berikut ialah ulasan untuk menyahpepijat app.run(), mulakan dengan gunicorn apabila menerbitkan
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
Kandungan /nginx/dockerfile adalah seperti berikut
from app import create_app app = create_app('default') app.debug=false # if __name__ == '__main__': # app.run()
/nignx/conf/nginx.conf adalah seperti berikut
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
Mulakan penggunaan
Masukkan direktori docker-flie cd docker-flie
Mulakan docker docker-compose up
Lihat status kontena docker ps
Saya telah mencuba perkara berikut, tetapi ia akan menunjukkan bahawa mongdb belum bermula.
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; } } }
add setup.sh /data/setup.sh run chmod +x /data/setup.sh cmd ["/data/setup.sh"]Tukar kembali kepada 127.0.0.1 apabila menguji secara setempat
Atas ialah kandungan terperinci Cara menggunakan Docker untuk menggunakan aplikasi Nginx+Flask+Mongo. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!