在裸机centos7系统中部署django项目的过程
概要
本文用一台安装了centos7.5系统的裸奔Linux机器(当然是虚拟机)详细讲解从无到有部署django项目的过程。
安装必要的工具
配置yum源
至于什么是yum源大家请自行百度,本人用的是阿里云的yum源,因此需要在裸机上配置一下:
进入yum源的目录
cd /etc/yum.repos.d/
查看yum源文件
ls -l

配置阿里云yum源
1.好习惯,备份yum源
mkdir repo_bak
mv *.repo repo_bak/
wget http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
yum install -y epel-release
安装pthon3
推荐利用编译的方式安装Python3。
安装依赖环境——非常重要
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
下载解压源码包
需要注意的是,Linux系统的第三方软件都约定俗成的安装在/opt目录下~因此我们需要把这个包下载到/opt目录下
cd /opt
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
解压
tar -zxvf Python-3.6.5.tgz
开始编译安装
configure
进入解压出出来的Python-3.6.5目录,里面有一个绿色的可执行文件configure~
这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如代码:
./configure --prefix=/opt/py365
上面的意思是将该软件安装在 /opt/py365 下面,执行文件就会安装在 /opt/py365/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。
同时一些软件的配置文件你可以通过指定 --sys-config= 参数进行设定。有一些软件还可以加上 --with、--enable、--without、--disable 等等参数对编译加以控制,你可以通过允许 ./configure --help 察看详细的说明帮助。
——我这里没有加后面的参数,直接执行 ./configure,默认安装在了/usr/local/bin中~
make
这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。
如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。
make 的作用是开始进行源代码编译,以及一些功能的提供,这些功能由他的 Makefile 设置文件提供相关的功能,比如 make install 一般表示进行安装,make uninstall 是卸载,不加参数就是默认的进行源代码编译。
make 是 Linux 开发套件里面自动化编译的一个控制程序,他通过借助 Makefile 里面编写的编译规范进行自动化的调用 gcc 、ld 以及运行某些需要的程序进行编译的程序。一般情况下,他所使用的 Makefile 控制代码,由 configure 这个设置脚本根据给定的参数和系统环境生成。
make install
这条命令来进行安装(当然有些软件需要先运行 make check 或 make test来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)
安装虚拟环境包virtualenv及管理工具virtualenvwrapper
我自己之前总结过两篇相关的博客(原创哦~23333):
linux下虚拟环境模块virtualenv及管理工具virtualenvwrapper的使用
windows与mac下virtualenv与Pycharm的结合使用
安装nginx
提示
nginx的安装也推荐编译安装!
由于本文用的是一个裸机,如果大家之前用yum安装了nginx,请卸载yum安装的nginx!!!
yum remove nginx -y
解决软件包依赖——特别重要
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
下载nginx的源码包并解压
我这里用的是淘宝的Tengine——在原始nginx上扩展了许多功能~很强大~
需要注意的是,Linux系统的第三方软件都约定俗成的安装在/opt目录下~因此我们需要把这个包下载到/opt目录下
cd /opt
wget http://tengine.taobao.org/download/tengine-2.3.1.tar.gz
解压tengine包:
tar -zxvf tengine-2.3.1.tar.gz
安装tengine
进入源码目录:
cd tengine-2.3.1/
里面有一个绿色的可执行文件configure
这里我们指定将tengine安装在/opt/tngx231这个目录下:
./configure --prefix=/opt/tngx231/
然后进行编译安装:
make && make install
结束后~我们可以看到新生成了一个/opt/tngx321目录~
安装好的nginx放在了 /opt/tngx231/sbin/ 这个目录下了~
修改环境变量让nginx命令生效
安装完成后需要每次用/opt/tngx231/sbin/ 这个目录加上nginx才能操作,很烦躁,我们可以通过修改环境变量,以后只需要执行nginx就可以启用nginx的操作了~
echo $PATH
#/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
vim /etc/profile
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/tngx231/sbin"
source /etc/profile
nginx的启停命令
在没有修改环境变量之前,我们需要进入nginx的安装目录(本文是在 /opt/tngx231/sbin/ )这样执行:
./nginx #启动
./nginx -s stop #关闭
./nginx -s reload #重新加载
修改了环境变量后可以直接这样执行:
nginx #启动
nginx -t #查看nginx状态
nginx -s stop #关闭
nginx -s reload #重新加载
测试nginx的服务
安装完成后别忘了检测一下nginx的服务
netstat -tunlp |grep 80
curl -I 127.0.0.1
结果如下:

#关防火墙
systemctl disable firewalled
setenforce 0
项目部署过程
创建虚拟环境并在虚拟环境中安装必要的包
利用virtualenvwrapper工具创建虚拟环境
mkvirtualenv whw_dj1
创建完虚拟环境后直接会进入这个虚拟环境。
在这个环境中安装项目需要的包,安装过程略(直接用pip安装即可),结果如下:

这里需要记录一下uwsgi的执行路径以及虚拟环境的目录,后面要用:
uwsgi的执行路径
特别注意:如果在虚拟环境中运行的话,后面执行uwsgi命令需要用绝对路径的时候一定是虚拟环境中的这个绝对路径!
(补充说明一点:如果虚拟环境中没有安装uwsgi模块的话会显示外部环境中的位置,因此一定要记得在虚拟环境中安装uwsgi模块!)
(whw_di1) [root@bogon opt]# which uwsgi
/root/Envs/whw_di1/bin/uwsgi
虚拟环境的目录
特别注意:如果在虚拟环境中运行的话,后面uwsgi的配置文件一定要写当前虚拟环境下的uwsgi的绝对路径!
(whw_di1) [root@bogon opt]# cdvirtualenv
(whw_di1) [root@bogon whw_di1]# pwd
/root/Envs/whw_di1
项目文件settings与静态文件相关的配置
将项目传到服务器的/opt目录~进入项目的二级目录,配置一下里面的settings文件,这里只写与部署相关的配置
# 线上部署一定要记得把DEBUG改成False
DEBUG = False
# 94这个ip是我的云服务器的Ip,一般情况下是这样配置
# ALLOWED_HOSTS = ['localhost','94.191.41.167','0.0.0.0:8000','127.0.0.1' ]
# 自己测试的话直接allow所有的ip就好了
ALLOWED_HOSTS = ['*' ] # sqllit数据库的配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
} # 静态文件配置
# 第一个参数是将静态文件copy到服务器的目录的位置
STATIC_ROOT='/opt/whw_static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'staticfiles'),
] ## mysql的配置——本文用的是sqllit,因此这个配置注释掉
#DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.mysql',#引擎,选mysql
# 'NAME':'whw1',#要连接的数据库,连接前需要创建好
# 'USER':'root',#连接数据库的用户名
# 'PASSWORD':'123',#连接数据库的密码
# 'HOST':'127.0.0.1',#连接主机,默认本本机
# 'PORT':3306,#端口 默认3306
# #Django中设置数据库的严格模式
# 'OPTIONS':{
# 'init_command':"set sql_mode='STRICT_TRANS_TABLES' ",
# }
# }
# }
由于uwsgi不能处理项目的静态文件,我们需要用nginx来处理,因此需要将项目的静态文件copy到STATIC_ROOT参数对应的位置:
python3 /opt/whw/manage.py collectstatic
whw是我的项目的第一层目录,就是我的项目的名字。
uwsgi的配置
提醒一点:需要提前在虚拟环境中安装好uwsgi包~~
uwsgi.ini文件的配置
配置uwsgi之前需要新建一个uwsgi.ini文件。
由于每个项目对应一个uwsgi.ini文件,这里建议大家将这个文件创建在自己项目的第一层目录中:
cd /opt/whw/
touch uwsgi.ini
然后编辑这个文件
vim uwsgi.ini
文件中的配置如下:
[uwsgi]
# Django-related settings
# the base directory (full path)
#项目的绝对路径,定位到项目的第一层
chdir = /opt/whw
# Django's wsgi file
# 找到项目第二层的wsgi文件
module = whw.wsgi
# the virtualenv (full path)
# 找到虚拟环境的绝对路径~注意最后不要加/
home = /root/Envs/whw_di1
# process-related settings
# master
# 主进程
master = true
# maximum number of worker processes
# 开启uwsgi的多进程数,根据cpu核数来定义
processes = 16
# the socket (use the full path to be safe
# 基于socket链接运行项目,只有与nginx结合的时候,才使用socket形式
socket = 0.0.0.0:8000
# 当你没用nginx,调试项目的时候,使用http形式
#http = 0.0.0.0:8000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
# 记录pid与日志的文件
pidfile=uwsgi.pid
daemonize=uwsgi.log
启动uwsgi
进入项目的第一层目录,这里有写好的uwsgi.ini文件,执行这个文件:
uwsgi --ini uwsgi.ini
特别注意,这里用的都是相对路径~真正的执行命令其实是这样的:
/root/Envs/whw_di1/bin/uwsgi --ini /opt/whw/uwsgi.ini
——这样的执行结果是在前台运行的,我们的终端会夯住,如果关掉这个终端uwsgi的进行也会关掉,需要我们再打开一个终端进行下一步的操作~
——让uwsgi后台执行的话~只需要在命令里面加上-d参数就好了:
uwsgi -d --ini uwsgi.ini
nginx的配置
nginx的配置文件是 /opt/tngx231/conf/nginx.conf 。
# 这里需要说明一下:
如果安装的是nginx不是tengine,且没有指定安装目录,那么它的配置文件默认是
/etc/nginx目录中的nginx.conf文件
编辑这个文件
vim /opt/tngx231/conf/nginx.conf
我们只配置第一个server里面的参数:
server {
listen 80;
server_name localhost;
location / {
# 支持uwsgi的配置
include uwsgi_params;
# ip与端口是uwsgi服务器的ip与端口~本例二者在一个机器里因此用环回地址
uwsgi_pass 127.0.0.1:8000;
#root html;
#index index.html index.htm;
}
# 存放静态文件的配置
location /static{
alias /opt/whw_static;
}
# xxxxxxxxxxxxxxx
}
nginx配置完后启动nginx服务:
nginx
如果中途修改了nginx.conf的参数的话,保存完后需要重启nginx服务,记得在重启前-t一下查看nginx的状态:
(whw_di1) [root@bogon whw]# nginx -t
nginx: the configuration file /opt/tngx231//conf/nginx.conf syntax is ok
nginx: configuration file /opt/tngx231//conf/nginx.conf test is successful
(whw_di1) [root@bogon whw]#
(whw_di1) [root@bogon whw]# nginx -s reload
至此,项目部署的配置就这么多了。
写在最后
请求流程简介
(1)用户发起请求
(2)访问IP(或者访问域名www.whw.com) 请求走到nginx这一层代理
(3)nginx直接转发(uwsgi_pass)给后端django的地址
(4)django处理完毕
(5)响应给nginx
(6)nginx返回结果给浏览器界面
关于数据库的配置说明
看到最后,聪明的你肯定看出端倪来了:数据库用的是sqllit!为什么不用实际生产环境中常用的MySQL呢?
这是因为Red Hat Enterprise Linux/CentOS 7.0发行版已将默认的数据库从 MySQL 切换到 MariaDB,实际中,我们既可以进行配置,让数据库在MySQL与MariaDB之间切换,也可以将默认的MariaDB卸载掉安装纯净版的MySQL。关于两者有什么差别我还没怎么学习。
关于数据库的相关配置会在另外一篇文章中具体写一下~
在裸机centos7系统中部署django项目的过程的更多相关文章
- Linux(CentOS7)系统中部署Django web框架
1. 概述 部署django和vue架在逻辑上可以分为web层与数据库层:web前端通过实现了WSGI协议的模块对python代码进行解析,而python代码中则通过特定于数据库的操作接口对数据库进行 ...
- 在Linux系统中部署NodeJS项目
在Linux系统中部署NodeJS项目 安装NodeJS 首先进入 Node 官网,下载对应的 Node包 下载下来后是一个后缀为 xz 的压缩包,我们把这个包上传到 Linux 系统中的 /usr/ ...
- docker中部署django项目~~Dockfile方式和compose方式
1. 背景: 本机win10上,后端django框架代码与前端vue框架代码联调通过. 2. 目的: 在centos7系统服务器上使用docker容器部署该项目. 3. 方案一:仅使用基 ...
- linux中部署django项目
通过Nginx部署Django(基于ubuntu) Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器 ...
- Django(二)如何在IIS中部署django项目
环境配置 windows7 Django 2.0 python 3.6 wfastcgi 3.0 关键步骤 打开CGI功能 控制面板/程序和功能/打开或关闭windwos功能,如图: 安装wfastc ...
- Ubuntu中部署Django项目的配置与链接MySQL
Django的简介 MVT模式的介绍创建项目的虚拟环境 本次使用的是pip安装 一.更新 sudo apt update 二.安装pip sudo apt install python3-pip 三. ...
- 腾讯云服务器部署 django项目整个流程
CentOS7下部署Django项目详细操作步骤 前记:购买腾讯云服务器,配置自选,当然新用户免费体验半个月,我选择的系统是centos7系统版本, 接下来我们来看整个配置项目流程. 部署是基于:ce ...
- nginx + uwsgi 部署django项目
因项目需求,需要部署django项目,这里是基础的nginx配合uwsgi部署django,后续会采用docker部署的方式 环境: centos7 python3.5.4 django2.1.4 u ...
- 宝塔面板成功部署Django项目流程
宝塔面板部署Django项目完整流程 上线Django项目记录,超简单,避免无意义的踩坑! 第一步:安装python管理器 在宝塔在线面板安装“python项目管理器” 第二步:安装适配python版 ...
随机推荐
- java基础笔记(2)
java中成员变量是有默认初始值的,而局部变量是没有的: 构造方法名和类名相同,没有返回值,即结构如下:public 构造方法名(): 实例化类的本质就是调用了类的构造方法: 如果自定义了构造方法,就 ...
- C++中的class和struct区别
1,经过不停的改进,结构体 struct 变得原来越不像它在 C 语言中的样子了: 1,struct 在 C 语言中仅为了定义一个变量的集合,仅此而已,不能定义函数: 2,struct 在 C++ 中 ...
- web 过滤器 Filter、 Spring 拦截器 interceptor
1.过滤器(Filter)(在web.xml中注册过滤器) 首先说一下Filter的使用地方,我们在配置web.xml时,总会配置下面一段设置字符编码,不然会导致乱码问题: <filter> ...
- osi七层模型??
1.应用层:提供用户服务,例如处理应用程序,文件传输,数据管理 (HTTP.RTSP.FTP) 2.表示层:做数据的转换和压缩,加解密等 3.会话层:决定了进程间的连接建立,选择使用什么样的 ...
- 使用filebeat收集不同用应用的日志传输到redis,并加以区分
附加技巧 步骤流程: 使用filebeat收集一台主机上两个不同应用的日志,传递给redis,然后logstash从redis中拉去数据传递给elasticsearch 1.filebeat.yml文 ...
- go 关键字之 defer
我是谁 defer - 顾名思义翻译过来叫 延迟, 所以我们通常称呼 defer func() 这样 defer 后面紧跟的函数为 延迟函数. 作者注: 不过从实际应用来讲, 延迟函数通常用来做一些函 ...
- ExtensionlessUrlHandler-Integrated-4.0
window 10 锁定webconfig解决方案 解决办法: 出现这个错误是因为 IIS 7 采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改.要取消锁定可以以管理 ...
- goaccess实现nginx实现日志可视化
一:goaccess模块 goaccess模块是将nginx的日志定向到goaccess模块里实现,原理很简单,只要将文件定向到那里就可以,goaccess是已经集成好显示数据的一个页面,非常的美观和 ...
- centos7系统时间修复
https://www.cnblogs.com/xsbx/p/10172728.html
- php内置函数分析之array_sum()
PHP_FUNCTION(array_sum) { zval *input, *entry, entry_n; if (zend_parse_parameters(ZEND_NUM_ARGS(), & ...