django+uWSGI+nginx应用部署于ubuntu16.04服务器

Django应用的部署不同于node或者javaweb应用,对初学者来说部署具有一定的难度,本文就ubuntu16.04来讲讲具体部署细节,若有问题欢迎大家提issue讨论。

官方文档上建议初学者使用apache部署django应用,本人并不建议,apache部署太麻烦,还要配置虚拟主机什么的,但nginx就相对来说简单多了。也便于理解。

一.安装Django

sudo apt install python3-pip         #安装pip
pip -v                                       # 查看pip的版本
pip install django                    #默认安装最新的django版本 

当然安装前需要更新一下系统的文件

sudo apt update

二.安装uWSGI

sudo apt install build-essential python3-dev  #安装依赖项
pip install uwsgi

然后呢你也可以直接查看官方文档对uwsgi这个东西深入了解,也可以直接略过,只学习怎么使用就可以。

三.安装nginx

这里推荐官方的通过命令安装而不是编译安装 官方安装指南
1.下载nginx_signing.key文件

wget https://nginx.org/keys/nginx_signing.key

2. apt-key的添加:

sudo apt-key add key nginx_signing.key

3.将nginx添加至ubuntu的配置源列表里面

sudo vim /etc/apt/sources.list

添加以下两行进入sources.list文件中

deb http://nginx.org/packages/ubuntu/ xenial nginx     #xenial是系统的Codename '使用命令 sudo lsb_release -a 查看'
deb-src http://nginx.org/packages/ubuntu/ xenial nginx

4.更新系统并安装最新的nginx版本

sudo apt update
sudo apt install nginx

5. 查看是否安装成功

nginx -v      #写文章时版本号为1.12.0

四.部署django应用

1.配置nginx配置文件配置转发请求(配置文件默认路径 /etc/nginx/nginx.conf)

配置前建议先了解一下nginx默认的全局配置文件nginx.conf内容,当然最主要的是看看include命令。nginx整合其他部分的配置文件都是通过include命令来导入的。在本人的nginx.conf文件里有这么一句

include /etc/nginx/conf.d/*.conf 

意思是nginx启动的时候还要导入/etc/nginx/conf.d目录下的所有以.conf结尾的配置文件,所以我们的配置
文件就建立在这个目录下了

vim /etc/nginx/conf.d/nginx_uwsgi.conf

文件内容:

upstream django {
    server unix://django_project_absolute_url/project_name.sock;   #这个.sock文件不存在也没关系,启动的时候会自动创建
    #例如我的项目的绝对路径为/home/floder/crawler 这行就是 server unix:///home/floder/crawler/crawler.sock
}
# 配置转发服务器
server {
  # 应用监听端口
  listen      80;
  # 允许访问的域名 没有域名的话就写服务器的公网ip地址
  server_name .crawler.site;  #这是我的一个django项目,项目访问地址为 http://crawler.site ,欢迎访问使用
  charset     utf-8;
  #访问日志
  access_log    /var/log/nginx/project_name_access.log;
  #错误日志
  error_log   /var/log/nginx/project_name_error.log;
  # 最大上传文件大小
  client_max_body_size 75M;  
  # 配置静态文件的请求
  location /static {
      alias  /static_files_absolute_url; #项目静态文件地址,使用python3 manage.py collectstatic 将静态文件收集到settings.py文件配置的STATIC_ROOT目录下
  }

  # 配置django应用的转发请求
  location / {
      uwsgi_pass  django;
      include     /etc/nginx/uwsgi_params; # 这个uwsgi_params文件的地方,默认在/etc/nginx目录下随nginx一起被安装
  }

  location /favicon.ico{
      alias /favicon.ico_absolute_url;   #网站图标地址  
  }
  #这里还可以配置许多独立的请求地址,只要找到对应的静态资源地址即可
   #location /xxx.html{
   # alias /xxx.html_absolute_url;
   #}
}

接下来重启nginx服务

sudo /etc/init.d/nginx restart         #nginx服务默认安装完就自动启动了

如果重启遇到错误的话可以按照提示查看错误原因,大部分原因都是由于配置文件写错了(比如语句末尾没有分号...)
2.配置uwsgi启动文件(.ini格式的文件 以我的项目为例)
 这个文件我一般是将它放在django项目的根目录下面,这里假设文件名为crawler_uwsgi.ini 内容如下:

# 项目的uwsgi配置文件
[uwsgi]
# Django-related settings
# 项目的绝对路径(以我的为例)
chdir           = /home/floder/crawler
# django的wsgi文件,默认是在项目的根目录的主文件夹下面
 module          = crawler.wsgi
# python包的绝对目录,这是python3.5版本的包管理路径
pythonpath = /usr/local/lib/python3.5/dist-packages
# 后台运行时打印日志的地方
daemonize = /home/floder/log/crawler_uwsgi.log
# 是否开启主线程
master          = true
# 最大工作进程
processes       = 10
# .sock文件的地址(因为django的应用请求配置的是sock请求)
socket          = /home/floder/crawler/crawler.sock      #项目的根目录下(和)
# 给予.sock文件的执行权限
chmod-socket    = 666
# 退出时是否清除工作环境
vacuum          = true

3.后台启动项目

uwsgi --ini crawler_uwsgi.ini

若项目启动之后访问出错,查看uwsgi的log文件查看出错的原因

五.服务器的选择

学生的话项目不需要翻墙可以去使用腾讯的云服务器,特别便宜。非学生党或者项目需要翻强的话推荐digitalocean服务器,这里给的链接点击进入可以自动获得$10供你熟悉使用。digitalocean 服务器的优点如下(具体费用和你选择的配置有关 $5起步):

(1)可以同时新建多个云主机(droplets),按流量收费。
(2)和github一样,只要在创建主机的时候将本机的ssh公钥添加进新创建的主机里面,就可以直接通过ssh连接而不用输入密码了(创建ssh密钥的石斛要求输入密码验证的除外)。
(3) digtialocean有各种已经配置好的各种编程语言环境的web项目主机比如django,lamp,nodeJS等等,就不需要你继续一个个的像上面介绍的一样安装运行环境了(缺点就是比较老,不推荐)。
(4)可选节点多达8个,总有一个满足你的要求.

通过ssh登录主机的第一件事是更新软件源

sudo apt update

默认是root用户登录的,为了安全起见,我们首先新建一个用户

adduser floder        #floder是用户名

设定密码、回答完相关问题之后,名为 jerry 的帐号就建好了。把它加到 sudo 权限组:

usermod -a -G sudo floder

这时候可以通过 su floder 切换到新帐号下工作

补充: ubuntu通过scp命令上传文件或者文件夹到服务器 scp命令的使用

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

推荐阅读更多精彩内容