jokerchu 发表于 2018-11-14 10:03:02

flask uwsgi nginx 部署文档


[*]  系统包安装
  # more /etc/redhat-release

  CentOS Linux>  #
  # yum install epel-release
  # yum install -y nginx
  # yum install -y uwsgi
  # yum install -y uwsgi-plugin-python
  2.python packets
  1). setuptools
  # wget https://pypi.python.org/packages/a9/23/720c7558ba6ad3e0f5ad01e0d6ea2288b486da32f053c73e259f7c392042/setuptools-36.0.1.zip#md5=430eb106788183eefe9f444a300007f0
  # ll
  # yum install -y unzip
  # unzip setuptools-36.0.1.zip
  # cd setuptools-36.0.1
  # ls
  # python setup.py install
  # cd ..
  2).ez_setup
  # wget https://pypi.python.org/packages/ba/2c/743df41bd6b3298706dfe91b0c7ecdc47f2dc1a3104abeb6e9aa4a45fa5d/ez_setup-0.9.tar.gz
  # ls
  # tar zxvf ez_setup-0.9.tar.gz
  # cd ez_setup-0.9
  # ls
  # python setup.py install
  # cd ..
  3). pip
  # easy_install pip
  4).Flask
  # pip install Flask
  5).virtualenv
  # pip install virtualenv
  3.app configuration
  1).web app
  # cd /opt/
  # ls
  # mkdir app
  # ls
  # useradd webapp
  # chown webapp.webapp app
  # su - webapp
  $ cd /opt/app
  $ vi app.py
  from flask import Flask
  app = Flask(__name__)
  @app.route("/")
  def index():
  return "hello,Flask web app."
  if __name__ == "__main__":
  app.run('0.0.0.0', port=3333, debug=True)
  $ vi website.py
  import sys
  import os.path
  sys.path.insert(0, os.path.dirname(__file__))
  from app import app as application
  $ virtualenv --no-site-packages env
  $ . env/bin/activate
  $ pip install flask
  $ python app.py
  2).uwsgi configuration
  $ mkdir -p uwsgi/apps-enabled
  $ vi uwsgi/apps-enabled/app.ini
  
  buffer-size = 32768
  plugins = python
  socket = 127.0.0.1:5000
  threads = 2
  master = true
  uid = webapp
  gid = webapp
  chdir = /opt/app/
  home = /opt/app/env/
  pp = ..
  module = website
  3).nginx configuration
  $ mkdir -p nginx/sites-enabled
  $ vi nginx/sites-enabled/app.conf
  upstream flask {
  server 127.0.0.1:5000;
  }
  # configuration of the server
  server {
  # the domain name it will serve for
  listen 8080;
  # This is very important to test the server locally
  server_name _;
  # substitute your machine's IP address or FQDN
  charset   utf-8;
  location / {
  uwsgi_passflask;
  include uwsgi_params;
  }
  }
  $ exit
  嵌入nginx配置文件
  # vi /etc/nginx/nginx.conf
  # For more information on configuration, see:
  #   * Official English Documentation: http://nginx.org/en/docs/
  #   * Official Russian Documentation: http://nginx.org/ru/docs/
  user nginx;
  worker_processes auto;
  error_log /var/log/nginx/error.log;
  pid /run/nginx.pid;
  # Load dynamic modules. See /usr/share/nginx/README.dynamic.
  include /usr/share/nginx/modules/*.conf;
  events {
  worker_connections 1024;
  }
  http {
  log_formatmain'$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.logmain;
  sendfile            on;
  tcp_nopush          on;
  tcp_nodelay         on;
  keepalive_timeout   65;
  types_hash_max_size 2048;
  include             /etc/nginx/mime.types;
  default_type      application/octet-stream;
  # Load modular configuration files from the /etc/nginx/conf.d directory.
  # See http://nginx.org/en/docs/ngx_core_module.html#include
  # for more information.
  include /etc/nginx/conf.d/*.conf;
  ###### python web app new add #####
  include /opt/app/nginx/sites-enabled/app.conf;
  server {
  listen       80 default_server;
  listen       [::]:80 default_server;
  server_name_;
  root         /usr/share/nginx/html;
  # Load configuration files for the default server block.
  include /etc/nginx/default.d/*.conf;
  location / {
  }
  error_page 404 /404.html;
  location = /40x.html {
  }
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
  }
  }
  # Settings for a TLS enabled server.
  #
  #    server {
  #      listen       443 ssl http2 default_server;
  #      listen       [::]:443 ssl http2 default_server;
  #      server_name_;
  #      root         /usr/share/nginx/html;
  #
  #      ssl_certificate "/etc/pki/nginx/server.crt";
  #      ssl_certificate_key "/etc/pki/nginx/private/server.key";
  #      ssl_session_cache shared:SSL:1m;
  #      ssl_session_timeout10m;
  #      ssl_ciphers HIGH:!aNULL:!MD5;
  #      ssl_prefer_server_ciphers on;
  #
  #      # Load configuration files for the default server block.
  #      include /etc/nginx/default.d/*.conf;
  #
  #      location / {
  #      }
  #
  #      error_page 404 /404.html;
  #            location = /40x.html {
  #      }
  #
  #      error_page 500 502 503 504 /50x.html;
  #            location = /50x.html {
  #      }
  #    }
  }
  #
  4.启动uwsgi
  # uwsgi --ini /opt/app/uwsgi/apps-enabled/app.ini
   getting INI configuration from /opt/app/uwsgi/apps-enabled/app.ini
  *** Starting uWSGI 2.0.14 (64bit) on ***
  compiled with version: 4.8.5 20150623 (Red Hat 4.8.5-11) on 13 January 2017 23:06:53
  os: Linux-3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016
  nodename: localhost.localdomain
  machine: x86_64
  clock source: unix
  pcre jit disabled
  detected number of CPU cores: 1
  current working directory: /home/soft
  detected binary path: /usr/sbin/uwsgi
  setgid() to 1001
  setuid() to 1001
  chdir() to /opt/app/
  your processes number limit is 3862

  your memory page>  detected max file descriptor number: 1024
  lock engine: pthread robust mutexes
  thunder lock: disabled (you can enable it with --thunder-lock)
  uwsgi socket 0 bound to TCP address 127.0.0.1:5000 fd 3
  Python version: 2.7.5 (default, Nov6 2016, 00:28:07)
  Set PythonHome to /opt/app/env/
  Python main interpreter initialized at 0x12128e0
  python threads support enabled
  your server socket listen backlog is limited to 100 connections
  your mercy for graceful operations on workers is 60 seconds
  mapped 280832 bytes (274 KB) for 2 cores
  *** Operational MODE: threaded ***
  added ../ to pythonpath.
  WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x12128e0 pid: 15167 (default app)
  *** uWSGI is running in multiple interpreter mode ***
  spawned uWSGI master process (pid: 15167)
  spawned uWSGI worker 1 (pid: 15172, cores: 2)
  5.启动nginx
  # nginx
  6.访问
  浏览器"http://server-ip:8080"

页: [1]
查看完整版本: flask uwsgi nginx 部署文档