django+uwsgi+nginx部署
安装nginx
sudo apt-get install nginx
即可。
安装python解析器
python解析器可以直接在python官网下载,或者使用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
显示版本号即成功。
然后使用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.8
和g++-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就成功了。
最后尝试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