腾讯云Ubuntu18.04部署Django应⽤(Django3)完整教程⽬录
⼀. 任务概述
最近准备将原有Django项⽬迁移到腾讯云的Ubuntu上⾯去,以前在部署Django应⽤的时候主要采⽤Windows的IIS进⾏部署。为了便于今后操作,本⽂详细记录在Ubuntu的部署流程。
⼆. 架构设计
整体的设计架构图如下所⽰:
Django 的部署可以有很多⽅式,采⽤ nginx + uwsgi 的⽅式是其中⽐较常见的⼀种⽅式。在这种⽅式中,我们的通常做法是,将 nginx 作为服务器最前端,它将接收 web 的所有请求,通过负载均衡(如果
有多台服务器的话)统⼀管理请求,同时nginx 把所有静态请求(主要是图⽚、css样式、字体⽂件等)⾃⼰缓存⾃⼰来处理(nginx处理静态⽂件性能⾮常强)。接下来,nginx 将所有⾮静态请求传给uwsgi 来进⾏处理。uwsgi可以理解为是⽀撑django的⽣产级服务器,稳定性和并发性都⾮常好。通过这样的两级服务器⽀持,我们可以极⼤的提⾼⽹站访问的稳定性和访问性能。nginx和uwsgi之间⼀般处于内⽹环境,使⽤socket来代替http进⾏通信,速度极快。
有⼈会有疑问,为什么不⽤django⾃带的开发服务器然后通过命令⾏python manage.py runserver来启动呢?这是因为django⾃带的开发者服务器性能⽐较差,只能⽤来调试代码,真实⽣产级环境中⽆法满⾜⾼并发的要求。
三. 创建和开发Django项⽬
开发环境:Django3.2.10、Python3.6
远程登录软件:基于SSH 的MobaXterm
云服务器:Ubuntu server18.04
3.1 创建Django项⽬
Django是⼀个基于Python的Web框架,使⽤Django可以⽅便、快捷的创建⽹站等⽹络应⽤。本⽂仅介绍与本章内容相关的Django部署知识,如果想要深⼊学习Django的读者可以参考我的或者参考我的书籍《》
⾸先安装Django:
pip3 install django==3.2.10
然后我们创建Django项⽬,项⽬名称为blog:
python3 /home/ubuntu/.local/lib/python3.6/site-packages/django/bin/django-admin.py startproject blog
上述命令注意要到云服务器上django的安装路径,可以参考上⾯给出的路径。
此时会⾃动创建photoweb项⽬,进⼊该项⽬:
cd blog
接下来为该项⽬创建⼀个应⽤:
python3 manage.py startapp app
打开blog/blog/settings.py⽂件,添加应⽤同时放开访问权限:
ALLOWED_HOSTS = ['*',]
INSTALLED_APPS = [
'ib.admin',
'ib.auth',
'ttypes',
'ib.sessions',
'ssages',
'ib.staticfiles',
'app',# 添加应⽤
]
接下来可以启动项⽬:
python3 manage.py runserver 0.0.0.0:8000
正常情况下会出现下图所⽰界⾯:如何把文本框的边框去掉
说明此时我们在腾讯云上成功创建了⼀个最简单的⽰例⽹站,并且可以简单访问了。
如果上述步骤没有成功,那么需要查看购买的云服务器上8000端⼝是否已放开,需要登录云服务器控制台将端⼝开通。每个云服务器提供商对于端⼝的开通情况不⼀致,我在使⽤腾讯云的时候没有这个问题,百度云需要⾃⼰开通8000端⼝。
如何下载sqlyog
3.2 项⽬开发
本⼩节我们继续加强我们的django应⽤,最终实现⼀个基本的个⼈站点,可以多页⾯显⽰和数据库访问。由于需要远程编辑代码,这⾥推荐使⽤VS Code的远程调试功能,⽐较⽅便编辑代码。
3.2.1 加载⽂字
打开blog/app/views.py⽂件,添加视图接⼝函数:
from django.shortcuts import render
# Create your views here.
def home(request):
return render(request,'home.html')
这⾥我们希望通过render函数直接渲染home.html页⾯。
我们在app⽂件夹下新建名为templates的⼦⽂件夹,然后在templates⽂件夹中添加对应的home.html⽂件,这个⽂件可以随便从⽹上下载⼀个html⽹站模板即可,我们后⾯会讲解如何对其修改使得django能够正常渲染。这⾥我们先把免费的html⽹站⾸页的html⽂件拷贝到templates⽂件夹中然后修改名称为home.html即可。
为了能够顺利的访问图⽚等静态资源,我们在app⽬录下创建static⽂件夹,然后将⽹站对应的静态资源(css、js、img等)拷贝到该static⽂件夹下⾯。
最终完整⽬录如下所⽰:
接下来我们为新添加的视图处理函数添加对应的路由,打开blog/urls.py⽂件,添加路由如下:
from app.views import home
urlpatterns = [
...其它路由...
path('', home, name='home'),
兼职程序员招聘
]
这⾥默认使⽤根⽹址。保存所有修改后启动项⽬:
python3 manage.py runserver 0.0.0.0:8000
然后通过外⽹访问这个⽹站:
175.27.165.229:8000/
效果如下所⽰:
可以看到页⾯⽂字都显⽰出来了,但是页⾯的静态资源⽂件没有加载成功,下⾯我们继续完善。
0x80004005错误代码解决方法
3.2.2 静态资源导⼊
前⾯已经将⽹站需要的css、图⽚等静态资源放在了app/static⽬录下⾯。⾸先我们要做的就是确定部署环境时的静态资源路径。打开settings.py⽂件,添加代码如下:
import os
STATIC_URL = '/static/'
STATIC_ROOT= os.path.join(BASE_DIR,'static')
接下来我们进⾏静态⽂件迁移(把app下的static静态资源统⼀迁移到根⽬录下的static⽂件夹中):
python3 manage.py collectstatic
正常情况下效果如下:
接下来修改html模板,主要修改如下:
(1)头部静态标签引⼊
在html头部引⼊静态资源标签,类似于java web的jsp语法:jquery下载文件请求
{% load static %}
注意,这⾥我们采⽤的是django3进⾏部署,如果是django2,那么需要采⽤下⾯的语法:
{% load staticfiles %}
(2)静态资源引⽤
修改所有静态资源引⽤的地⽅,主要包括js、css、img等的引⼊,具体⽰例如下:
css⽂件
<link rel="stylesheet" href="css/bootstrap.min.css" />
替换为:
<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}" />
js⽂件
<script src="js/jquery-1.11.0.min.js"></script>
替换为:
<script src="{% static 'js/jquery-1.11.0.min.js' %}"></script>
img图⽚:
<img src="img/01.jpg" alt="Image 1" class="" />
替换为:
<img src="{% static 'img/01.jpg' %}" alt="Image 1" class="" />
改完以后重新启动,刷新页⾯,可以看到效果如下所⽰:
c语言指针数组格式所有效果和样式都已经正常了。这⾥我们就在云上基于开发者服务器部署完了。
四、Nginx+uWSGI⽣产级部署
⽬前,我们使⽤的django是采⽤其默认的开发者服务器进⾏部署的,这种部署⽅式不适合⾼并发需求,稳定性较差。本⼩节我们将采⽤nginx + uwsgi 来进⾏⽣产级部署。
4.1 安装Nginx
sudo apt-get install nginx

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。