CentOs Linux 对于Django uwsgi + Nginx 的安装与部署
链接:🔗
https://www.runoob.com/django/django-nginx-uwsgi.html
yum update
yum install gcc
pip install uwsgi
查看uwsgi动态链接库是否有问题: which uwsgi ldd /root/anaconda3/bin/uwsgi 发现:libicui18n.so.58 => not found libicuuc.so.58 => not found libicudata.so.58 => not found 通过 LDD 发现 uwsgi 找不到三个包(具体就是 not found 的三个) 于是就把anaconda3/lib 下相应的包软链到/lib64下去(64bit 机器,如果时32bit 机器则软链到/lib下) [root@localhost ~]# ln -s /root/anaconda3/lib/libicui18n.so.58 /lib64/libicui18n.so.58 [root@localhost ~]# ln -s /root/anaconda3/lib/libicuuc.so.58 /lib64/libicuuc.so.58 [root@localhost ~]# ln -s /root/anaconda3/lib/libicudata.so.58 /lib64/libicudata.so.58 运行uwsgi:发现还有问题 于是: 把libstdc++.so.6.0.24拷贝到/lib64目录下。 cp /root/anaconda3/lib/libstdc++.so.6.0.25 /lib64/ 删除原来的libstdc++.so.6符号连接。 rm -fr /lib64/libstdc++.so.6 新建新符号连接。 ln -s /lib64/libstdc++.so.6.0.25 /lib64/libstdc++.so.6 再次执行uwsgi查看结果符合就哦了。
测试:创建index.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
uwsgi --http :9090 --wsgi-file index.py
浏览器访问9090端口
添加并发
uwsgi --http :9090 --wsgi-file index.py --processes 4 --threads 2
部署 Django
#在项目中创建djangospider.ini
[uwsgi]
# 使用Nginx做反向代理时使用socket
#socket=0.0.0.0:8000
# 不通过Nginx反向代理,直接做web服务器时使用http
http = 0.0.0.0:8000
#项目目录
chdir = /usr/www/DjangoSpider/
wsgi-file = DjangoSpider/wsgi.py
processes = 4
threads = 2
#django项目setting中
ALLOWED_HOSTS = [] 改为
ALLOWED_HOSTS = ['*']
启动:uwsgi --ini djangospider.ini
在www中创建uwsgi文件夹,用来存放uwsgi相关文件
#### 启动:
uwsgi --ini xxx.ini
#### 重启:
uwsgi --reload xxx.pid
#### 停止:
uwsgi --stop xxx.pid
配置Nginx
nginx服务器安装:
下载对应当前系统版本的nginx包(package) # wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm 建立nginx的yum仓库 # rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm 下载并安装nginx # yum install -y nginx 启动nginx服务 systemctl start/restart nginx 验证:直接请求IP,可见nginx 配置 默认的配置文件在 /etc/nginx 路径下,使用该配置已经可以正确地运行nginx;如需要自定义,修改其下的 nginx.conf 等文件即可。 查看是否启动:(如果有master和worker两个进程证明启动成功) ps -ef | grep nginx 停止(建议用quit,不建议用stop) nginx -s quit 重新加载配置文件 nginx -s reload 默认配置文件位置 /etc/nginx/conf.d/default.conf 备份默认配置文件 cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak welcome所在位置(默认值:/usr/share/nginx/html/)
修改nginx配置文件:
# 负载均衡 upstream upstream1 { server linux——ip:8000; # 处理相同业务的多个服务器 (负载均衡) } server { listen 80; server_name localhost; # 对外部用户提供的统一域名 # 将动态请求转发给uwsgi服务器 location / { # 包含uwsgi请求的参数 include uwsgi_params; # 转交请求给uwsgi服务器 (uwsgi服务器的ip和端口号) #uwsgi_pass 127.0.0.1:8000; # 单个uwsgi服务器(不需要负载均衡) uwsgi_pass upstream1; } # 如果是静态资源请求就直接响应资源。 location /static { # 指定静态文件存放的目录 (需要修改/usr/...目录的操作权限。 $ chmod 777 /usr) alias /usr/www/项目名/static/; } }
验证:
nginx -s reload
请求80端口,可能出现permission 问题(办法:先关掉selinux,setenforce 0 )
收集Django中的静态资源:
项目名/settings.py(项目配置,STATIC_ROOT设置收集静态资源的路径): STATIC_URL = '/static/' STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')] # 指定收集静态文件的路径 (需要修改/var/...目录的操作权限) STATIC_ROOT='./static' # 收集资源 $ python manage.py collectstatic