首先,因为我们本地是由django项目的,所以安装配置django项目就不多讲解
主要讲解本人这几天配置nginx 和uwsgi 关联时碰到的一些
1,安装uwsgi
安装uwsgi,之前百度试了很多种安装uwsgi的方式,最后总结出本人人文最好的一种
通过pip3安装
pip3 install uwsgi
pip3 list 查看是否安装成功
然后在/usr/bin/下面就是系统配置,你得把你安装好的uwsgi 的环境变量配置进去
所以我们要建立软链接
ln -s /home/ares/.local/bin/uwsgi /usr/bin/uwsgi
前面是指你uwsgi安装的位置,后面是系统环境变量的位置,
如果不知道pip3安装的uwsgi的位置的话,可以在执行一遍pip3 install uwsgi
那样就可以看到我们pip3包安装的位置了
在我的/usr/bin/下面可以看到我已经添加成功
创建测试文件
安装好后创建一个测试文件test.py,内容如下:
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
测试
进入到test.py文件的目录下运行启动命令
uwsgi --http :9999 --wsgi-file test.py
网站能看到Hello World 就代表测试成功,当然你也可以跳过这 直接进行下面的步骤
然后在我们项目目录下面新建一个uwsgi.ini配置文件,本人是在fortress下面新建的
然后里面的配置
[uwsgi]
# 这里填的是本人服务器的ip以及给uwsgi 的一个端口 端口可以随便设置,不局限于9999 只要不重复都可以
http = 192.168.1.189:9999
# 这个是指向你项目 manage.py 的路径
chdir = /var/lib/jenkins/workspace/build_jobs/fortress
# module 是指向你wsgi.py的路径,就是与你项目setting.py同目录下,通常django都会自带一个wsgi.py文件
module = app.admin.wsgi:application
master = true
processes = 4i
vacuum = true
daemonize = uwsgi.log
pidfile = uwsgi.pid
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=36000
# 设置缓冲
post-buffering=4096
# 设置和nginx 连接时间
socket-timeout=36000
# 设置uwsgi连接时间
http-timeout = 36000
这时候在当前目录下面运行
uwsgi --ini uwsgi.ini
看见
这样的提示代表你的uwsgi 已经跑起来了
可以通过这条命令查看运行状态 ps -ef |grep uwsgi
看到这种就代表你的uwsgi以4921的进程号跑起来了 这时候
访问你之前uwsgi.ini 里面配置的http后面的ip地址和端口就可以看见咋们的django 网站了
出现这样代表你的uwsgi 已经配置成功 接下来就是nginx了
2,安装nginx
可以通过yum install nginx 安装nginx
如果中途出现
yum安装报错Error:Nothing to do
报错信息
No package nginx available
Error:Nothing to do
用EPEL方式安装nginx:
sudo yum install epel-release
yum update
yum install nginx
这样就可以安装成功你的 nginx了
whereis nginx 可以看到你的nginx 在哪里
可以看到我们的nginx 启动在/usr/sbin 下面,这时候我们启动nginx ,然后通过ip 访问我们的nginx
这时候会开肩 wecome to xxx一些官方的页面,这时候就代表你的nginx 开启成功了
nginx配置文件在/etc/nginx 下面
查看 /etc/nginx下面的目录可以看到nginx.conf这样的nginx 配置文件
正常你这里面还会又conf.d 这个文件夹,你可以在里面创建一个xxx.conf的文件格式,在这个里面搭建nginx
的配置也可以,因为系统nginx.conf里面引入了conf.d里面的.conf格式的所以文件,本人是直接在nginx.conf里面
搭建的 配置如下
如果你是在conf.d下面的文件搭建的话,你只需要
这一段代码就行
讲解一些 代码的要求
server {
listen 80;
listen [::]:80;
# server_name 你网站的域名,当然也可以写ip
server_name ci.yixzm.cn;
# 你的静态文件的路径,本网站由于做了前后端分离,所以暂时没有前端静态文件,所以后面的public 可有可无,但是由于
#网站正在完善,所以我还是加上了
root /var/lib/jenkins/workspace/build_jobs/fortress/public;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
# 这一步就很重要了,把你的nginx 和uwsgi关联起来,
include uwsgi_params;
# 这是你之前uwsgi.ini 中http 里面配置的ip,下面一定要和你uwsgi.ini 里面的一样 还有一种是uwsgi_pass 127.0.0.1:3031;
# 这种,不过我发现这种,关联不到uwsgi,后面发现是http协议的事,经过大神肖哥的亲自操刀,改为,下面这种,网站就搭好了
proxy_pass http://192.168.1.189:9999;
}
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
这时候我们启动nginx ,下面是uwsgi 和nginx 的一些常用命令
nginx 重启 nginx -s reload
nginx 停止 nginx -s stop
#### 启动:
uwsgi --ini xxx.ini
#### 重启:
uwsgi --reload xxx.pid
#### 停止:
uwsgi --stop xxx.pid
启动之后我们可以看到
通过上面的导航栏,可以看到,这时候我们的网站,后面没有端口号了,这时候nginx 成功代理80端口,而不是uwsgi的9999端口了
下面由本人的一些报错,列出来参考
Nginx报错:nginx: [error] invalid PID number "" in "/run/nginx.pid" 解决方法
服务器重启之后,执行 nginx -t 是OK的,然而在执行 nginx -s reload 的时候报错
nginx: [error] invalid PID number "" in "/run/nginx.pid"
解决方法:
需要先执行
nginx -c /etc/nginx/nginx.conf
nginx.conf文件的路径可以从nginx -t的返回中找到。
nginx -s reload
--------------------------------------
要是你成功通过nginx 访问到网页的话,通常会出现中文乱码的问题,
这时候你只需要在html中加入 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
并在nginx.conf 中的server中加入
#设置字符集
charset utf-8;
就可以解决乱码的问题了
到这里,nginx+uwsgi+django 就完成了
最后特别感谢我们的大佬---肖哥的 操刀,
本人几天的问题,大佬几十分钟搞定,顶!!!!!
希望看到此文章的各位以后也是能成为这种大佬!!!!