概要

本文用一台安装了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/
2.下载阿里云repo文件
wget http://mirrors.aliyun.com/repo/Centos-7.repo
3.清空yum缓存并且生成新的yum缓存
yum clean all
yum makecache
4.安装软件扩展源
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的操作了~

<1>首先确认下当前的环境变量有哪些目录:         
echo $PATH
#/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
<2> 编辑/etc/profile文件
vim /etc/profile 
<3>在文件的最后一行输入 :
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/tngx231/sbin"
并 :wq  保存退出~~
<4>最后一定要记得source一下 /etc/profile 文件!
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

结果如下:

如果访问不了,检查selinux,iptables
#关防火墙
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项目的过程的更多相关文章

  1. Linux(CentOS7)系统中部署Django web框架

    1. 概述 部署django和vue架在逻辑上可以分为web层与数据库层:web前端通过实现了WSGI协议的模块对python代码进行解析,而python代码中则通过特定于数据库的操作接口对数据库进行 ...

  2. 在Linux系统中部署NodeJS项目

    在Linux系统中部署NodeJS项目 安装NodeJS 首先进入 Node 官网,下载对应的 Node包 下载下来后是一个后缀为 xz 的压缩包,我们把这个包上传到 Linux 系统中的 /usr/ ...

  3. docker中部署django项目~~Dockfile方式和compose方式

    1.  背景:   本机win10上,后端django框架代码与前端vue框架代码联调通过. 2.  目的:   在centos7系统服务器上使用docker容器部署该项目. 3.  方案一:仅使用基 ...

  4. linux中部署django项目

    通过Nginx部署Django(基于ubuntu) Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器 ...

  5. Django(二)如何在IIS中部署django项目

    环境配置 windows7 Django 2.0 python 3.6 wfastcgi 3.0 关键步骤 打开CGI功能 控制面板/程序和功能/打开或关闭windwos功能,如图: 安装wfastc ...

  6. Ubuntu中部署Django项目的配置与链接MySQL

    Django的简介 MVT模式的介绍创建项目的虚拟环境 本次使用的是pip安装 一.更新 sudo apt update 二.安装pip sudo apt install python3-pip 三. ...

  7. 腾讯云服务器部署 django项目整个流程

    CentOS7下部署Django项目详细操作步骤 前记:购买腾讯云服务器,配置自选,当然新用户免费体验半个月,我选择的系统是centos7系统版本, 接下来我们来看整个配置项目流程. 部署是基于:ce ...

  8. nginx + uwsgi 部署django项目

    因项目需求,需要部署django项目,这里是基础的nginx配合uwsgi部署django,后续会采用docker部署的方式 环境: centos7 python3.5.4 django2.1.4 u ...

  9. 宝塔面板成功部署Django项目流程

    宝塔面板部署Django项目完整流程 上线Django项目记录,超简单,避免无意义的踩坑! 第一步:安装python管理器 在宝塔在线面板安装“python项目管理器” 第二步:安装适配python版 ...

随机推荐

  1. java学习day1

    一.常用的DOS命令 1.打开cmd 窗口键+r --> 输入cmd --> 确认 2.常用的dos命令 dir:列出当前目录下的所有文件及文件夹 md:创建一个新的目录 rd:删除目录 ...

  2. openmvg中cmd模块解析

    ---恢复内容开始--- 在openmvg库中,定义了一个CmdLine类来定义例程的输入参数格式.源文件为.\openMVG\src\third_party\cmdLine\cmdLine.h. 先 ...

  3. laravel5.5结合bootstrap上传插件fileinput 上传图片

    引入相关js <script src="{{ asset('bootstrap-fileinput/js/fileinput.js') }}"></script& ...

  4. PHP 堆 栈 数据段 代码段 存储的理解

    对象在PHP里面和整型.浮点型一样,也是一种数据类,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢? 内存从逻辑上说大体上是分为4段,栈空间段.堆空间段 ...

  5. Python入门之 Python内置函数

    Python入门之 Python内置函数 函数就是以功能为导向,一个函数封装一个功能,那么Python将一些常用的功能(比如len)给我们封装成了一个一个的函数,供我们使用,他们不仅效率高(底层都是用 ...

  6. python学习第五十四天hashlib模块的使用

    hash算法 hash也做散列,也称为哈希,主要用于信息安全领域中加密算法,hash就是找一种数据内容和数据存放地址直接的映射关系. md5算法 md5讯息算法,广泛使用密码函数 md5算法的特点 1 ...

  7. IDEA tomcat热部署方法

    项目开发过程中,我们一般希望在修改完代码之后不重启项目即可提现出修改的结果,那么热部署项目就显得十分必要了.在idea中将项目热部署至tomcat中的方法如下: 首先打开tomcat配置界面,在ser ...

  8. VB.net删除节点,数据库,文件

    Private Sub mnuDel_Click()'删除节点Dim sKey As String'Dim sFile As StringDim oFS As FileSystemObjectDim ...

  9. Candidate Generation and LUNA16 preprocessing

    在这个kernel中,我们将讨论有助于更好地理解问题陈述和数据可视化的方法. 我还将提供有用的资源和信息的链接. 此脚本是用Python编写的. 我建议人们在桌面上安装anaconda,因为here提 ...

  10. tensorflow打印pb、ckpt模型的参数以及在tensorboard里显示图结构

    打印pb模型参数及可视化结构import tensorflow as tf from tensorflow.python.framework import graph_util tf.reset_de ...