是否曾想过把django项目从windows移植到Linux上运行,Linux性能众所周知,作为Django运行的服务器再合适不过啦,今天分享一下如何在线上云机器的Linux环境运行Django项目。
客户端访问服务端的流程
1.首先客户端请求服务资源,
2.nginx作为直接对外的服务接口,接收到客户端发送过来的http请求,会解包分析。
3.如果是静态文件请求就根据nginx配置的静态文件目录,返回请求的资源,否则会根据django配置文件设置的static目录去找资源。
4.如果是动态的请求,nginx就通过配置文件,将请求传递给uwsgi;
5.uwsgi 将接收到的包进行处理,并转发给wsgi, wsgi根据请求调用django工程的某个文件或函数,处理完后,django将返回值交给wsgi, wsgi将返回值进行打包,转发给uwsgi,
6.uwsgi接收后转发给nginx,nginx最终将返回值返回给客户端(如浏览器)。
补充一点知识:
1.wsgi是web服务器与web程序之间的一种低级别的接口
2.uwsgi是一个基于uwsgi协议、wsgi协议和Http协议的WEB接口,简单说就是web通过uwsgi访问到django文件
一、环境准备
- Linux服务器一台
- Nginx软件包
- MySQL软件包
- Django项目
二、环境部署
1.在Linux安装python,根据自己项目需要安装python版本
1.1安装相关依赖
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
1.2编译安装
cd /usr/local/
tar xf Python-3.5.1.tgz
cd Python-3.5.1/
./configure --enable-optimizations
cd Python-3.5.1/
make && make install
1.3修改Python文件
mv /usr/bin/python /usr/bin/python2.7.5
ln -s /usr/local/bin/python3.5 /usr/bin/python
python -V #这里输出是你编译版本就OK啦
Python 3.5.1
1.4修改yum配置文件,因为修改了python文件,yum是无法使用
vim /usr/bin/yum
#!/usr/bin/python2.7.5 修改为之前移动的python文件
还有一些因为Yum安装报错可以根据上面修改即可
2.安装模块
2.1 安装uwsgi模块
pip3 install uwsgi
2.2 安装pymysql模块
pip3 install pymysql
2.3 安装django
pip3 install django==2.0
3.修改django配置文件
3.1在项目中的init文件写入下面代码,如果不填会连接不了数据库哈
import pymysql
pymysql.install_as_MySQLdb()
3.2修改setting.py配置文件
DEBUG = False #这里需要改为False,不然程序报错,会在WEB页面显示出来
ALLOWED_HOSTS = [‘IP‘] #这里设置你允许哪些IP访问
DATABASES = {
‘default‘: {
‘ENGINE‘: ‘django.db.backends.mysql‘, #这是指连接数据库的驱动
‘NAME‘: ‘xxxxx‘, #你的项目数据库名
‘USER‘: ‘xxxxx‘, #连接数据库用户
‘PASSWORD‘: xxxxxxxxx‘, #数据库密码
‘HOST‘: "xxxxxxxx", #主机
‘PORT‘: ‘3306‘, #端口
}
}
TIME_ZONE = ‘Asia/Shanghai‘ #修改为中国区域
USE_TZ = False #关闭
STATIC_ROOT= "/data/autoops/static" #设置为你的静态目录
4.编译安装niginx
5.二进制安装mysql
6.上传django项目代码到Linux服务器,根据你的需求放到指定目录
7.编写uwsgi文件,我的文件在/data/autoops/script/uwsgi.ini (重点)
[uwsgi]
# 项目目录
chdir=/data/autoops/
# 指定项目的application
module=autoops.wsgi:application
# 进程个数
workers=8
pidfile=/data/autoops/script/uwsgi.pid
# 指定IP端口
#http=192.168.10.155:8003 ##可以不启用,利用socket文件,如果只是测试,需要启用
# 指定静态文件目录
static-map=/static=/data/autoops/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=/data/autoops/script/uwsgi.log
# 指定sock的文件路径
socket=/data/autoops/script/uwsgi.sock
die-on-term=true
8.uwsgi命令
uwsgi --reload uwsgi.pid 重启
uwsgi --stop uwsgi.pid 关闭
uwsgi --ini uwsgi.ini 启动
9.在启动之前,需要注意的,如果你setting的DEBUG是关闭状态的,需要在django项目中执行python manage.py collectstatic,作用是收集Django项目中所有涉及到的静态资源,统计放到 STATIC_ROOT 管理访问,如果你不执行,你会发现,django项目无法加载CSS样式,JS脚本。
如图下方
10.初始化django项目的ORM
1. python manage.py makemigrations 把models.py里面的改动记录下来,记录到migrations文件夹下面
2. python manage.py migrate 把改动翻译成SQL语句去数据库执行
11.配置Nginx文件并且检查语法启动
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 你的端口号;
server_name 公网IP;
location / {
include uwsgi_params;
uwsgi_connect_timeout 30;
uwsgi_pass unix:/data/autoops/script/uwsgi.sock; #你的uwsgi.sock文件位置
}
}
}
12.启动uwsgi和nginx
[[email protected]:56:29/data/autoops]# uwsgi --ini script/uwsgi.ini
[uWSGI] getting INI configuration from script/uwsgi.ini
[uwsgi-static] added mapping for /static => /data/autoops/static
三、测试访问nginx
总结:部署不难,需要注意一下,文章有些地方没详细说的,自己可以思考哈,下次再分享
原文地址:https://blog.51cto.com/beckoning/2422101