Flask项目部署

Flask项目部署到云服务器

web 项目工作流程

  • 开发模式

    浏览器(chrome) <=> 开发服务器(Flask / WSGI Server) <=> Python(Flask) <=> 数据库(MySQL)

  • 生产模式

    浏览器(chrome) <=> 反向代理服务器(Nginx) <=> WSGI 服务器(uWSGI) <=> Python(Flask) <=> 数据库(MySQL)

运行环境迁移

  • pip freeze > requirements.txt 将当前项目所使用的依赖包列表(包名及版本号)保存到 requirements.txt 中
  • pip install -r requirements.txt 安装 requirements.txt 中所列举的依赖包

Nginx

  • 安装 sudo apt-get nginx

  • 配置

    • 配置文件目录 /etc/nginx
    • 虚拟主机目录 /etc/nginx/conf.d
  • Nginx 默认站点配置体验

  • 添加虚拟主机

    • /etc/nginx/conf.d 下增加 blog.com.conf

      server {
      	listen 80;
      	server_name blog.com www.blog.com;
      	
      	location / {
      		root /var/www/blog;
      		index index.html;
      	}
      }
      
    • 检查 Nginx 配置 sudo nginx -t

    • 重启 Nginx sudo service nginx restart

    • 增加本地主机映射,修改 /etc/hosts

      10.10.10.10 blog.com
      10.10.10.10 www.blog.com
      
  • 创建项目目录 sudo mkdir /var/www/blog

    • 创建首页文件 /var/www/blog/index.html

uWSGI

实现了 WSGI 协议的 Web 服务器,使用 uWSGI 启动 Flask 应用

  • 创建 Flask 项目 /var/www/blog/blog.py
  • 安装 pip install uwsgi
  • 配置
--http        # 以 HTTP 方式启动,监听ip及端口:10.10.10.10:5000
--socket      # 以 socket 方式启动,监听ip及端口:10.10.10.10:5000
--chdir       # 项目目录
--module      # 指定 WSGI 模块
--callable    # 指定应用程序
--daemonize   # 指定后台启动的日志文件
--processes   # 指定启动进程数
--threads     # 指定启动线程数
  • HTTP 方式启动

  • uwsgi --http 127.0.0.1:5000 --module manage --callable app
    uwsgi --http 0.0.0.0:5000 --module manage:app
    
  • socket 方式启动

uwsgi --socket 127.0.0.1:5000 --module manage --callable app
uwsgi --socket 127.0.0.1:5000 --module manage:app
netstat -tlnp 命令可以查看 有那些端口被使用
  • nginx 转发(TCP)
 server {
  	listen 80;
  	server_name blog.com www.blog.com
  	
  	location / {
  		include uwsgi_params;
  		uwsgi_pass 127.0.0.1:5000;
  	}
  }

从配置文件启动 uwsgi (socket) uwsgi.ini

uwsgi --ini uwsgi.ini

[uwsgi]
socket = 127.0.0.1:5000
module = manage
callable = app
daemonize = /var/log/uwsgi.log
  • nginx 转发(HTTP)

    • server {
      	listen 80;
        server_name blog.com www.blog.com;
        
        location / {
          proxy_pass http://127.0.0.1:5000;
        }
      }
      
  • 从配置文件启动 (http)

    • [uwsgi]
      http = 127.0.0.1:5000
      module = manage
      callable = app
      daemonize = /var/log/uwsgi.log
      

静态资源

Nginx 有很好的静态资源处理能力,images,css,javascript 通常由 nginx 直接输出,无需通过 WSGI 服务器

  • 静态资源匹配规则

  • location /static {
    	root /var/www/blog;
      #alias /var/www/blog/static;
    }
    
  • 创建静态资源文件夹 mkdir static,并拷贝一张图片

  • 通过 www.blog.com/static/image.jpep访问

你可能感兴趣的:(Flask,Python,项目部署)