简单的方法部署Flask + uwsgi + nginx到ubu
在网上搜索了一下发现有些方法因为版本过时的原因已经不适用了,在这简单记录一下我自己的部署过程。
腾讯云服务器 Ubuntu 16.04 LTS
初学web开发不久,如果有错误的地方请各位聚聚指正
1) 安装 nginx
首先安装nginx,在ubuntu终端执行:
ubuntu@VM-252-231-ubuntu:~$ sudo apt install nginx
安装成功后,访问云服务器域名或者ip应该就会出现nginx的默认页面了。
2) 安装 uwsgi
如果要使用虚拟环境,假设你的虚拟环境目录在项目文件夹下面,并且各个需要安装的包都已经安装好了,名字为venv:
首先安装 python-dev
ubuntu@VM-252-231-ubuntu:~$ sudo apt install python-dev
然后激活虚拟环境:
ubuntu@VM-252-231-ubuntu:~$ source venv/bin/activate```
我这里的项目名字是 N ,虚拟环境激活后就可以开始安装uwsgi了
针对pip安装速度慢的问题,可以加上 -i 参数,指定使用国内的豆瓣镜像
`(venv) ubuntu@VM-252-231-ubuntu:~/N$ pip install uwsgi -i https://pypi.douban.com/simple`
##### 3) 配置 uwsgi
安装好以后就可以开始配置uwsgi了,我的 uwsgi 配置文件放在了 项目文件夹下面,这里把配置内容贴上来:
[uwsgi]
master = true
home = venv
Flask 应用实例所在的模块
wsgi-file = manage.py
Flask 应用实例的名字
callable = app
socket = 127.0.0.1:5000
stats = 127.0.0.1:9191
根据你系统 CPU 的核心数决定
processes = 4
threads = 4
buffer-size = 32768```
我的配置文件的名字就是uwsgi.ini,启动uwsgi的命令为:
(venv) ubuntu@VM-252-231-ubuntu:~/N$ uwsgi uwsgi.ini
启动成功会出现提示信息:
*** Operational MODE: preforking+threaded ***
WSGI app 0 (mountpoint='') ready in 2 seconds on interpreter 0x154fed0 pid: 3423 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 3423)
spawned uWSGI worker 1 (pid: 3428, cores: 4)
spawned uWSGI worker 2 (pid: 3429, cores: 4)
spawned uWSGI worker 3 (pid: 3430, cores: 4)
spawned uWSGI worker 4 (pid: 3431, cores: 4)
*** Stats server enabled on 0.0.0.0:9191 fd: 15 ***```
###### 注: 如果关闭了终端窗口后需要手动停止后台运行的 uwsgi 的话,可以使用下面的方法
先找到 uwsgi 主进程的 id :
`buntu@VM-252-231-ubuntu:~$ N ps -ef | grep uwsgi`
根据返回的信息可以看到这里主进程的 id 为 119911
tete 119911 117227 8 12:01 pts/20 00:00:01 uwsgi uwsgi.ini
tete 119916 119911 0 12:01 pts/20 00:00:00 uwsgi uwsgi.ini
tete 119917 119911 0 12:01 pts/20 00:00:00 uwsgi uwsgi.ini
tete 119918 119911 0 12:01 pts/20 00:00:00 uwsgi uwsgi.ini
tete 119922 119911 0 12:01 pts/20 00:00:00 uwsgi uwsgi.ini
tete 119987 119933 0 12:01 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn uwsgi```
给这个进程发送 SIGQUIT 就可以关闭 uwsgi 了:
buntu@VM-252-231-ubuntu:~$ kill -s SIGQUIT 119911
4) 配置 nginx
现在uwsgi这个 Web Server 已经启动起来了,接下来设置 nginx 。最简单的办法就是直接编辑 /etc/nginx/sites-enabled/default 这个文件,删除里面所有内容,替换成下面的内容:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /path/to/your/project;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
uwsgi_pass 127.0.0.1:5000;
include uwsgi_params;
}
}```
服务静态文件这个暂时不讨论了,重新载入配置,就成功了
`ubuntu@VM-252-231-ubuntu:~$ sudo /etc/init.d/nginx reload`