(django学习2)部署(ngix+uwsgi)django到服务器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31340657/article/details/79333765

本人菜鸟,欢迎指正或者询问,[email protected],或者评论联系我
这里完全是模拟实际开发中的过程,并不只是像有些教程一样,很多细节都一笔带过

你将学到

1.django最基本使用,搭建一个最简单站,并使用git上传到服务器
2.ngix安装使用
3.uwsgi安装使用
4.部署项目,并且能用外网访

一.搭建最简单的django网站

这里使用的pycharm,所以很多东西比较简单

1.创建项目

打开pycharm,工具栏打开file->new Project 选择django
填写项目名称,同时选择interpreter,(编译环境),你可以选择一个已经存在的,当然你点击后面的设置图标可以新建一个虚拟环境
然后确定即可,我们这里项目暂且取名字为t1

2.创建app

工具栏打开 toll->run manage.py task
打开manage.py 环境之后 使用命令
startapp user  
就创建了一个user 的app

3.配置url

在user这个app下新建一个urls.py文件

在项目根目录下的urls中这样配置

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'user/', include('user.urls')),
]

在user下的urls.py中这样配置

# coding:utf-8
from django.conf.urls import url
from . import views

__date__ = '2018/2/18 2:41'
urlpatterns = [
    url(r'^index/', views.index),
]

4.写view

from django.shortcuts import render


# Create your views here.
def index(request):
    return render(request, 'index.html')

5.在template文件夹下新建文件夹user,user下面新建index.html

(技巧:一般template下面的所有的html文件都分app存放,这样不会发生命名冲突)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试首页</title>
</head>
<body>
这是一个测试页面
</body>
</html>

5.启动项目测试

点击启动按钮,就运行起来了
在浏览器中输入 http://127.0.0.1:8000/user/index/即可打开刚刚新建的网页

6.其他配置

1.static配置

在settings中配置

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

然后python manage.py collectstatic,即可把所有的app下面的static文件放在static目录下面,依照app排列

2.配置host

ALLOWED_HOSTS = ['xx.xinyustudio.cn', 'localhost','你的公网ip(不带端口号)']
这样可以访问的只有我们的域名,本地访问,以及外网使用ip地址访问了,如果不配这个,只能在本地访问
.xin.cn 表示xin.cn的所有二级域名都可以访问,如果不是这样最好配置全了

到此为止,我们模拟自己在本地完成了代码开发工作,需要部署到服务器上拉,首先要把我们写源代码上传到服务器,然后在进行部署

二.项目源码上传到服务器

1.提交源码到git服务器

不属于今天的主要内容所以简单说一下,如果不懂git可以先稍微学一下

2.网站服务器clone代码到服务器

使用git clone命令,以后如果代码修改了之后可以用git pull 拉代码到服务器

前戏完了,下面进入今天的主戏部分;其实今天主要讲的还是部署代码到服务器,只是怕有些同学不太懂基础的东西,顺带提了一下,前面部分都写的比较简单,不懂得建议还是再去看看教程,巩固一下

三.uwsgi安装使用

1.安装

pip install uwsgi
uwsgi --version 测试是否安装完成并且正常

2.配置详解参考自这里

注意:ngix是门户,它负责转发,它转发动态请求给uwsgi,然后uwsgi在转给django处理
uwsgi配置是每个项目配置一个,所有最好放在项目目录下面,我这里是在项目下新建uwsgi目录,然后新建uwsgi.ini文件来做为配置文件内容如下
特别注意:1.uwsgi配置文件中各个标签名字一定不要写错,否则会有很奇怪的问题,尤其是最上面的[uwsgi]这个写错了的话,永远都运行不成功;2.uwsgi安装时,要在虚拟环境里面用pip的方式安装,因为我们的uwsgi要解析python代码,我们的python代码都是跑在虚拟环境下的,所以uwsgi不论是安装,还是启动都要在虚拟环境下,否则它默认找的是系统自带的python2.x,运行时就各种500,502,被坑了很久

[uwsgi]
# 我的项目目录
chdir = /home/www/t1/
# 指定项目的application
module = t1.wsgi:application
# 进程个数
workers = 5
#pid文件保存路径
pidfile = /home/www/t1/uwsgi/uwsgi.pid
# 指定IP端口
http = http://119.23.51.53:8080
# 指定静态文件
static-map = /static=/home/www/t1/static
# 启动uwsgi的用户名和用户组
uid = root
gid = root
# 启用主进程
master = true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum = true
# 序列化接受的内容,如果可能的话
thunder-lock = true
# 启用线程
enable-threads = true
# 设置自中断时间
harakiri = 30
# 设置缓冲
post-buffering = 4096
# 设置日志目录
daemonize = /home/www/t1/uwsgi/uwsgi.log
# 指定sock的文件路径
socket = /home/www/t1/uwsgi/uwsgi.sock

3.简单测试

$ uwsgi --ini uwsgi.ini   # 启动uwsgi配置
[uwsgi-static] added mapping for /static => /home/trunk/static    # 启动成功

$ uwsgi --stop uwsgi.pid  # 关闭uwsgi
signal_pidfile()/kill(): Operation not permitted [core/uwsgi.c line 1659]

$ uwsgi --reload uwsgi.pid  #重新加载配置

四.nginx安装使用

1.安装

yum install nginx
用此方法安装虽然方便,但是安装之后各种文件杂乱摆放很难管理,所以不推荐
而是用安装包的形式安装,去官网复制对应链接
wget http:xxx
然后解压,安装

需要注意的是我么要提前安装这些依赖包,因为后续会用到这些包

yum -y install gcc-c++ && yum -y install pcre pcre-devel && yum -y install zlib zlib-devel && yum -y install openssl openssl-devel

安装方式如下

解压:tar -xf  nginx.tar
配置安装路径:  ./configure --prefix=/etc/nginx1.12
安装:make 然后make install

启动:

cd /etc/nginx1.12/sbin
./nginx   #启动
./nginx -s quit #退出
./nginx -s reload #刷新配置文件

测试:
nginx -t可以测试配置是否正常,如果正常可以启动,然后,
浏览器地址栏输入你自己的域名,出现Welcome to nginx!页面,说明nginx已经正确安装而且起作用了

nginx的一些坑:

yum安装是非常方便,直接用命令就可以安装成功,但是还是有些问题的,这样的方法安装的版本往往很陈旧,一些新特性并不能发挥作用,最坑的是可能根本不能用,或者问题特别多,因为系统也会更新,旧软件不适合新系统是常有的事,所以要安装最新稳定版

说到这个,yum仓库真是蛋疼啊,为啥不支持最新的版本,不是最新的就算了,差别太多了吧,nginx yum安装的才是0.x版本,大概10年前的版本,现在最新版已经到1.9.9了,到底是谁的问题,真是奇怪啊,难道没人维护这东西?10年没有在yum仓库更新了?好可怕啊
好了开始安装吧/首先去官网下载:
推荐用源码安装,其他安装方式配置文件七零八落的,找都找不到,mysql其实是用起来之后没什么需要配置的就无所谓了,用官方推荐的方式即可,但是nginx还是用源码安装比较好,要不然配置文件真实找起来麻烦啊,
官网下载地址http://nginx.org/download/ 直接进去找不到下载路径的,只有去这个网站才可以,选择自己想要的版本,(比较新的稳定的tar包的)
这里写图片描述
然后右键单击,复制链接地址,
wget [连级地址]下载到本地
tar -xf [文件名]解压
进入解压后的文件中
/.configure –prefix=/home/pkg/nginx 配置安装路径
make
make install 安装
这样就安装好了,所有配置文件都会在你指定的安装路径下面,用起来方便多了

五.django-uwsgi-nginx联合运行

1.nginx作为门户需要配置uwsgi以及django相关的东西,所以这一节主要是nginx配置相关,配置完之后,nginx设置此配置,然后启动即可

2.配置

1.基础配置

cd /etc/nginx1.12/conf
vim nginx.conf #这个是基本配置,里面的东西可以都不用动,然后在server之前加上一行代码
include /etc/nginx1.12/conf/*.conf  #意思是基础配置里面引入了所有的.conf文件,

这样,我们可以给每个站点配置一个.conf文件,只要放在这个目录下即可,然后nginx会自动引入到配置里面,

比如我们m子域名的站点配置文件就可创建一个 m.conf文件,而q子域名的配置文件可以命名为 q.conf

那么每个站点的.conf文件怎么写?下面示例一下
server {
        listen       80;
        server_name  localhost;
         location /static {
        alias /home/www/t1/static;
        }
        location / {            
            include  uwsgi_params; #如果这个uwsgi-params不是在当前目录下,一定要写绝对路径,只有根据这个才能正确的处理static文件
            uwsgi_pass  127.0.0.1:8000;     #必须和uwsgi中的设置一致

        }
    }

到此已经配置好了

提交代码到服务器

上传代码:开发机器push到仓库,服务器git pull下来,重启uwsgi –reload uwp.pid即可(记住如果数据库有修改要同步数据库再重启,pip list添加了也要同步的在服务器上添加对应的包,尽量保证开发环境和生产环境的一致性,从而吧错误率降到最低)

六.总结一下

1.nginx是门户,

所有的请求都会到这里,如果是static的,就直接通过之前配置的static路径找,然后处理,如果是动态请求,就交给127.0.0.1.8000这个端口去处理,从这个端口接收请求的正是uwsgi(uwsgi.ini文件中配置的),然后uwsgi把请求交给django,django处理完再转交给uwsgi,再转交给nginx,就是这么一个过程

2.我采用的方式

是所有的配置文件都放在我的项目目录下的conf文件夹下,方便管理,那么nginx如何能找到我这个配置呢?其实nginx启动默认加载它安装目录下面的conf/nginx.conf文件的配置信息,而在这个配置文件中我增加一行include代码,把我项目下的nginx配置文件引入其中, 这样我项目里面的配置文件就只需要简单配置几项即可

3.nginx和uwsgi交互原理

就是通过他们都配置了一个相同的127.0.0.1:8000端口

4.最后要让django nginx uwsgi都一起运作

需要启动nginx,启动uwsgi,然后django会被uwsgi驱动起来,记得uwsgi是在虚拟环境下运行的,而nginx是系统环境下运行的.这样可以用一个nginx指向到多个网站应用上

大过年的每天熬到3点钟不容易啊.越努力越幸福,(习近平同志大年三十说给全国人民听得话,有水准)期待一个好的未来!

年收入过千万的时候我就再也不喜欢钱了!

本人菜鸟,欢迎抨击!
参考的资料太多了,实在无法统计,因为坑太多了,资料完善度也千差万别.

猜你喜欢

转载自blog.csdn.net/qq_31340657/article/details/79333765
今日推荐