部署路飞学城

Linux安装python3与virtualenv

centos7默认是装有python的,咱们先看一下

  1. #检查python版本
  2. [root@oldboy_python ~ 17:23:54]#python -V
  3. Python 2.7.5

《震惊,python2.7不再维护!》

源码编译安装python3

安装python前的库环境,非常重要

如果要正确安装python3,且使用python3的功能,需提前解决如下的环境依赖的问题

  1. 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

下载python3源码包

网址:https://www.python.org/downloads/release/python-362/

下载地址:https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz

解压缩源码包

  1. wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tar.xz
  2. xz -Python-3.6.7.tar.xz
  3. tar -xf Python-3.6.7.tar

编译且安装

进入python源码包目录,编译且安装

  1. ./configure --prefix=/opt/python3/
  2. make && make install

configure

这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如代码:

  1. ./configure --prefix=/usr

上面的意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。

同时一些软件的配置文件你可以通过指定 —sys-config= 参数进行设定。有一些软件还可以加上 —with、—enable、—without、—disable 等等参数对编译加以控制,你可以通过允许 ./configure —help 察看详细的说明帮助。

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 权限(因为要向系统写入文件)

配置python3环境变量

  1. 在/etc/profile最后一行添加
  2. export PATH=/opt/python3/bin:$PATH
  3. 然后
  4. source /etc/profile

6.1 virtualenv讲解

在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题;

亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难。

此时,我们需要对于不同的工程使用不同的虚拟环境来保持开发环境以及宿主环境的清洁。

这里,就要隆重介绍 virtualenv,一个可以帮助我们管理不同 Python 环境的绝好工具。

virtualenv 可以在系统中建立多个不同并且相互不干扰的虚拟环境。

安装配置virtualenv

  1. #指定清华源下载pip的包
  2. pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
  3. #升级pip工具
  4. pip3 install --upgrade pip
  1. 1.安装virtualenv
  2. pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
  3. 2.创建目录
  4. mkdir Myproject
  5. cd Myproject
  6. 3.创建独立运行环境-命名
  7. virtualenv --no-site-packages --python=python3 venv#得到独立第三方包的环境,并且指定解释器是python3
  8. 4.进入虚拟环境
  9. source venv/bin/activate#此时进入虚拟环境(venv)Myproject
  10. 5.安装第三方包
  11. (venv)Myproject: pip3 install django==1.9.8
  12. #此时pip的包都会安装到venv环境下,venv是针对Myproject创建的
  13. 6.退出venv环境
  14. deactivate命令
  15. 7.
  16. virtualenv是如何创建“独立”的Python运行环境的呢?原理很简单,就是把系统Python复制一份到virtualenv的环境,用命令source venv/bin/activate进入一个virtualenv环境时,virtualenv会修改相关环境变量,让命令pythonpip均指向当前的virtualenv环境。

确保开发环境的一致性

  1. 1.假设我们在本地开发环境,准备好了项目+依赖包环境
  2. 2.现在需要将项目上传至服务器,上线发布
  3. 3.那么就要保证服务器的python环境一致性
  1. 解决方案:
  2. 1.通过命令保证环境的一致性,导出当前python环境的包
  3. pip3 freeze > requirements.txt
  4. 这将会创建一个 requirements.txt 文件,其中包含了当前环境中所有包及 各自的版本的简单列表。
  5. 可以使用 pip list”在不产生requirements文件的情况下, 查看已安装包的列表。
  6. 2.上传至服务器后,在服务器下创建virtualenv,在venv中导入项目所需的模块依赖
  7. pip3 install -r requirements.txt

6.2 virtualenvwrapper讲解

virtualenv 的一个最大的缺点就是:

每次开启虚拟环境之前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate,这就需要我们记住每个虚拟环境所在的目录。

并且还有可能你忘记了虚拟环境放在哪。。。

  • 一种可行的解决方案是,将所有的虚拟环境目录全都集中起来,例如/opt/all_venv/,并且针对不同的目录做不同的事。
  • 使用virtualenvwrapper管理你的虚拟环境(virtualenv),其实他就是统一管理虚拟环境的目录,并且省去了source的步骤。

安装virtualenvwrapper

  1. #安装
  2. pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenvwrapper
  3. #设置环境变量,每次开机加载virtualevnwrapper
  4. export WORKON_HOME=~/Envs #设置virtualenv的统一管理目录
  5. export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' #添加virtualenvwrapper的参数,生成干净隔绝的环境
  6. export VIRTUALENVWRAPPER_PYTHON=/opt/python3/bin/python3 #指定python解释器
  7. source /opt/python34/bin/virtualenvwrapper.sh #执行virtualenvwrapper安装脚本
  8. 读取文件,使得生效,此时已经可以使用virtalenvwrapper

管理虚拟环境的命令

virtualenvwrapper 提供环境名字的tab补全功能。
当有很多环境, 并且很难记住它们的名字时,这就显得很有用。

  1. 创建一个虚拟环境:
  2. mkvirtualenv my_django115
  3. 这会在 ~/Envs 中创建 my_django115 文件夹。
  4. 激活虚拟环境my_django115
  5. workon my_django115
  6. 也可以手动停止虚拟环境
  7. deactivate
  8. 删除虚拟环境,需要先退出虚拟环境
  9. rmvirtualenv my_django115
  10. lsvirtualenv
  11. 列举所有的环境。
  12. cdvirtualenv
  13. 导航到当前激活的虚拟环境的目录中,比如说这样您就能够浏览它的 site-packages 
  14. cdsitepackages
  15. 和上面的类似,但是是直接进入到 site-packages 目录中。
  16. lssitepackages
  17. 显示 site-packages 目录中的内容。
 

 

部署路飞学城

项目准备,前后端代码

  1. 路飞学城django代码
  2. https://files.cnblogs.com/files/pyyu/luffy_boy.zip
  3. vue代码
  4. https://files.cnblogs.com/files/pyyu/07-luffy_project_01.zip

一、将代码搞到服务器上

  1. linux上直接下载
  2. wget https://files.cnblogs.com/files/pyyu/luffy_boy.zip
  3. wget https://files.cnblogs.com/files/pyyu/07-luffy_project_01.zip
  4. window上下载,通过lrzsz,或者xftp传输到linux服务器上

二、先从前端vue搞起

要在服务器上,编译打包vue项目,必须得有node环境

  1. 下载node二进制包,此包已经包含node,不需要再编译
  2. wget https://nodejs.org/download/release/v8.6.0/node-v8.6.0-linux-x64.tar.gz
  3. 解压缩
  4. tar -zxvf node-v8.6.0-linux-x64.tar.gz
  5. 进入node文件夹
  6. [root@web02 opt]# cd node-v8.6.0-linux-x64/
  7. [root@web02 node-v8.6.0-linux-x64]# ls
  8. bin CHANGELOG.md etc include lib LICENSE README.md share
  9. [root@web02 node-v8.6.0-linux-x64]# ls bin
  10. node npm npx

将node命令,添加至linux环境变量,修改/etc/profile,写入

  1. PATH=$PATH:/opt/node-v8.6.0-linux-x64/bin

读取文件,生效PATH

  1. source /etc/profile

测试path

  1. [root@web02 node-v8.6.0-linux-x64]# node -v
  2. v8.6.0
  3. [root@web02 node-v8.6.0-linux-x64]# npm -v
  4. 5.3.0

node环境有了,安装node模块,以及打包node项目

  1. 进入vue源码目录
  2. cd 07-luffy_project_01/
  3. 安装vue模块,默认去装package.json的模块内容,如果出现模块安装失败,手动再装
  4. npm install
  5. 此时注意,你本地写的vue代码,接口很可能连接的服务器地址有问题,注意Axios.POST提交的地址,一定得发送给django应用(如果用了nginx,就发送给nginx的入口端口)
  6. 超哥这里为了试验方便,将vue项目和django项目放在了一台服务器,通过nginx反向代理功能(8000端口),转发vue请求给django(9000)
  7. 准备编译打包vue项目,替换配置文件所有地址,改为服务器地址
  8. sed -i 's/127.0.0.1/192.168.119.12/g' /opt/07-luffy_project_01/src/restful/api.js
  9. 此时打包vue项目,生成一个dist静态文件夹
  10. npm run build
  11. 检查dist文件夹
  12. [root@web02 07-luffy_project_01]# ls dist/
  13. index.html static

至此vue代码就结束了,只需要让nginx配置,找到vue的index.html首页文件即可

nginx这里不做解释,编译安装好即可

  1. server {
  2.      #用户访问域名或者ip,默认是nginx的80端口
  3. listen 80;
  4. server_name 192.168.119.12;
  5.      #url匹配 / 也就是请求地址是192.168.119.12时,进入此location,返回vue的dist下index.html路飞学城首页
  6. location / {
  7. root /opt/07-luffy_project_01/dist;
  8. index index.html;
  9. }

三、配置后端代码

解决虚拟环境,保证项目干净隔离

激活虚拟环境venv1,在虚拟环境下,安装路飞项目所需的依赖模块

  1. [root@web02 opt]# cat requirements.txt
  2. certifi==2018.11.29
  3. chardet==3.0.4
  4. crypto==1.4.1
  5. Django==2.1.4
  6. django-redis==4.10.0
  7. django-rest-framework==0.1.0
  8. djangorestframework==3.9.0
  9. idna==2.8
  10. Naked==0.1.31
  11. pycrypto==2.6.1
  12. pytz==2018.7
  13. PyYAML==3.13
  14. redis==3.0.1
  15. requests==2.21.0
  16. shellescape==3.4.1
  17. urllib3==1.24.1
  18. uWSGI==2.0.17.1

这个路飞代码数据库用的是sqllite,不需要配置数据库了

购物车用都的是redis,因此要启动服务器的redis-server服务端

  1. redis-server /etc/redis.conf
  2. ps -ef|grep redis
  3. redis-server *:6379

启动路飞后端

[uwsgi]
# Django-related settings
# the base directory (full path)
chdir           = /opt/luffy_boy
# Django's wsgi file
module          = luffy_boy.wsgi
# the virtualenv (full path)
home            = /opt/venv1
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 1
# the socket (use the full path to be safe
socket          = 0.0.0.0:9000
# clear environment on exit
vacuum          = true

 

  1. (venv1) [root@web02 opt]# uwsgi --ini luffy_boy/uwsgi.ini

四、配置nginx,结合前后端

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  192.168.119.12;
        location / {
        root /opt/07-luffy_project_01/dist;
        index index.html;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
           root   html;
        }
    }
server {
listen       8000;
        server_name  192.168.119.12;
        location / {
        uwsgi_pass 0.0.0.0:9000;
        include /opt/nginx/conf/uwsgi_params;
        }
        location /static {
        alias /opt/static;
}
}
}

 

架构图


项目展示

测试账号密码

  1. alex
  2. alex3714

目前代码功能演示,演示流程:

  1. 登录alex账号
  2. 选择免费课程,django框架学习
  3. 添加课程到购物车,检查alex账号的购物车记录,添加成功后再redis有数据


 

 

posted @ 2022-08-07 12:57  silencio。  阅读(46)  评论(0编辑  收藏  举报