美文网首页Django
阿里云 CentOS7部署Django项目

阿里云 CentOS7部署Django项目

作者: andpy | 来源:发表于2017-11-01 11:49 被阅读39次

    项目的部署基于阿里云CnetOS7 + mysql5.7 + python3 + xadmin + uwsgi + nginx

    CentOs同时安装python2和python3

    #查看python的执行位置
    which python
    #通配符查看
    ll python*  列出所有python相关的文件目录等
    #安装依赖,使用yum安装
    yum -y groupinstall "Development tools"
    yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
    #下载python3的安装包
    wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz
    #创建安装目录
     mkdir /usr/local/python3 
    #解压安装包
    tar -zxvf Python-3.6.3.tgz
    #进入解压目录
    cd Python-3.6.3
    #配置
    ./configure --prefix=/usr/local/python3
    #编译
    make && make install
    #创建软链接
    ln -s /user/local/python3/bin/python3 /usr/bin/python3
    #pip创建软链接
    ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
    

    安装mysql

    安装的方式使用 rpm包方式安装:

    #下载安装mysql
    wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar
    #解压安装包
    tar -vxf mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar
    #查看mysql相关
    whereis mysql 
    #移除mysql相关的lib(可选项操作,建议操作)
    yum remove mysql-libs
    #安装mysql rpm相关的包
    rpm -ivh mysql-community-common-5.7.18-1.el7.x86_64.rpm
    rpm -ivh mysql-community-libs-5.7.18-1.el7.x86_64.rpm
    rpm -ivh mysql-community-client-5.7.18-1.el7.x86_64.rpm
    rpm -ivh mysql-community-libs-compat-5.7.18-1.el7.x86_64.rpm
    rpm -ivh mysql-community-server-5.7.18-1.el7.x86_64.rpm
    #这个在后面安装 msyqlclient需要依赖的包
    rpm -ivh mysql-community-devel-5.7.18-1.el7.x86_64.rpm
    #安装完成之后,启动服务
    service mysqld start 
    

    至此mysql安装完成
    配置mysql相关:修改mysql的密码

    #登录mysql
    mysql -u root -p  #在此时需要密码,密码隐藏在log中
    #查找默认随机密码
    grep 'password' /var/log/mysqld.log  
    #修改密码,获取随机密码之后,登录修改密码(由于mysql密码策略限制,密码需要包含大小写数字,特殊字符)
    alter user 'root@localhost' identified by 'xxxxx';
    #修改mysql的密码策略(以下操作可选项),配置之后,可以设置简单密码
    vim /etc/my.cnf 
    '#密码策略关闭'
        plugin-load =validate_password.so
        validate_password=OFF
    #再次进入mysql查看信息
    show databases
        use information_schema  (密码策略相关的数据库)
        show tables 
            select PLUGIN_NAME,PLUGIN_STATUS from PLUGINS;
            validate_password   #次验证已经变为disable了
    #进行了以上的操作之后,可以查看设置简单的密码了
    alter user 'root@localhost' identified by 'xxxxx';
    #重启mysql,此时相关的策略已经生效了
    mysql service mysqld restart 
    

    配置mysql远程登录:(可选操作)

    #判断网络是否通常
    ping ip地址
    #查看mysql的状态
    service mysqld status
    #查看mysql的进程
    ps -aux | grep mysql
    #登录mysql
    mysql -u -p 
    #查看相关信息
    show databases 
        use mysql 
        show tables
        select host,user from user  #查看具体信息
    #授予root所有的权限,此密码为远程登录密码
    grant all privileges on *.* to 'root' @'%' identified by '123456'  with grant option;
    #此时可以通过navcat等客服端测试,可以访问该数据库了
    
    #注意,某系时候,可能连不上,需要关闭防火墙
    
    #查看防火墙(因防火墙开启,可能导致连接失败)
    firewall -cmd --state
    #停止防火墙服务(centos7)
    systemctl stop firewall.service 
    #(centos 停止防火墙)
    service iptables stop 
    

    在centos下新建python虚拟环境

    使用virtualenv:

    #安装 virtualenv
    pip3 install virtualenv
    #找到虚拟环境的安装目录
    find / -name virtualenv 
    #新建虚拟环境,会在当前目录生成一个文件夹
    /usr/local/python3/bin/virtualenv py3_test
    #进入虚拟环境(命令行前面出现一个符号)
    cd py3_test
    source bin/activate
    #退出虚拟环境
    deactivate
    

    使用virtualenvwrapper:这个是virtualenv的扩展工具,使用更为方便

    #安装virtualenvwrapper
    pip3 install virtualenvwrapper
    #新建放置所有虚拟环境的目录
    mkdir py_vm
    #设置环境变量
    vim /etc/profile 
    export WORKON_HOME=/root/py_vm (绝对路径)
    source /usr/local/python3/bin/virtualenvwrapper.sh
    

    导出依赖包

    #在虚拟环境中,导出依赖包
    pip freeze >requirements.txt
    #导出的默认位置
    C:\Users\Administrator\requirements.txt
    

    安装依赖包

    #安装项目依赖
    pip3 install -r requirements.txt
    

    注意:
    安装pip3 install mysqlclient 时会出错: mysql_config: command not found

    #需要安装mysql-dev
    rpm -ivh mysql-community-devel-5.7.18-1.el7.x86_64.rpm
    #在次安装即可
    pip3 install mysqlclient
    

    上传项目到服务器

    1. 使用git 方便管理(方便管理,开发,正式,修复分支等)
    2. 使用war包,防止上传的时候,文件丢失

    测试运行项目

    修改项目 setting.py配置文件

    #修改数据库配置,设置为127.0.0.1  设置为ifconfig查出来的地址,报权限不行
    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_pua',
        'USER': 'root',
        'PASSWORD': 'xxxxx',
        'HOST': '127.0.0.1',
        'OPTONS': {
            'init_command': "SET storage_engine='INNODB'",
            'charset': 'utf8mb4',
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        }
    }
    }
    #在 manage.py目录中 数据库表的初始化操作,如果没有权限记得添加sudo
    python3 manage.py makemigrations
    python3 manage.py migrate
    #查看ip地址
    ifconfig
    #运行项目,此处的ip地址为上面查出来的地址
    sudo python3 manage.py runserver 172.19.01.146:8000
    #远程访问项目
    通过阿里云分配的公网地址,进行访问验证即可
    

    以上的操作,跟开发的过程一样,可以完整的跑起来,并且没有异常就可以开始项目的部署了

    安装uwsig服务器

    #安装uwsgi服务器
    pip3 install uwsgi
    #创建软件链接
    ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
    #在项目目录,通过uwsgi启动项目
    uwsgi --http 172.17.91.146:8001  --file DRF_SHOP/wsgi.py --static-map=/static=static
    #通过地址访问,验证,此时呢,静态资源还没有加载
    

    通过配置文件启动uWSGI

    编写配置文件:

    [uwsgi]
    # 项目目录,该目录为settings.py所在的目录
    chdir=/opt/django_pua/django_pua/
    # 启动uwsgi的用户名和用户组
    uid=root
    gid=root
    # 指定项目的application,该目录为wsgi.py所在的目录
    module=django_pua.wsgi:application
    # 指定sock的文件路径
    socket=/opt/script_pua/uwsgi.sock
    # 启用主进程
    master=true
    # 进程个数
    workers=5
    pidfile=/opt/script_pua/uwsgi.pid
    # 自动移除unix Socket和pid文件当服务停止的时候
    vacuum=true
    # 序列化接受的内容,如果可能的话
    thunder-lock=true
    # 启用线程
    enable-threads=true
    # 设置自中断时间
    harakiri=30
    # 设置缓冲
    post-buffering=4096
    # 设置后台启动
    daemonize=/opt/script_pua/uwsgi.logi
    

    通过配置文件启动:

    #通过该配置文件启动
    uwsgi --ini uwsgi.ini
    #查看进程相关的信息
    ps aux |grep uwsgi
    #停掉uwsig
    uwsgi --stop uwsgi.pid
    

    安装nginx

    #配置安装源
    vim /etc/yum.repos.d/nginx.repo
    #添加以下语句
    [nginx]
    name=nginx repo
    #下面这行centos根据你自己的操作系统修改比如:OS/rehel
    #7是你Linux系统的版本,可以通过URL查看路径是否正确
    baseurl=http://nginx.org/packages/centos/7/$basearch/
    #gpgcheck是gpg验证是否开启的选项,1是开启,0是不开启,一般情况可以关掉
    gpgcheck=0
    enabled=1
    
    #安装nginx
    yum -y install nginx
    

    nginx配置文件

    编写配置文件放置到项目目录下:在配置文件放置到nginx配置文件目录下 /etc/nginx/conf.d/

    #添加nginx配置文件
    vim django_pua.conf
    #编写一下内容
     server {
                    listen 80;
                    #该地址为 你的阿里云服务ifconfig查出来的地址
                    server_name 10.129.205.183 ;
                    access_log  /var/log/nginx/access.log  main;
                    charset  utf-8;
                    gzip on;
                    gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;
    
                    error_page  404           /404.html;
                    error_page   500 502 503 504  /50x.html;
                    # 指定项目路径uwsgi
                    location / {
                        include uwsgi_params;
                        uwsgi_connect_timeout 30;
                        #该路径uwsgi配置文件中指定sock的路径
                        uwsgi_pass unix:/opt/project_teacher/script/uwsgi.sock;
                    }
                    # 指定静态文件路径
                    location /static/ {
                        #这个路径是在后续操作中,收集项目静态资源的路径 python3 manage.py collectstatic 该命令收集资源的文件夹的路径
                        alias  /opt/project_teacher/teacher/static/;
                        index  index.html index.htm;
                    }
    
    }
    #在settings.py中, 添加配置,主要是把项目的静态资源收集,位置在项目目录下
    STATIC_ROOT = os.path.join(BASE_DIR, "static_all")
    #执行收集命令,在 django_pua.config 配置文件下 静态资源的路径
    python3 manage.py collectstatic
    

    启动nginx:

    #启动nginx
    service nginx start
    #停止nginx
    service nginx stop
    #重启nginx
    service nginx restart
    

    至此可以通过浏览器访问验证

    编写自动化脚本

    进入到 /etc/init.d/
    vi manage_pua

    #! /bin/sh
    # chkconfig: 345 85 15
    # 上面一行注释:哪些Linux级别需要启动manage_pua(3,4,5);启动序号(85);关闭序号(15)。
    # description: manage script is the django_pua daemon.
    # Author: xxxx
    # 指定项目目录
    PROJECT_DIR="/opt/django_pua"
    # 指定脚本目录在哪里
    SCRIPTS_DIR="/opt/script_pua"
    # 描述
    DESC="django_pua daemon"
    # 名称
    NAME="django_pua"
    # 脚本名称
    SCRIPT_FILENAME="manage_pua.sh"
    # 脚本目录名称
    SCRIPTNAME=`pwd`/$SCRIPT_FILENAME
    
    # PID
    PID="uwsgi.pid"
    
    # 启动函数
    d_start(){
    # 进入到项目目录
    cd $SCRIPTS_DIR
    # 判断这个PID是否存在
    if [ ! -f $PID ];then
    echo -e "\n\033[34m$NAME项目启动中........\033[0m"
    # 如果不存在执行
    uwsgi --ini uwsgi.ini
    killall nginx
    /etc/init.d/nginx start
    # 自动收集静态文件
    cd $PROJECT_DIR && python3 manage.py collectstatic --noinput
    echo -e "\n\033[32m$NAME 项目启动完成........\033[0m"
    exit 0
    fi
    echo -e "\n\033[33m$NAME 项目已启动请勿重复启动\033[0m"
    }
    # 关闭函数
    # 关闭项目
    d_stop(){
    # 进入脚本目录
    cd $SCRIPTS_DIR
    # 判断这个pid文件是否存在
    if [ ! -f "uwsgi.pid" ];then
    # 这个项目已经关闭了
    echo -e "\n\033[33m$NAME 项目已经关闭了请先启动\033[0m"
    fi
    echo -e "\n\033[34m$NAME 项目关闭中........\033[0m"
    echo -e "\nStop $DESC: $NAME"
    # 如果没有关闭
    uwsgi --stop uwsgi.pid
    # 是否停掉Nginx根据实际需要来操作~~!因为Nginx有对静态文件缓存[注意]
    killall nginx
    /etc/init.d/nginx start
    echo -e "\n\033[32m$NAME 项目关闭完成........\033[0m"
    }
    
    d_restart(){
    d_stop
    sleep 1
    d_start
    }
    
    case "$1" in
    start)
    echo -e "\nstarting $DESC: $NAME"
    d_start
    ;;
    stop)
    echo -e "\nStop $DESC: $NAME"
    d_stop
    ;;
    restart)
    echo -e "\nRestart $DESC: $NAME"
    d_restart
    ;;
    *)
    echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
    exit 3
    ;;
    esac
    
    # 添加服务
    chkconfig --add manage_pua
    # 开机启动
    [root@localhost init.d]# chkconfig manage_pua on 
    # 查看启动级别
    [root@localhost init.d]# chkconfig --list manage_pua
    manage_teacher  0:off   1:off   2:on    3:on    4:on    5:on    6:off
    
    # 然后就可以通过命令
    [root@localhost ~]# service manage_pua start
    [root@localhost ~]# service manage_pua stop
    [root@localhost ~]# service manage_pua restart
    

    此文章参考这个课程来学习的 http://edu.51cto.com/course/9037.html?source=so

    相关文章

      网友评论

        本文标题:阿里云 CentOS7部署Django项目

        本文链接:https://www.haomeiwen.com/subject/etwwpxtx.html