想看安装步骤的跳到第二步
第一步有什么用我也不知道
目录
一、整一个流程大概这样
二、步骤
2.1 pip install uwsgi
2.2 创建目录
在项目根目录下创建 deploy 目录来装 uwsgi 的配置文件和log
2.3 创建 uwsgi_conf.ini 文件
关于socket,其实并没有那么复杂,这里是用与nginx通信用,该端口与实际项目内的配置无关,可以自行设置,并且不可以占用nginx的 listen 端口,就这样。
# uwsgi_conf.ini
[uwsgi]
# 选择内网IP和端口,别搞个啥域名的出来,在本地通讯就好了
socket=localhost:8001
# 项目根目录
chdir=/home/user1/projects/classonline
#项目中wsgi.py文件的相对目录
wsgi-file=classonline/wsgi.py
# 进程数
processes=2
# 线程数
threads=2
# uwsgi服务器的角色
master=True
# 存放进程编号的文件 启动时自动按照该配置创建
pidfile=uwsgi.pid
# 日志文件
daemonize=logs/uwsgi.log
# 指定虚拟环境所在目录,不能填相对目录
virtualenv=/root/pythonenvs/django22
2.4 安装 nginx
在安装 nginx 的时候出现了错误,大概是跟 redis 有关,如果出现了错误,请安装好并启动 redis,如果有且服务已启动直接跳过,灵活一点
- 安装redis :apt install redis-server
- 启动redis :service redis-server start
- 安装ngnix :apt install nginx
- 配置nginx,/etc/nginx/conf.d/default.conf
upstream classonline {
# 此处为uwsgi运行的ip地址和端口号
server localhost:8001;
}
server {
# 监听端口
listen 80;
# 服务器域名或者ip地址,填好了 这里非常重要,只能写一个,不然云服务器不通,我也不知道原因,反正就写着吧
server_name yejue.com;
# 编码
charset utf-8;
# 文件最大上传大小
client_max_body_size 75M;
# 媒体文件 你项目配置的media 绝对路径
location /media {
alias /home/user1/projects/classonline/media;
}
# 静态文件 你项目配置的static 绝对路径
location /static {
alias /home/user1/projects/classonline/static;
}
# 主目录
location / {
uwsgi_pass classonline; # 这里跟上面一样就ok
include /etc/nginx/uwsgi_params; # 这里不要乱动
}
}
- 测试是否可用(注意命令执行的路径与name,不是上面那个default)
$ nginx -t -c /etc/nginx/nginx.conf
- 运行 nginx,
$ service nginx start
- 可以重新加载配置
$ nginx -s reload -c /etc/nginx/nginx.conf
2.5 运行 uwsgi
# $ 是指在命令行执行
# &代表后台运行,不要也没关系
$ uwsgi uwsgi_conf.ini &
# 停止。 其中uwsgi.pid 是自己生成的,存放了uwsgi的pid信息,对应上面的uwsgi配置
$ uwsgi --stop uwsgi.pid
# 也可以 ps -ef | grep uwsgi,然后暴力kill
kill -9 pid
三、有个坑爹问题
uwsgi + nginx 配置之后curl可以访问,浏览器不可访问,这让我一脸懵逼,配置了一天一夜没找到原因,翻了很多文档也没有说。
众所周知 curl 其实就是个可以访问域名返回网页的东东,类似于 requests.get
后来发现 Chrome 不知道为什么缓存了,看了一天一夜的文档找不出毛病,换了个浏览器,居然显示正常。
如果真要用Chrome访问,可以尝试一下清理各种缓存。我舍不得清理,于是用selenium召唤了一个全新的chrome,完结撒花了。