在阿里云上Ubuntu环境经过nginx+uwsgi部署Django项目

年前阿里云打折,1核1G的云服务器一年只要300多块,果断就租了1年的。既然服务器已经到手,怎么能不把本身写的项目部署上去呢,其实网上关于nginx+uwsgi部署Django项目的文章有不少,可是这些文章要不就是好久以前的,要不就是互相抄袭,一路过来都是坑,这里重点吧在部署时候遇到的坑着重介绍一下:

1.首先部署django项目

首先是django项目,因为我是使用Anaconda来进行版本控制的,而django项目是在Python2.7环境下开发的,首先是新建一个Python2.7的环境:php

#建立python27环境
conda create --name python27 python=2.7
#激活该环境
source activate python27
#经过conda安装django
conda install django

环境准备好后,从GitHub上将项目拉取下来html

git clone https://github.com/sunny0826/xxx

修改setting.py文件python

#debug模式默认开启,这里要关闭
DEBUG = False
#这里将外网IP配置进来
ALLOWED_HOSTS = ['127.0.0.1','xx.xx.xx.xx']

启动项目:nginx

#来项目目录下执行
python manage.py runserver 8000

而后在外网ip:8000路径下查看项目启动状况git

2.阿里云配置安全组

因为是服务器在阿里云上,因此直接访问时访问不到的,因此要在阿里云平台配置安全组(相似于防火墙)github

首先打开阿里云平台,登陆,点击安全组配置:

clipboard.png

点击配置规则

clipboard.png

点击添加安全组规则

clipboard.png

按要求填写安全组规则

clipboard.png
优先级1位最高优先级,端口能够设置范围,而且能够设置受权访问的对象
设置完以后,就能够在公网IP访问到咱们的django项目了django

3.安装配置uwsgi

肯定django项目能够正常运行了,ctrl+c中止项目,下面咱们来安装uwsgi:
在安装uwsgi很是简单,只须要pip安装便可,可是因为以前使用的是Python27环境,这里记得要激活Python27环境,不然就安装到默认的Python路径了vim

#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端口,这里偷懒就不去配置新的安全组了
那么问题就来了,在启动的时候报错了....=。=

clipboard.png

出现的这个错误,通过测试只会在Python2.7的环境发生,在Python3+就没有发生了,展转百度和Google,都没有找到这个问题的解决办法且这个问题通常发生在nginx上...
但这个报错问题仍是很明显,就是libpcre.so.1这个文件找不到,初步推测为版本问题
首先要我们搜索一下这个文件,看看本机有没有

clipboard.png

发现本机是有这个文件的,那就好办了,将他连接到相应位置就好

clipboard.png

执行这条语句以后就能够uwsgi就能够正常启动了

在跳过这个坑以后,就能够正式来配置咱们的项目了
首先修改本身项目中的wsgi.py文件,添加两行代码

clipboard.png

而后在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 主进程号

clipboard.png

来中止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

相关文章
相关标签/搜索