django+uwsgi+nginx部署

django+uwsgi+nginx部署django+ubuntu+uwsgi+nginx部署

django+uwsgi+nginx部署

安装nginx

sudo apt-get install nginx即可。

image-20220328134839807

安装python解析器

python解析器可以直接在python官网下载,或者使用anaconda。

清华园anaconda下载

使用命令wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh将安装包下载到服务器后,使用命令bash Anaconda3-5.3.1-Linux-x86_64.sh无脑安装即可,中间会有问你是否帮你配置环境变量选择yes。直接跳过了也可以自己配置环境变量。最后在终端输入python -V显示版本号即成功。

image-20220328134904374

然后使用pip install django安装包,项目中其他包自行安装

安装uwsgi

使用的是阿里云学生机,在安装完python解析器后,使用命令安装pip install uwsgi失败,发生错误,错误如下

Command "/root/anaconda3/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-wnkwliqy/uwsgi/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-ivs7ibgw/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-install-wnkwliqy/uwsgi/

在网上查找攻略,发现大多数的解决方法都是安装dev,apt-get install python3.6-dev,但是在unbuntu20.04下安装发现无法找到该包,加上私人安装源还有问题。该解决方案失败

看到另一篇博客说原因是gcc版本过高,所以尝试降低gcc版本,使用apt-get install gcc-4.8,发现直接无法找到安装包。我们增加下载源后更新下载源,就可以继续使用apt下载gcc-4.8了

sudo vim /etc/apt/sources.list
deb http://dk.archive.ubuntu.com/ubuntu/ xenial main
deb http://dk.archive.ubuntu.com/ubuntu/ xenial universe
sudo apt update

使用命令安装gcc-4.8g++-4.8

sudo apt-get install gcc-4.8
sudo apt-get install g++-4.8

安装后使用ls /usr/bin/gcc*就可以看见你刚刚装的gcc和系统自带的gcc,因为系统中默认使用的是gcc-9.3,我们需要将gcc命令优先设置为gcc-4.8

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 100

然后使用gcc --version查看当前gcc版本,是4.9就成功了。

image-20220326142920973

最后尝试pip install uwsgi,成功安装,所以问题关键在于gcc和g++的版本

安装mysql

自行安装

部署django项目

在将整个项目传输到服务器后,我们在项目根目录下创建一个uwsgi.ini的配置文件,内容如下

[uwsgi]
#使用nginx连接时使用
socket=:8000
#直接做web服务器使用 python manage.py runserver ip:port
#http=0.0.0.0:8000
#项目目录
chdir=/root/project/you_project_name
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=you_project_name/wsgi.py
module=you_project_name.wsgi
#指定启动的工作进程数
processes=2
#指定工作进程中的线程数
threads=2
#指定在这些进程里有一个主进程
master=True
#保存启动之后主进程的pid
pidfile=uwsgi.pid
#设置uwsgi后台运行,uwsgi.log保存日志信息
daemonize=uwsgi.log
#设置日志文件最大字节数
log-maxsize = 100000
#设置每个进程最大请求数
max-requests = 1000

然后使用启动uwsgi服务,输入命名uwsgi --ini uwsgi.ini,发现报错

uwsgi: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

解决方法是创建一个软链接

使用命令find / -name "libpcre.so.*"来寻找路径,然后创建软链接到lib库中ln -s /root/anaconda3/lib/libpcre.so.1 /lib。若还出现同样的错误,进行一样的操作,缺哪个创建哪个

使用uwsgi --ini uwsgi.ini输出信息[uWSGI] getting INI configuration from uwsgi.ini即成功

配置nginx

修改nginx配置文件,向server里加入下面的复制内容,注意不要重复复制,使用命令vim /etc/nginx/sites-enabled/default加入下面内容,注意修改成你的静态目录

server {
    listen 80;
    
    # ----复制内容
    location /static {
        alias /root/project/logistic_simulation/static; #静态文件目录
    }
    location / {
        uwsgi_pass 127.0.0.1:8000; #将请求转发重定向到127.0.0.1的8000端口
        include /etc/nginx/uwsgi_params; #将所有的参数转到uwsgi下
    }
    # ----复制内容
    
}

重启nginx服务service nginx restart

部署的时候需要修改自己项目文件夹下settings.py文件内容,一个是关闭debug信息显示,还有往host里加入*,让别人的ip可以访问,在最下面设置你的静态文件目录。

DEBUG = False

ALLOWED_HOSTS = ['*']

STATIC_ROOT = os.path.join(BASE_DIR, "static") 

这个时候我们访问服务器的公网ip,就会发现进入到自己项目的首页

如果出现样式文件加载是403的状态,那么我们需要修改nginx配置文件,输入命令vim /etc/nginx/nginx.conf

将第一行的内容改成

user root;
学会查看日志文件

在部署过程中如果出现失败,一定要学会找出错误,只有找出错误,才能针对这个问题采用解决方案,nginx有他生成的错误日志cat /var/log/nginx/error.log,uwsgi日志文件路径在自己设置uwsgi.ini配置文件里。学会看日志真的很重要。

总结

部署django项目已经好多次了,一次次都在进步,依稀记得第一次部署的时候,搞不清楚nginx的配置文件之间的关系,安装不上uwsgi,服务器下包失败,网速慢,配置结束出现各种各样的错误,一度让人崩溃,一定要沉下心来,找出错误,网上博客千千万,各有各自的配置,需要自己有一定的甄别能力。

今天的文章django+uwsgi+nginx部署分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/11710.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注