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; } }