今天在自己将自己的机子当作服务器,在本地部署了一遍uwsgi和nginx,由于项目组的服务器出了点问题,
只能在自己的机子上测试,记录一下,以及一些自己遇到的一些问题,希望能对
以后遇到类似问题的朋友有些帮助,少走些弯路。
**
1 各种开发包安装
**
这些在此就不再叙述,自行百度
2 需要先了解uwsgi和nginx
相信很多刚刚接触django的朋友,最初使用的时候,都会跟着教程,安装uwsgi和nginx
却对其作用,全然不知。
是的部署服务器的时候会用到,但部署之前,还需对uwsgi和nginx做做功课
https://blog.csdn.net/u014563759/article/details/81016583
http://www.sohu.com/a/116944332_505818
以上两篇可以做参考,当然,网上还有许多例子
3 部署
1 测试uwsgi
测试uWSGI: 新建文件test.py,写入以下内容
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return "Hello World"
运行
sudo uwsgi --http 0.0.0.0:8000 --wsgi-file test.py
列出占用端口的程序的pid号,并使用以下命令杀掉所有占用端口的程序
sudo kill -9 pid
然后浏览 http://127.0.0.1:8000(或http://内网ip:8000、或http://外网ip:8000)查看效果,有”Hello World”输出即安装成功。
2 测试nginx
输入
sudo nginx -t
应该会出现如下两行
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
这是配置之后的默认路径
也可以你自己安装时的 ./configure --prefix=/your path/nginx
your path + -t
总之会i出现以上两行
安装各种包的时候,路径一定要设置自己知道的,很多时候运行出错,都是路径问题
然后 确保 your path 的 nginx.conf的同目录下有uwsgi_params文件,之后会用到
在自己的工程根目录下,建立如destiny.conf的配置文件;
复制nginx.conf里面全部的内容,全部写入destiny.conf中。
然后按照下面写的,把destiny.conf配置文件中的server段部分location部分以及上面的一些为注释了的部分,全部
根据自己的环境替换
user myself
server {
listen 80; #代表服务器开放端口
server_name localhost;
charset utf-8;
access_log /home/mr_lin/nginx/access.log; #这个和下面一个手动建 顾名思义 日志
error_log /home/mr_lin/nginx/error.log;
client_max_body_size 75M; #
location /static { #引用静态文件 要放在自己知道的地方
alias /你的路径/static; #项目的静态文件地址这个路径必须对,其余的静态文件,类似加法
}
location / { #访问项目根目录时,nginx要做的事 绝对路径
include /etc/nginx/uwsgi_params; #上文提到的
uwsgi_pass 127.0.0.1:8080; #项目运行ip
uwsgi_connect_timeout 30; #timeout
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
。。。。。 #剩下的目前还没有用,都留着吧
}
注意 这里有个坑,文件开头有个user 确认自己跑项目时候系统的用户就是你user设置的用户 如果该用户没有权限
请用
sudo chown -R root:root /yourpath/static
不然项目运行时打开浏览器检测会发现静态文件加载出现403 forbiden
下面接着建立uWSGI的配置文件,在自己工程目录下创建uwsgi.ini文件,写入以下内容
[uwsgi]
socket = 127.0.0.1:8080 #和上面写的density.conf配置文件中的uWSGI监听地址完全一样;
chdir=/home/mr_lin/programs/web/grandfather #自己工程的绝对路径;
module=website.wsgi #自己工程中的相对路径 django项目自带的wsgi.py 一般都在项目同名的app下
master = true
processes=2
threads=2
max-requests=2000
chmod-socket=664
vacuum=true
daemonize = /home/mr_lin/nginx/uwsgi.log #日志自己手动建
static-map = /static=/yourpath/static #静态文件同上
当然 要养成良好的习惯,毕竟服务器可没有图形界面给你看,要把所有路径尽量设在一个文件夹下,方便维护查找
启动uWSGI
sudo uwsgi --ini /yourpathy/destiny.ini 上文 在项目根目录下添加的
在这之前,我们要先去nginx配置文件的根目录拷贝mime.types(/etc/nginx/conf/mime.types)到工程目录(/wwwroot/destiny/mime.types),和destiny.conf放在一起。
否则用配置文件启动nginx会报错:
nginx: [emerg] open() "/**/**/**/mime.types" failed (2: No such file or directory)
当然,如果不想拷贝mime.types文件,也可以将配置文件中“include mime.types;”一项,改成绝对路径“include /etc/nginx/conf/mime.types;”
nginx -c /yourpath/destiny.conf
这里的-c 表示加载配置文件启动
ps:
还有一些
需要修改settings文件
由于在服务器上 项目处于生产环境
需要 改debug=False 以及
任何用户均可以访问,那么可以这样设置:
ALLOWED_HOSTS = [’*’]
修改静态文件路径
STATIC_ROOT = os.path.join(BASE_DIR, ‘/yourpath/static’)
然后执行以下命令,将静态文件全部复制到该目录下static里。
python3 manage.py collectstatic
最后在url最后加上 + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT
具体看 https://blog.csdn.net/kan2016/article/details/82838509?utm_source=blogxgwz8
还有一个可能遇到的
服务器端口未开放问题
https://blog.csdn.net/zll168123/article/details/86482230
tip:当日后维护的时候,要会查看自己创建的日志 这个非常重要
一些参考的文章 https://blog.csdn.net/u011249248/article/details/51253212
https://www.jianshu.com/p/d6905be330f4
本文主要内容来自 https://blog.csdn.net/c465869935/article/details/53242126