这里写自定义目录标题
整个流程参考了这篇文章
工作原理参考
python3.7下安装uwsgi后报错参考
这篇文章的大前提:django已经配置好,可以用runserver运行,但是当把setings.py中的debug改为false后,访问页面就会出现500错误,后终于可以用–insecure解决,完整写法如下;
python manage.py runserver 0.0.0.0:9595 --insecure
环境和版本以及安装:
centos7-64bit
这里用的是百度云的BCC服务器,活动买的挺便宜,主要是可以免费快照(2019年4月22日)
python3.6(这里我刚开始用的3.7,但是uwsgi安装好之后一直报错,后来才发现是版本问题,后面细说)
【2022年3月30日更新】
版本问题导致的文件not found,可使用3.7版本,解决方案见目录【2022年3月29日更新:】
用的anaconda,原本安装的最新版本,后全部组件安装好之后uwsgi一直提示找不到文件,然后多亏了这篇文章,知道需要使用python3.6,于是用下面的命令:
conda install python=3.6 #指定安装python版本
然后一路yes就可以了,完事之后,可能django和uwsgi得重新安装一下
django2.2
我是直接pip 安装的
pip install django
uwsgi2.0.18
也是直接pip安装
pip install uwsgi
如果出错的话,说明dev没安装直接用下面的命令,把可能用上的都安装就ok
yum -y groupinstall "Development tools"
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
安装后运行uwsgi --verssion 报错1:
uwsgi: error while loading shared libraries: libicui18n.so.58: cannot open shared object file: No such file or directory
解决方案:
1、查看uwsgi位置
which uwsgi
# /soft/anaconda3/envs/mysite/bin/uwsgi
2、LDD查看缺少的包
ldd /soft/anaconda3/envs/mysite/bin/uwsgi
...
# libicui18n.so.58 => not found
# libicuuc.so.58 => not found
# libicudata.so.58 => not found
...
3、将缺失的三个包软连接到lib64下(64位机器)
ln -s /soft/anaconda3/lib/libicui18n.so.58 /lib64/libicui18n.so.58
ln -s /soft/anaconda3/lib/libicuuc.so.58 /lib64/libicuuc.so.58
ln -s /soft/anaconda3/lib/libicudata.so.58 /lib64/libicudata.so.58
再次ldd测试即无缺失的包了
ldd /soft/anaconda3/envs/mysite/bin/uwsgi
uwsgi --version运行时报错2
uwsgi: /lib64/./libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /lib64/libicui18n.so.58)
uwsgi: /lib64/./libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /lib64/libicui18n.so.58)
uwsgi: /lib64/./libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /lib64/libicuuc.so.58)
uwsgi: /lib64/./libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /lib64/libicuuc.so.58)
解决方案:
1、使用string命令查看,缺失报错的3.8和3.9
strings /usr/lib64/libstdc++.so.6|grep CXXABI
2、anaconda安装后自带有so.6的文件,查找可用的so.6
find /soft/anaconda/envs/mysite/lib -name libstdc++.so.6*
3、使用string命令查看找到的文件是否包含3.8和3.9
4、将包含的文件,及软链同步复制到/lib64下;
cd /soft/anaconda/envs/mysite/lib
ll libstdc++*
cp ./libstdc++.so /lib64/
cp ./libstdc++.so.6 /lib64/
cp ./libstdc++.so.6.0.26 /lib64/
nginx1.14.2
这里感谢这篇文章,我用了第一种方法,
直接通过 yum install nginx 肯定是不行的,因为yum没有nginx,所以首先把 nginx 的源加入 yum 中。
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum info nginx
yum install nginx
这里安装好之后,由于我服务器已经安装了apache,占用了80端口,这里我就把nginx的端口修改成8088
vim /etc/nginx/conf.d/default.conf
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8997;
uwsgi_param UWSGI_SCRIPT project.wsgi;
uwsgi_param UWSGI_CHDIR /data/django/project;
#root /usr/share/nginx/html;
#index index.html index.htm;
}
location /static/ {
alias /data/django/project/static/; #静态文件目录
}
顺便我在这里把uwsgi的相关设置也同时写上了
我的uwsgi用了8997端口
我的django项目名称就叫project (起名比较随意的)
wsgi是我django项目project下的wsgi
我的django项目放在/data/django/下
测试环境
django
以上内容的前提是django项目已经可以用runserver跑通,django不会出现错误,
#进入到项目目录后运行以下命令:
python manage.py runserver 0.0.0.0:9595
django && uwsgi
在项目根目录创建xml文件
注意里面的ip端口要写nginx配置文件中编辑的ip和端口即127.0.0.1:8997
vim /data/django/project/project.xml
<uwsgi>
<socket>127.0.0.1:8997</socket><!-- 内部端口,自定义 -->
<chdir>/data/django/project/</chdir><!-- 项目路径 -->
<module>project.wsgi</module>
<processes>4</processes> <!-- 进程数 -->
<daemonize>uwsgi.log</daemonize><!-- 日志文件 -->
</uwsgi>
uwsgi
用以下命令和查看版本号,能看到版本号说明安装成功
uwsgi --version
#2.0.18
如果出现错误,can not load xxx ,no suchfile xxx这种错误,请检查python版本是否为3.6,并检查3.6的python-dev是否正确,最好的办法就是按照上面的方法,把所有可能的以来都安装起来
【2022年3月29日更新:】
python3.7下anaconda创建的虚拟环境pip安装uwsgi后报错如下:
uwsgi: error while loading shared libraries: libicui18n.so.58: cannot open shared object file
解决方案:
1、查看uwsgi安装位置,并查看缺少的包
which uwsgi
ldd /soft/anaconda3/envs/mysite/bin/uwsgi
2、将三个找不到的包进行软连接到lib64下
ln -s /soft/anaconda3/lib/libicui18n.so.58 /lib64/libicui18n.so.58
ln -s /soft/anaconda3/lib/libicuuc.so.58 /lib64/libicuuc.so.58
ln -s /soft/anaconda3/lib/libicudata.so.58 /lib64//libicudata.so.58
3、查看/lib64下libstdc++.so.6的指向是否与anaconda3/lib下的libstdc++.so.6指向是否一致,若不一致将anaconda3/lib下的libstdc++.so.6指向的东西复制到/lib64下,重新为libstdc++.so.6建立快捷方式
复制libstdc++.so.6并覆盖
cp /soft/anaconda3/lib/libstdc++.so.6 /lib64/
4、验证
uwsgi --version
# 2.0.20
【2019年4月30日更新:】
今天修改python代码后打算重启以下uwsgi,按照之前的方法,kill掉了全部uwsgi进程,再启动又报错了,跟以前一样的错误,然而找不到原因之后就恢复快照到上次的正常状态,但是服务得重启开启,但是恢复之后uwsgi依然报错,正在解决…
查了一下日志,24号部署完成的系统,截止到28号凌晨都运行正常,28号操作了jupyternotebook,更新了一些包导致版本不兼容了,具体如下:
还是回滚快照到28号,重新安装jupyter吧。简单粗暴的方法
yum -y groupinstall "Development tools"
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
网上查到django使用这个的时候,修改django项目后无法自动刷新,见这篇文章
解决方法就是kill掉所有的uwsgi进程后重启,
我是直接用了启动命令,在django项目下
uwsgi -x project.xml
nginx
用以下命令测试是否成功安装,出现seccess说明成功
[root@instance-xxxx ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
生产环境部署后admin后台样式丢失
uwsgi生产环境部署后,admin后台样式丢失,把django下列目录中的static复制到static下即可
C:\appdata\anaconda3\envs\mysite\Lib\site-packages\django\contrib\admin\static
总结
1、保证django运行正常
2、保证uwsgi安装正常
3、保证nginx配置正常(配置完成后可在浏览器输入IP:端口访问可看到欢迎页面)
以上为单项都运行正常
4、在django项目根目录下创建项目名.xml,并配置uwsgi的IP端口等
5、配置nginx的配置管理,增加uwsgi的ip和端口等,以及静态页面的位置
6、在项目目录下运行uwsgi -x project.xml
,使uwsgi运行起来,可查看同目录下的uwsgi.log日志
7、查看nginx状态systemctl status nginx
,并启动nginxsystemctl start nginx
8、若已启动,则重新加载nginx -s reload