django环境部署 crm和路飞学城

环境依赖

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
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
vi /etc/yum.repos.d/MariaDB.repo
# MariaDB 10.2.4 CentOS repository list - created 2017-05-05 16:13 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1


yum -y install MariaDB-server MariaDB-client


MariaDB 安装完毕后,立即启动数据库服务守护进程。

systemctl start mariadb

安装python

#下载-安装-编译-升级pip包,安装一下bs4
#wget https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tar.xz
tar Jxvf Python-3.6.7.tar.xz
cd Python-3.6.7
./configure -prefix=/usr/local/python3.6
make && make install
ln -s /usr/local/python3.6/bin/python3.6 /usr/local/bin/python3
ln -s /usr/local/python3.6/bin/pip3.6 /usr/local/bin/pip3

PATH=$PATH:'/opt/07-luffy_project_01/node-v8.6.0-linux-x64/bin:/usr/local/python3.6/bin'

cat virtualenv.sh  环境

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
pip3 install --upgrade pip
#安装
pip3 install virtualenv
#2.创建目录
mkdir Myproject
cd Myproject
#3.创建独立运行环境-命名
virtualenv --no-site-packages --python=python3  venv
#4.进入虚拟环境
source venv/bin/activate #此时进入虚拟环境(venv)Myproject
#安装第3方
pip3 install django==1.9.8
#退出
deactivate

#pip3 freeze > requirements.txt
#pip3 install -r requirements.txt

#安装virtualenvwrapper 可以归类

[root@localhost ~]# cat virtualenvwrapper.sh
pip3 install virtualenvwrapper
cat >> ~/.bashrc <<EOF
#写入以下两行代码
export WORKON_HOME=~/Envs   #设置virtualenv的统一管理目录
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'   #添加virtualenvwrapper的参数,生成干净隔绝的环境
export VIRTUALENVWRAPPER_PYTHON=/usr/local/python3/bin/python3.6  #指定python解释器
source /usr/local/python3/bin/virtualenvwrapper.sh #执行virtualenvwrapper安装脚本 
EOF
source ~/.bashrc

##### create_virtualenvwrapper 创建
[root@localhost ~]# cat create_virtualenvwrapper.sh
#创建一个虚拟环境
mkvirtualenv my_django115
#在虚拟环境上工作:激活虚拟环境my_django115
workon my_django115
#也可以手动停止虚拟环境
#deactivate
echo "rmvirtualenv my_django115 删除"
lsvirtualenv #列表所有先

crm项目部署
1.nginx + uwsgi + django + 虚拟环境 + supervisor + mysql

iptables -F #清空规则
systemctl stop firewalld#关闭防火墙
systemctl  disable firewalld #禁止开机

2.django的启动方式 python3 manage.py runserver 为什么不能在生产环境用?

django只是一个web逻辑框架,它通过python3 manage.py runserver命令启动的socket服务端
是借助python内置的wsgi框架 wsgiref框架实现的
它是一个单机模块,单进程模块,性能很低

因此在线上需要借助通过c语言编写的uwsgi这个web服务器软件,启动django

sanic 旋风小子
由低到高的性能框架
djano
flask
tornado
sanic

为什么要用nginx 和uwsgi?
nginx 可以解决uwsgi的静态文件问题,并且支持高并发请求,还能限流,保障后台服务器安全等等

为什么要用uwsgi
因为uwsgi支持多进程 多线程的方式,性能很高,启动django性能更好,但是uwsgi不解析django的静态文件

我们以后会收集所有的django项目静态文件,丢给nginx去处理

5.准备crm代码

6.准备一个新的虚拟环境,去启动crm,使用virtualenvwrapper创建新的虚拟环境

    1.解决虚拟环境依赖的问题,也就是保障本地开发环境和线上一致性的问题
    在windows本地 通过
    pip3 freeze > requirements.txt
    就能将    python3解释器中所有的模块导出到这个文件中 
    

    2.将这个 requirements.txt  文件传输到服务器上,进行安装,就可以自动解决所有模块问题
    pip3 install -r requirements.txt  
    
7.使用uwsgi启动crm项目
确保进入虚拟环境,然后安装uwsgi

workon nginx_crm

下载uwsgi
pip3 install uwsgi 


8.使用uwsgi命令启动django项目
uwsgi支持热加载的启动方式命令如下
uwsgi --http :8000 --module mysite.wsgi --py-autoreload=1 


uwsgi --http :8088 --module Crm_Project.wsgi 
    --http指定http协议启动在 8088端口
    --module 找到项目第二层的目录,里面的wsgi.py文件

如果你想启动一个http页面,提供测试访问,就用--http参数




如果你结合了nginx反向代理,必须用--socket参数 
uwsgi --socket :8000 --module Crm_Project.wsgi

由于参数过多,这里引入配置文件的概念 叫做 uwsgi.ini     my.cnf    nginx.conf 


#正式启动环境在这里
#正式启动环境在这里
#正式启动环境在这里
#正式启动环境在这里
#正式启动环境在这里
#正式启动环境在这里


启动crm的配置文件如下 uwsgi.ini内容如下


[uwsgi]
# Django-related settings
# the base directory (full path)
#填写项目的绝对路径(第一层路径)
chdir           = /opt/Crm_Project
# Django's wsgi file
#填写crm第二层目录下的wsgi.py文件的路径
module          = Crm_Project.wsgi
# the virtualenv (full path)
#填写虚拟环境的绝对路径
home            = /root/Envs/nginx_crm

# process-related settings
# master
master          = true
# maximum number of worker processes
#基于uwsgi的多进程,根据cpu来优化 
processes       = 4
# the socket (use the full path to be safe

#如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写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


此时通过uwsgi --ini  uwsgi.ini方式启动代码



10.配置crm收集所有的crm静态文件
编辑项目的settings.py 写入如下参数
STATIC_ROOT= '/opt/crmstatic'


11.执行命令,收集crm所有的静态文件
python3 manage.py collectstatic

#此时后端的配置完毕!!!!开始搞nginx 
#此时后端的配置完毕!!!!开始搞nginx 
#此时后端的配置完毕!!!!开始搞nginx 
#此时后端的配置完毕!!!!开始搞nginx 
#此时后端的配置完毕!!!!开始搞nginx 


sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

12.配置nginx,一是支持反向代理,二是支持静态文件加载
修改nginx.conf 

代码如下
        #当用户访问 www.s18dnf.com的时候,就进入这个虚拟主机
        location / {
        uwsgi_pass  0.0.0.0:8000;#如果是负载均衡就写负载均衡的名字
        include uwsgi_params;
        }

        #这个location是解决crm的静态文件的问题的
location /static  {
#alias参数 就是将/static转化为/opt/crmstatic ,也就找到了我们所有的静态文件
alias /opt/crmstatic;
}

##########负载均衡
upstream mycrm{
server 0.0.0.0:8000;
}

    #gzip  on;
       server  {
        listen 80;
        server_name  127.0.0.1;
        location  /  {
                     include uwsgi_params;
             uwsgi_pass  mycrm;
            #root   /opt/s18hanju/;
            index index.html;
        }
               location /static  {
#alias参数 就是将/static转化为/opt/crmstatic ,也就找到了我们所有的静态文件
alias /opt/crmstatic;
}
    }



13.重启nginx 查看反向代理效果



14.配置supervisro工具
注意要退出虚拟环境
注意要退出虚拟环境
注意要退出虚拟环境

    1.安装easy_install 
    pip3是python3的软件包管理工具
    easy_install 是python2的软件包管理工具
    
    yum install python-setuptools

    2.安装supervisor
    easy_install supervisor
    
    3.创建supervisor的配置文件
    
    echo_supervisord_conf >  /etc/supervisor.conf 

    4.修改supervisor的配置文件,添加启动uwsgi的命令
    
    supervisor其实就是帮咱们执行了,需要手动执行的命令而已 
    vim /etc/supervisor.conf
    写入如下内容,在最底部写
[program:s18crm]
command=/root/Envs/nginx_crm/bin/uwsgi  --ini /opt/Crm_Project/uwsgi.ini
stopasgroup=true
killasgroup=true



    5.测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出
    5.测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出
    5.测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出
    5.测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出
    
supervisord -c  /etc/supervisor.conf   #这是启动supervisor服务端命令

supervisorctl -c /etc/supervisor.conf     #这是supervisor客户端管理命令

    6.学习supervisor的命令
    
    status s18crm #查看状态
    start s18crm  #启动任务
    stop  s18crm #停止任务
    
    start all  
    stop  all  #启停所有的任务

####################路飞学城#############
路飞学城部署 vue + nginx + uwsgi + django + mysql + redis(就是一个key - value型数据库,缓存型数据库,内存型数据库)

vue + django 前后端分离的项目

js html css bootstrap jquery

部署方法如下
1.前端vue部署 
1.下载vue代码,解压缩
wget https://files.cnblogs.com/files/pyyu/07-luffy_project_01.zip

unzip 07-luffy_project_01.zip 


2.配置node环境,去打包编译vue代码

下载node的代码包
    wget https://nodejs.org/download/release/v8.6.0/node-v8.6.0-linux-x64.tar.gz
解压缩node代码包
tar -zxvf node-v8.6.0-linux-x64.tar.gz
配置node的PATH环境变量即可
修改PATH生效即可

3.验证node是否正确配置(node就是如同python解释器   npm就是如同pip软件包管理工具)
node -v 
npm -v   

4.修改vue的代码文件
因为vue需要向后台发起请求,找到uwsgi
我们的架构是将uwsgi隐藏在nginx后面

所有,vue(端口80)首先找的是nginx(反向代理,端口是9000),然后nginx(反向代理,端口是9000)反向代理给uwsgi (后端地址,9001) 

修改方式如下
api.js路径如下/opt/s18luffy/07-luffy_project_01/src/restful
#这里更改你自己的服务器ip地址
sed -i  "s/127.0.0.1:8000/192.168.226.128:9000/g"  api.js 

    sed 是linux处理字符串的命令
    -i 是将结果替换到文件
    "s/127.0.0.1:8000/192.168.226.128:9000/g"   #解释  s是替换模式  /你想替换的内容/你想替换的结果/   g是全局替换 
    api.js  你想修改操作的文件
    
    
5.进行打包vue,生成静态文件夹 dist
确保你在vue的代码文件夹 
npm install  #解决vue代码所需的模块依赖  

npm run build    #进行编译打包


6.当vue打包正确完成后,生成一个dist静态文件夹,此时就给丢给nginx去处理啦!!!

#这里有个坑 每次更爱 都需要 npm install

2.后端uwsgi部署
    1.下载路飞代码
    wget  https://files.cnblogs.com/files/pyyu/luffy_boy.zip
    2.安装新的虚拟环境,解决环境依赖问题 ,可以用requirements.txt解决依赖问题
vim requirements.txt  #打开,编辑写入如下模块依赖包信息
    
certifi==2018.11.29
chardet==3.0.4
crypto==1.4.1
Django==2.1.4
django-redis==4.10.0
django-rest-framework==0.1.0
djangorestframework==3.9.0
idna==2.8
Naked==0.1.31
pycrypto==2.6.1
pytz==2018.7
PyYAML==3.13
redis==3.0.1
requests==2.21.0
shellescape==3.4.1
urllib3==1.24.1
uWSGI==2.0.17.1
    
    3.安装这个文件 requirements.txt
    pip3 install -i https://pypi.douban.com/simple -r requirements.txt 

    4.使用uwsgi去启动路飞学城后端
    使用uwsgi.ini配置文件方式启动,内容如下
[uwsgi]
# Django-related settings
# the base directory (full path)
#填写项目的绝对路径(第一层路径)
chdir           = /opt/s18luffy/luffy_boy
# Django's wsgi file
#填写crm第二层目录下的wsgi.py文件的路径
module          = luffy_boy.wsgi
# the virtualenv (full path)
#填写虚拟环境的绝对路径
home            = /root/Envs/s18luffy

# process-related settings
# master
master          = true
# maximum number of worker processes
#基于uwsgi的多进程,根据cpu来优化 
processes       = 4
# the socket (use the full path to be safe

#如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写socket参数
socket          = 0.0.0.0:9001  

#如果你没用nginx,想直接通过浏览器测试后端,使用http 
#http = 0.0.0.0:9001

# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true
    
    5.用supervisor也去管理路飞的后台
        [program:s18luffy]
        command=/root/Envs/s18luffy/bin/uwsgi  --ini  /opt/s18luffy/luffy_boy/uwsgi.ini
        stopasgroup=true
        killasgroup=true
    

3.nginx反向代理转发
修改nginx.conf内容如下


虚拟主机1
 server {
        #第一个虚拟主机,监听的80端口
        listen       80;
        server_name  192.168.226.128;
        location / {
            root /opt/s18luffy/07-luffy_project_01/dist;
            index index.html;
        }
}

虚拟主机2

server {
    listen 9000;
    server_name  192.168.226.128;
    location  / {
        uwsgi_pass 0.0.0.0:9001;
        include uwsgi_params;
    }

}

重启nginx生效



4.启动redis,路飞学城用的是sqllite,不需要mysql

yum install epel-release
yum install redis -y  #安装命令
systemctl start redis  

redis登录命令
redis-cli  登录命令
登录后输入 ping 返回一个pong代表正确启动


5.windows访问路飞学城首页,查看课程列表 ,进行alex账户登录
账户:  alex 
密码:  alex3714 

登录后,添加django课程信息后,可以查看购物车信息,代表正确启动路飞学城

#################如果使用负载均衡

upstream mycrm{
server 0.0.0.0:8000;
}
upstream lufei{
server 0.0.0.0:9001;
}

    #gzip  on;
       server  {
        listen 81;
        server_name  127.0.0.1;
        location  /  {
                     include uwsgi_params;
             uwsgi_pass  mycrm;
            #root   /opt/s18hanju/;
            index index.html;
        }
               location /static  {
             #alias参数 就是将/static转化为/opt/crmstatic ,也就找到了我们所有的静态文件
            alias /opt/crmstatic;
}
    }

 server {
        #第一个虚拟主机,监听的80端口
        listen       80;
        server_name  192.168.12.170;
        location / {
            root /opt/07-luffy_project_01/dist;
            index index.html;
        }
}
server {
    listen 9000;
    server_name 192.168.12.170;
    location  / {
        uwsgi_pass 127.0.0.1:9001;
        include uwsgi_params;
    }

}

 

posted @ 2019-04-07 22:39  崽崽1573  阅读(364)  评论(0编辑  收藏  举报