zoukankan      html  css  js  c++  java
  • 在裸机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/
    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。关于两者有什么差别我还没怎么学习。

    关于数据库的相关配置会在另外一篇文章中具体写一下~

  • 相关阅读:
    SQLAlchemy(2) -- SQLAlchemy的安装
    SQLAlchemy(1) -- Python的SQLAlchemy和ORM
    http-proxy-middleware及express实现反向代理
    Vue项目中的http请求统一管理
    vue.js中如何使用scss
    Vue 相关开源项目库汇总
    Vue UI组件库
    route按需加载的3种方式:vue异步组件、es提案的import()、webpack的require.ensure()
    Npoi Web 项目中(XSSFWorkbook) 导出出现无法访问已关闭的流
    vuejs 和 element 搭建的一个后台管理界面
  • 原文地址:https://www.cnblogs.com/paulwhw/p/11122400.html
Copyright © 2011-2022 走看看