Ubuntu16.04+python3+django1.11+uWSGI+nginx部署django项目

Ubuntu16.04+python3+django1.11+uWSGI+nginx部署django项目

相信很多的小伙伴都和我遇到过同样的问题,我们学习django后写好项目后把代码放到服务器上肯定不能使用django自带的服务器给用户来使用我们的网站呀,因为django自带的服务器性能有限所以我们在真正部署的时候是不用它的,那怎么办呢?不用担心我教大家使用nginx服务器来解决这个问题。

nginx

nginx是什么东西,就是和Apache,Tomcat类似的一款服务器软件,如果你真的不知道这是什么鬼东西那就真的没得必要往下面看了,建议先去弄弄清楚这个软件是什么东西,再回过来看就行了。上百度,谷歌搜一搜就好了,其实很简单的。

uWSGI

其实着也是一个服务器软件啦,下面我提供了一个大佬写的文章快去学习学习了。
https://blog.csdn.net/mnszmlcd/article/details/78819237

搭建的原理示意图

我们的目的肯定是是打通浏览器访问我们django代码的通道,首先着条通道上我们要修建两座桥梁,首先是nginx,这是提供给我们浏览器访问的入口,通过nginx转发80端口进来的数据包到本地环回地址(127.0.0.1)的8010端口上(其他端口也是阔以的,这里只是拿8010举例子),然后我们通过uWSGI开启本地的8010供本地访问,这里不理解我可以举个例子,在这里相当于我们运行了

$ python manage.py runserver 127.0.0.1:8010

nginx则起到了一个转发端口的功能,说完了原理,接下来就正式开始我们的安装过程了

配置

安装nginx

首先进入/etc/apt目录下

$ cd /etc/apt

下载公钥

$ sudo wget http://nginx.org/keys/nginx_signing.key

(如果提示找不到命令wget,那就使用命令下载这个http工具:$ sudo apt-get install wget)

加载公钥

$ sudo apt-key add nginx_signing.key

然后把下载源添加在apt下载源的后面 如果你不会使用vim编辑器,也可以使用nano这个比较简单一些

$ sudo vim /etc/apt/sources.list

deb http://nginx.org/packages/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/ubuntu/ xenial nginx

因为我使用的ubuntu系统是16.04版本的对应的发行版名称是xenial

  • Version codename Supported Platforms
  • 14.04 trusty x86_64, i386, aarch64/arm64
  • 16.04 xenial x86_64, i386, ppc64el, aarch64/arm64
  • 17.10 artful x86_64, i386
  • 18.04 bionic x86_64
    对应自己系统的版本选择对应的系统名
    配置好源以后就开始下载安装了安装

$ sudo apt-get update

$ sudo apt-get install nginx

安装完成后我们就启动它

$ sudo nginx

执行命令后没有任何回显 使用ps命令可以查看进程是否启动

$ ps aux | grep nginx

nginx启动后然后在浏览器中输入你服务器的ip地址,回车,只要不出下如下这样无法链接到服务器,说明你nginx是安装成功的

很多时候你可能是配置正确的,但是就是不知道为什么访问不了。很多情况都可能是你选择的云服务商有个安全规则给你关闭了端口,所以你必须手动打开你需要的端口。比如我在第一次用Azure的时候也是遇到了这个问题,而且Azure有个小坑的地方是它有入站规则和出站规则。

这个配置也是有点小坑的地方,我给大家看下我是怎么配置的:

特别是这个源端口范围,最好是使用*不要限制源端口,因为客户端的端口是操作系统随机给的。
下面是出站规则的配置:

我这里是为了开启80端口,如果你是为了开启其他的端口则只需要把我图中的80换成你想要的端口就行了。

安装 uWSGI

uWSGI是python的一个第三方包,首先我们选择用python的虚拟环境来运行我们的项目
但是ubuntu16.04默认的是python3.5,首先我们需要更换为python3.6
加装含有python3.6.4的PPA

$ sudo add-apt-repository ppa:deadsnakes/ppa

如果和我一样报错就可以运行如下命令,没有报错就可以不管了

$ sudo apt install software-properties-common

重新运行如下命令,如果你是root用户则不用加上sudo,否则会出错

$ add-apt-repository ppa:deadsnakes/ppa

$ sudo apt-get update

$ sudo apt-get install python3.6

这里也可以直接把python3.5卸载掉,卸载的命令为:

$ sudo apt-get remove python3.5

然后再安装Python3.6

到了这里,因为源的问题,可能有点慢,,,,

查看新安装的python版本

$ python3.6 -V

我们使用python3命令会默认的访问python3.5的版本,接下来我们替换掉原先的软连接
列出系统当前存在的python版本及python默认的版本

$ ls -l /usr/bin | grep python

我们就是要替换掉途中的这个软连接

$ sudo rm /usr/bin/python3

$ sudo ln -s /usr/bin/python3.6 /usr/bin/python3

重新查看文件,发现多了图中的软连接,就说明成功了

然后我们再运行python3 就默认进入3.6

$ python3

接着安装python虚拟环境
首先安装python3的pip下载工具

$ sudo apt-get install python3-pip

$ python3 -m pip -V

$ sudo python3 -m pip install virtualenv

如果你在运行这天命令的时候出现了如下报错,

则在~/.bashrc 文件末尾加上
export PIP_REQUIRE_VIRTUALENV=false

$ sudo source ~/.bashrc

$ sudo python3 -m pip install virtualenvwrapper

这样便安装成功
并把:

export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

添加在~/.bashrc文件末尾
然后重新读取配置文件使得配置生效

$ source ~/.bashrc

image.png

新建

$ mkvirtualenv py3.6

进入虚拟环境py3.5 前面出下(py3.6)表示已经进入虚拟环境 并安装django,uwsgi

$ workon py3.6

$ pip install django==1.11

$ pip install uwsgi

如果安装uwsgi出现了如下错误

则安装依赖如下

$ sudo apt-get install libpython3.6-dev

然后重新安装uwsgi

$ pip install uwsgi

知道这里我们就把需要的东西的下载安装好了

django hello world

接下来我们使用django写一个简单的helloworld

上传项目到服务器中, 如果不知道怎么上传可以试试pycharm的这个功能

并上传到/var/www目录中

配置nginx,uWSGI

配置文件 django.conf 并放到目录 /etc/nginx/conf.d/ 中

server{

    listen 8008;
    # 47.106.253.190是你的服务器ip
    server_name 47.106.253.190;
    
    charset utf-8;
    
    root /var/www/beike;
    
    index test.html;
    
    location / {
        include /etc/nginx/uwsgi_params;
        uwsgi_pass localhost:8010;
    }
    
    location /static {
        alias /var/www/beike/static/;
    }
    
    #location / {
    #   alias /var/www/beike/;
    #}
    
}

然后配置文件 uwsgi.ini 并放到/var/www/hello中

[uwsgi]
# 作为nginx连接时使用
socket=127.0.0.1:8010
# 直接作为web服务使用
# 配置工程目录
chdir=/var/www/beike
# 配置项目的wsgi目录,相对于工程目录
wsgi-file=beike/wsgi.py

#配置进程线程信息
processes=6
threads=2
enable-threads=True
master=True
pidfile=uwsgi.pid
daemonize=uwsgi.log

然后运行uwsgi

$ uwsgi --ini /var/www/hello/uwsgi.ini

$ nginx -s stop

$ nginx

然后便配置成功,可以访问了

uwsgi的操作命令

你在以后修改了django文件保存后应该重启uwsgi

$ uwsgi --reload uwsgi.pid

如果要停掉uwsgi用如下命令:

$ uwsgi --stop uwsgi.pid

uwsgi.pid文件是你在运行uwsgi --ini /var/www/hello/uwsgi.ini后在uwsgi.ini同级目录下生成的文件。

使用cat命令可以查看uwsgi.pid 文件的内容,在其实保存的就是运行的uwsgi主程序的pid

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,227评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,755评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,899评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,257评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,617评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,757评论 1 221
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,982评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,715评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,454评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,666评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,148评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,512评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,156评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,112评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,896评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,809评论 2 279
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,691评论 2 272

推荐阅读更多精彩内容