Django-博客开发-网站发布

本文详细介绍了如何在CentOS7上部署Django项目,包括Python环境部署,使用uwsgi框架,以及Django与nginx的整合。在Python环境部署中,重点讲述了Python3与Python2共存的设置。接着,讨论了uwsgi的安装和配置,以及Django项目与uwsgi的结合。最后,讲解了通过ini文件启动uwsgi和配置nginx,实现项目的完整部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、python环境部署
2、python uwsgi
3、django + nginx + uwsgi

一、Python环境部署

如何将Django项目部署到linux服务器上,我们部署的linux系统是centos7

首先,我们先在linux上搭建我们的Python3环境:
在这里首先强调一下,Centos7系统自带的Python2我们不要删除,我们要做的是在Python2和Python3并存。

安装Python3的依赖包

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make -y 	

Python3 环境安装
创建python37文件夹

# mkdir python37  				

切换到python37文件夹

# cd python37/   					 

安装wget

yum install wget      

安装 Python3.7.2

wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz                                             

解包

tar -xvJf  Python-3.7.2.tar.xz

python37编译安装

./configure prefix=/usr/local/python3     make && make install

注意:
如果出现提示需要模块的Error,关于在centos下安装python3.7.0以上版本时报错
ModuleNotFoundError: No module named '_ctypes’的解决办法:

yum install libffi-devel –y  

然后再安装即可make install

然后设置python软连接,就像配置下windows下的path一个道理

ln -s /usr/local/python3/bin/python3 /usr/bin/python

因为执行 yum 需要 python2 版本,所以我们还要修改yum的配置,执行:

vim /usr/bin/yum

#! /usr/bin/python 修改为 #!/usr/bin/python2

同理 vi /usr/libexec/urlgrabber-ext-down 文件里面的 #! /usr/bin/python 也要修改为:#! /usr/bin/python2

在第一阶段中我们已经安装过python3.7.2所以我们直接拿来用就ok了

安装python-devel

yum -y install python-devel 

安装运行必要版本:
1.获取windows下的必要环境

python -m pip freeze > requests.txt 

2. 打开保存到桌面的 requests.txt 文档 修改没必要的安装包

3. 修改没必要的第三方模块并传递给 linux 中

安装好所有依赖:

python37 -m pip install -r requests.txt

运行项目:
1.修改项目settings配置
在配置uwsgi 时需要更改项目 settings.py 中的设置,
更改项目如下:

DEBUG = True
ALLOWED_HOSTS = ['*']

但是到这里我们有个明显的问题,我们的 mysql 数据库指定的 ip 为 127.0.0.1,数据存储在我的 windows中(工作中常把数据存储到云服务中),所以说我们要修改settings.py中的数据库ip

DATABASES = {    
'default': {        
'ENGINE': 'django.db.backends.mysql',       
'NAME': 'dbname',        
'HOST':'192.168.1.28',   # 这是windows ip地址 
'PORT':'3306',       
'USER':'root',        
"PASSWORD":'123456'    
  }
}

既然有网络交互的行为,我们把 windows 和 linux 下的防火墙全部关闭

但是,明显我们 linux 还是没有访问权限所以说给当前IP访问权限

mysql> use dbname;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; 

# cd /opt/
# rz
# unzip OurBlog.zip

结果如下:

运行结果如下:

注意:如果出现这个错误:(关于这个静态文件的路径我们后面会统一修改的)

ERRORS:
?: (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting.

STATIC_ROOT=os.path.join(BASE_DIR,"static/")   #错误
STATIC_ROOT=os.path.join(BASE_DIR,"/static/")   #正确

二、Python的uwsgi框架

上面我们已经完成了 python+Django 环境的部署,接下来我们需要了解 python 的 uwsgi 框架。

Python manager.py runserver, 这是一款适合开发阶段使用的服务器,只支持最高200的并发,显然不适合在生产中使用。我们在生产环境当中,通常会用到 apache 或者 nginx 服务器*为 Django 的生产服务器。今天我们以 nginx 为例子。

但是在学习部署之前,我们首先要掌握在 Django 和 nginx 之间的一个程序,就是 wsgi,web服务器网关接口,英文叫, Web Server Gateway Interface 缩写叫 WSGI,是Python应用程序或框架和web服务器之间的一种接口。

我们今天部署用的是 uwsgi模块,首先安装

pip3 install uwsgi

然后配置环境变量

ln /usr/local/python3.7/bin/uwsgi /usr/bin/uwsgi 

注意标红的地方是你的 python路径

Django 和 WSGI 的结合

  • 我们把我们准备好的 Django项目 存放到 /opt/ 下
  • 然后尝试使用 uwsgi 启动 Django项目
    在这里我们要关注到之前大家一直忽视的一个文件了
  • 紧接着修改 OurBlog 中的 settings.py 文件
DEBUG = False
ALLOWED_HOSTS = ['*']

静态文件重定位

STATIC_ROOT = os.path.join(BASE_DIR,‘/var/www’)

再进行静态文件转移 在项目目录下进行

python manage.py collectstatic 

这一步的顺序很重要,否则路径会有问题。

我们把静态文件迁移到 /var/www 中

这个就是我们项目的 uwsgi文件

uwsgi --http :8080 --chdir /opt/OurBlog/ --wsgi-file OurBlog/wsgi.py --master --processes 4 --threads 2  --static-map=/static=/var/www 

然后发起访问。

三、django+nginx+uwsgi

上面我们用命令启动了uwsgi,但是体验不太好,所以我们在这里使用 ini 文件 启动 uwsgi 服务器

在项目同等级目录下创建 script目录

然后在当中编写 uwsgi.ini文件,内容如下

[uwsgi]
socket = 127.0.0.1:9090    #在这个地方我们就写死
chdir=/opt/OurBlog
http= :8080
module=OurBlog.wsgi
master = true
processes=2
threads=2
max-requests=2000
chmod-socket=664
static-map = /static = /var/www
static-map = /media = /opt/OurBlog/media   #配置静态文件
vacuum=true
daemonize = /opt/script/uwsgi.log

注意:
也可以把上面代码修改如下:

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

然后启动uwsgi服务

uwsgi --ini uwsgi.ini(脚本名称)

然后可以正常访问

警告:
操作到这一步的时候可能你会获取不到 media 和 static 以及文章,我们需要修改
/opt/OuBlog/OurBlog/urls.py
如下:

from django.contrib import admin
from django.urls import path, include,re_path
from django.conf.urls import url
from django.views.static import serve
from OurBlog.settings import MEDIA_ROOT
import xadmin
from django.conf.urls.static import static
from OurBlog import settings
from Article.views import *
urlpatterns = [    
path('xadmin/', xadmin.site.urls),:wq    
url(r'cheditor/',include('ckeditor_uploader.urls')),    
url(r'^$',index),    
url('index/',index),    
url('myArticle/',myArticle),    
url('myPicture/',myPicture),
url('aboutMe/',aboutMe),    
url('article/',articleDetail),    
url('vue/',vuePageData),#这一行提上来    
url(r'^static/(?P<path>.*)$',serve,{'document_root': settings.STATIC_ROOT}, name='static'), # 添加这行    
url(r'^media/(?P<path>.*)$' ,serve, { 'document_root' : settings.MEDIA_ROOT})] 

如果还是出不来样式,请重启 uwsgi

# killall -9 uwsgi
# uwsgi --ini uwsgi.ini次刷新就OK了

安装nginx服务器
我们直接安装nginx是没有的,所以,需要我们wget
命令:

wget -c https://nginx.org/download/nginx-1.12.2.tar.gz 

解压
命令:

tar -zxvf nginx-1.12.2.tar.gz && cd nginx-1.12.2 

自定义配置
命令:

./configure \ 

编译安装
命令:

make && make install  

然后配置环境变量
命令:

cd /usr/local/nginx 

配置软连接
命令:

ln sbin/nginx /usr/bin/nginx 

启动nginx查看效果
进行nginx配置,(配置nginx.conf,配置之前进行备份)

# cd /usr/local/nginx/conf/ 
# ls 

备份

# cp nginx.conf nginx.conf.bak[root@xuegod63 conf]# ls 

然后开始配置
只在server中配置

   server {       
    listen       80;        
    server_name  localhost;         
    charset utf-8;         
    access_log  off;        
    location / {            
    include uwsgi_params; #nginx加载uwsgi模块
    uwsgi_connect_timeout 30; #连键超时时间
    uwsgi_pass 127.0.0.1:9090; #nginx对应的uwsgi socket文件
            }        
     location /static {            
                alias /var/www;  #静态文件路径            
                 #index index.html index.htm;  #首页        
                 }	        
                 location /media {            
                 alias /opt/OurBlog/media/; 
                        }

运行代码:
去除uwsgi进程

# killall -9 uwsgi

重新加载uwsgi服务

# uwsgi --ini /opt/script/uwsgi.ini

nginx重新加载

# /usr/local/nginx/sbin/nginx -s reload  

如果在重启nginx中出现错误如下:
执行

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf             
/nginx.conf

再次执行就OK了

总结:
1. python环境部署
2. python uwsgi
3. django+nginx+uwsgi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值