年前阿里云打折,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项目了
3.安装配置uwsgi
确定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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。