Ubuntu16.04 flask + nginx + uWSGI 部署
前言
又有段时间没写博客了,最近一直在写外包项目,都没啥空余时间。这几天花了不少时间做项目部署,也看了不少教程,这里就记录下整个过程,也方便以后要做类似部署的时候不用再查来查去了。
flask + uWSGI
看到网上的教程都是清一色的使用 virtualenv 来创建虚拟环境,但我更倾向于使用 anaconda 来管理虚拟环境,关于 Ubuntu 中 anaconda 的安装,可以参考这篇博客,安装完成后,建议在 anaconda 中添加清华源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
# 以上两条是Anaconda官方库的镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
# 以上是Anaconda第三方库 Conda Forge的镜像
# for linux
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
# for legacy win-64
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/peterjc123/
以上两条是Pytorch的Anaconda第三方镜像
conda config --set show_channel_urls yes
可以使用 conda info 命令来查看是否添加成功。
接着,我们创建一个虚拟环境
conda create -n "环境名称" python=python版本
然后通过命令 source activate 环境名称 进入虚拟环境
接着开始安装 flask 与 uWSGI
conda install flask
conda install uwsgi
这里我就借用一下别人博客里清一色的 Demo, 创建文件 myproject.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "<h1 style='color:blue'>Hello There!</h1>"
manage.py
from myproject import app
if __name__ == "__main__":
app.run()
输入 python manage.py 运行,然后浏览器输入 http://localhost:5000/ 即可看到结果
nginx
sudo apt-get update
sudo apt-get install nginx
接着,在 Nginx 的 sites-available 目录中创建一个新的服务器块配置文件
sudo nano /etc/nginx/sites-available/myproject
这个是我最开始使用的
server {
listen 80;
server_name server_domain_or_IP;
location / {
include uwsgi_params; # 导入uwsgi配置
uwsgi_pass 127.0.0.1:8000; # 转发端口,需要和uwsgi配置当中的监听端口一致
}
}
完成后,保存文件,然后输入 sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled 将配置文件链接到 sites-enabled 目录
然后测试一下是否有语法问题
sudo nginx -t
若无问题,则重启 nginx
sudo systemctl restart nginx
配置 uWSGI
最后开始 uWSGI 相关文件的配置,看了网上的教程,感觉都很麻烦,通过同学了解到一个十分简单的方法,在我们之前创建的 manage.py 所在目录下,创建 uwsgi.ini 和 uwsgi.pid
uwsgi.ini
[uwsgi]
module = manage:app
master = true
chdir = .
socket = 127.0.0.1:8000
chmod-socket = 660
vacuum = true
wsgi-file = manage.py # flask程序的启动文件
pidfile=./uwsgi.pid
limit-as = 512
http-timeout = 300
socket-timeout = 300
harakiri = 300
uwsgi.pid
20830
接着,通过以下命令,即可启动 uwsgi
注:需在创建的虚拟环境中输入
nohup uwsgi uwsgi.ini > wsgi.log 2>&1 &
结束命令
uwsgi --stop uwsgi.pid
重启命令
uwsgi --reload uwsgi.pid
然后,我们到本地浏览器中输入 http://server_domain_or_IP 即可看到结果
这里顺便再讲讲 nginx 配置 https
首先要先申请 SSL,申请成功后会用申请的域名为包名发送给你,打开后有

将 Nginx 目录下的两个文件上传到 /etc/nginx 目录下

然后将之前的 nginx 服务的配置文件改为
server {
listen 443;
server_name xxx; # 你的域名
ssl on;
ssl_certificate /xxx.crt;# 改成你的证书的名字
ssl_certificate_key /xxx.key;# 你的证书的名字
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_request_buffering off;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Connection "";
include uwsgi_params; # 导入uwsgi配置
uwsgi_pass 127.0.0.1:8000; # 转发端口,需要和uwsgi配置当中的监听端口一致
}
}
server {
listen 80;
server_name xxx; # 你的域名
rewrite ^(.*)$ https://$host$1 permanent;#把http的域名请求转成https
client_max_body_size 75M;
}
剩下的步骤与上面 nginx 相同。这样,便可通过 https 进行访问了。
小节
这还是我头一次做环境部署,花了不少时间,在部署成功的那一刻,真的是十分开心。一开始是准备在 Windows 服务器上进行项目部署,捣鼓了两天没弄出来,就直接放弃然后转用 linux 服务器,半天多的时间就搞定了。然后今天早上搞 mysql 的远程连接也搞了一早上,服务器中防火墙、mysql权限什么全都做了,就是连不上,最后发现是因为安全组 3306 端口没打开,白白多花几个小时。。。还是太菜了

Ubuntu16.04 flask + nginx + uWSGI 部署的更多相关文章
- Flask + Nginx + uwsgi 部署过程
一.安装Flask 1.itsdangerous tar xvf itsdangerous-0.23.tar.gz cd itsdangerous-0.23/ python setup.py inst ...
- certbot自动在ubuntu16.04的nginx上部署let's encrypt免费ssl证书
终结CA收费时代,让互联网更安全 Install On Ubuntu systems, the Certbot team maintains a PPA. Once you add it to you ...
- Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统
Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统 这个是写好的Django程序在本地机运行的情况,一个查询接口. 准备工作 1.首先购买一台阿里云的EC ...
- [阿里云部署] Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器
部署地址:123.56.7.181 Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器 这个标题就比之前的"ECS服务器配置Web环境的全过程及参考资料&qu ...
- Flask+Nginx+uWSGI在Ubuntu服务器上的配置
Flask+Nginx+uWSGI在Ubuntu服务器上的配置 Step1 安装系统环境 Ubuntu服务器选择是阿里云的ECS服务,ECS提供单独的内存\CPU\带宽\存储规格可以选择,并且提供合适 ...
- 填坑!!!virtualenv 中 nginx + uwsgi 部署 django
一.为什么会有这篇文章 第一次接触 uwsgi 和 nginx ,这个环境搭建,踩了太多坑,现在记录下来,让后来者少走弯路. 本来在 Ubuntu14.04 上 搭建好了环境,然后到 centos7. ...
- nginx + uwsgi 部署 Django+Vue项目
nginx + uwsgi 部署 Django+Vue项目 windows 本地 DNS 解析 文件路径 C:\Windows\System32\drivers\etc 单机本地测试运行方式,调用dj ...
- CentOS7 + Python3 + Django(rest_framework) + MySQL + nginx + uwsgi 部署 API 开发环境, 记坑篇
CentOS7 + Python3 + Django(rest_framework) + MySQL + nginx + uwsgi 部署 API 开发环境 CentOS7 + Python3 + D ...
- Nginx + uWSGI部署中的一些小坑
1.invalid host in upstream报错 重新启动nginx : sudo /etc/init.d/nginx restart 原因是在配置负载均衡nginx.conf配置文件时,发现 ...
随机推荐
- 数值计算方法实验之按照按三弯矩方程及追赶法的三次样条插值 (MATLAB 代码)
一.实验目的 在已知f(x),x∈[a,b]的表达式,但函数值不便计算,或不知f(x),x∈[a,b]而又需要给出其在[a,b]上的值时,按插值原则f(xi)= yi(i= 0,1…….,n)求出简单 ...
- win10好用的桌面工具分享+网盘下载链接
1.Everything Everything是voidtools开发的一款文件搜索工具,官网描述为“基于名称实时定位文件和目录(Locate files and folders by name in ...
- ajax发送时禁用按钮
css /*div无法点击*/ .div-cant-click { pointer-events: none; } 发送ajax实例 $.ajax({ url:'url', type:'post', ...
- hdu_1052 Tian Ji -- The Horse Racing 贪心
Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- Python-四则运算-蔡晓晴,杜婷萱
github链接:https://github.com/Amy-CC/Arithmetic-Operation 一.需求 1.使用-n 参数控制生成题目的个数 2.使用-r 参数控制题目中数值(自然数 ...
- CreateDIBSection和位图结构
2019独角兽企业重金招聘Python工程师标准>>> 理解分辨率 我们常说的屏幕分辨率为640×480,刷新频率为70Hz,意思是说每行要扫描640个象素,一共有480行,每秒重复 ...
- 带权并查集--hdu3047 ZJnu stadium
题意:给出一个n,m,n表示的是有n 个人,m表示的是 有m 对关系: 接下来输入的就是这m对关系,a,b,x:表示的是a,b相距x个距离:然后判断输入的是否与这个数的上面的数信息一致, 输出不一致的 ...
- 图论--树的直径--DFS+树形DP模板
#include <iostream> #include <cstring> using namespace std; //maxv:源点能到的最远点,maxdis:最远点对应 ...
- 曹工谈并发:Synchronized升级为重量级锁后,靠什么 API 来阻塞自己
背景 因为想知道java中的关键字,对应的操作系统级别的api是啥,本来打算整理几个我知道的出来,但是,尴尬的是,我发现java里最重要的synchronized关键字,我就不知道它对应的api是什么 ...
- python(time 模块)
一.Time 模块 1.时间戳 时间戳是指格林威治时间 1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒) 起至现在的总秒数 最早出现的 UNIX 操作系统考 ...