年前阿里云打折,1核1G的云服务器一年只要300多块,果断就租了1年的。既然服务器已经到手,怎么能不把自己写的项目部署上去呢,其实网上关于nginx+uwsgi部署Django项目的文章有很多,但是这些文章要不就是很久之前的,要不就是互相抄袭,一路过来都是坑,这里重点吧在部署时候遇到的坑着重介绍一下:1.首先部署django项目
首先是django项目,由于我是使用Anaconda来进行版本控制的,而django项目是在Python2.7环境下开发的,首先是新建一个Python2.7的环境:
#创建python27环境 conda create --name python27 python=2.7 #激活该环境 source activate python27 #通过conda安装django conda install django
环境准备好后,从GitHub上将项目拉取下来
git clone https://github.com/sunny0826/xxx
修改setting.py文件
#debug模式默认开启,这里要关闭 DEBUG = False #这里将外网IP配置进来 ALLOWED_HOSTS = ["127.0.0.1","xx.xx.xx.xx"]
启动项目:
#来项目目录下执行 python manage.py runserver 8000
然后在外网ip:8000路径下查看项目启动情况
2.阿里云配置安全组由于是服务器在阿里云上,所以直接访问时访问不到的,所以要在阿里云平台配置安全组(类似于防火墙)
首先打开阿里云平台,登录,点击安全组配置:
点击配置规则
点击添加安全组规则
按要求填写安全组规则
优先级1位最高优先级,端口可以设置范围,并且可以设置授权访问的对象
设置完之后,就可以在公网IP访问到我们的django项目了
确定django项目可以正常运行了,ctrl+c停止项目,下面我们来安装uwsgi:
在安装uwsgi非常简单,只需要pip安装即可,但是由于之前使用的是Python27环境,这里记得要激活Python27环境,否则就安装到默认的Python路径了
#uWSGI 是一个(巨大的) C 应用,所以你需要一个 C 编译器(比如 gcc 或者 clang)和 Python 开发版头文件 apt-get install build-essential python-dev #安装uwsgi pip install uwsgi
按照官网介绍,写已经Python脚本进行测试,test.py(在任意路径都可以,不过测完要记得删掉)
def application(env, start_response): start_response("200 OK", [("Content-Type","text/html")]) return ["Hello World"]
然后输入命令进行测试
uwsgi --http :8000 --wsgi-file test.py
这里是8000端口,因为之前测试django的时候打开的8000端口,这里偷懒就不去配置新的安全组了
那么问题就来了,在启动的时候报错了....=。=
出现的这个错误,经过测试只会在Python2.7的环境发生,在Python3+就没有发生了,辗转百度和Google,都没有找到这个问题的解决办法且这个问题一般发生在nginx上...
但这个报错问题还是很明显,就是libpcre.so.1这个文件找不到,初步推测为版本问题
首先要咱们搜索一下这个文件,看看本机有没有
发现本机是有这个文件的,那就好办了,将他链接到相应位置就好
执行这条语句之后就可以uwsgi就可以正常启动了
在跳过这个坑之后,就可以正式来配置我们的项目了
首先修改自己项目中的wsgi.py文件,添加两行代码
然后在django项目根目录创建uwsgi.ini文件
uwsgi.ini文件配置
# uwsgi.ini file [uwsgi] # Django-related settings socket = 127.0.0.1:8000 #与nginx通信的地址和端口 # the base directory (full path) chdir = /apps/xxxx #django项目绝对路径 # Django s wsgi file module = xxxx.wsgi #wsgi文件所在的相对于项目的路径 # the virtualenv (full path) home = /root/anaconda3/envs/python27/lib/python2.7/site-packages #python环境的路径 # process-related settings # master master = true # maximum number of worker processes processes = 4 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true plugins=python #log文件 daemonize=/apps/uwsgi/uwsgi.log #pid文件 pidfile=/apps/uwsgi/uwsgi.pid
这里配置日志文件和pid文件,方便之后的重启
关于uwsgi的重启问题:
每次项目有代码更新的话,都需要重启uwsgi,如果没有配置pid文件的话,重启需要使用:
#查看uwsgi进程号 ps aux | grep uwsgi #关闭进程号为0的进程 kill -9 主进程号
来停止uwsgi,然后才能重启,注意这里的主进程是pid为1的进程,而配置了pid文件的,只需要进行如下方法来重启即可
#重载(一般修改参数,或者修改py文件经常用到) uwsgi --reload uwsgi.pid #重启(一般系统环境变化会用到) uwsgi --stop uwsgi.pid
最后在项目根目录下运行uwsgi命令,载入配置文件
uwsgi --ini uwsgi.ini
然后在后面的日志中要注意环境是否为之前配置,如果不是请激活激活之前创建的Python环境再进行操作
4.安装配置nginx最后来安装nginx
sudo apt-get install nginx
修改nginx配置
cd /etc/nginx/sites-enabled #Ubuntu中nginx配置文件所在路径 vim default
配置文件
server { listen 80 default_server; #监听端口,将来访问的端口 listen [::]:80 default_server; root /var/www/html; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name _; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8000; #uwsgi中配置的路径 } location /static { alias /apps/xxx/static; #静态资源路径 } location /resume.ico { alias /apps/xxx/static/resume.ico; #网页图标路径 } }
uwsgi启动后,再启动nginx
基础命令
/etc/init.d/nginx start #启动 /etc/init.d/nginx stop #关闭 /etc/init.d/nginx restart #重启
启动之后,访问外网IP:80,查看是否可以通过nginx访问django
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/44552.html
摘要:百度不行就用吧,中文不行就找英文的,最后,给我误打误撞的部署成功了。准备工作我使用的系统是版,官网下载地址安装的时候全部选择英文,记得以前选择中文的时候安装时出了问题,服务器组件一个不选,安装做的很贴心,基本上是一路回车,就不详细说明了。 Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器 前不久为了部署Django项目,在百度上到处找教程,找...
阅读 2366·2021-11-22 14:56
阅读 1174·2019-08-30 15:55
阅读 3204·2019-08-29 13:29
阅读 1352·2019-08-26 13:56
阅读 3482·2019-08-26 13:37
阅读 557·2019-08-26 13:33
阅读 3348·2019-08-26 13:33
阅读 2227·2019-08-26 13:33