-
Linux部署Python项目(持续更新中)
项目部署
项目部署对恩操作通常是由运维人员来进行统一管理装配的,但是对于一个开发人员来讲,基础的项目部署还是要会的。
这里我主要讲解python的项目是如何部署的,至于项目哪里来的,这就要看观众如何抉择了,可以把自己写好的项目部署,也可以......(此处省略。。。你懂的O.O)
最重要一点就是此篇随笔只是给初级的想部署自己小项目的开发人员看的,小打小闹,大神来此千万别认真,认真你就输了,这要是拿去公司部署,老板当天就能把你开掉,我毕竟不是专业运维人员,只是个草根开发。
一、部署前准备
部署有两种情况,线上部署,线下测试环境部署;线上部署就是指把自己的项目部署到远程的服务器上,类似阿里云,腾讯云或亚马逊这种服务器;线下部署就是指在自己电脑中安装一个VMware虚拟机(虚拟化技术:有效利用电脑中的未被占用的资源,高效利用服务器设备硬件资源,可以节省物理空间),VMWare让一个电脑中可以创建多个系统, 方便同时管理;
这里我讲解的是线上阿里云服务器部署,主要是现在我只有一台阿里云服务器,相对于本地的VMWare中安装Linux服务器,再阿里云中部署后,别人可以访问,更高大上一些。
我们需提前准备好一些部署所需要的东西
- 注册一个阿里云账号。购买一台阿里云服务器,推荐使用CentOS7,因为我所展示的就是CentOS7,至于为什么不推荐使用Ubuntu的原因是因为:相同的解释器相同的代码在这两个系统中不能直接运行,移植后都需要各种微调。至于服务器的购买步骤就去百度吧,对于学生来说是有学生机的,学生机相对于来说比较便宜一百元左右(至于学生这个概念阿里云上是有学生通道的认证时是看教育网上是否有你个人信息,但我和客服聊过,他说28岁以下都可以购买学生那种套餐,至于具体情况,可以和客服沟通);还有一种就是新注册用户的购买了,我个人认为还是一次性购买三年比较划算(不管是学生还是新用户);至于非新用户应该都是老司机,都懂的,可能我这部署人家都了解,只是偶尔进来看看。
- 购买域名,管局备案,公安备案,大概需要20天,不过的放心备案多久阿里云送多久,不过据说不管备案10天或者说20天,阿里云都是直接赠送30天的时长,只是听说我还真没注意。
- 购买免费赛门铁克,有一个0元一年的赛门铁克,赛门铁克是关于安全的东西,这个弄不弄都行,主要看你自己,因为看我这博客的应该都是些小白什么的来学习部署生产环境的,都是些自己编写的小项目。
- 下载Xshell和Xftp,这两个软件可以去官方网站上获取,社区版是免费的,尽量使用6版本,当然你想给人家当小白鼠也可已使用7,这两个软件前者是用来远程控制操作系统的,后者是文件传输用的,可以以图形界面的方式向远程的阿里云CentOS中上传文件。也就是把自己本地的项目上传到上面。
-
配置服务器安全组,开放80、8080、8000、443、6379、3306、这几个端口;
- 开放80端口外部才能通过Http访问服务器,
- 8080(也是一些WEB服务器的默认端口)和8000(djang默认启动端口)这两个端口主要是项目运行的时候常用到的,
- 443端口即网页浏览端口,主要是用于HTTPS服务,是提供加密和通过安全端口传输的另一种HTTP;
- 6379端口,缓存数据库redis的端口
- 如果需要使用多台服务器进行集群部署,负载均衡的时候是需要通过这些端口进行沟通访问的
二、安装Python环境
1、安装python解释器
在CentOS中默认有一个python2.7,但是对于我们现在,python2.7已经不足以满足市场需求了,一般情况除了好多大公司,尤其是金融公司的系统是比较老的,可能会出现python2.7外,几乎遇不到。我们现在开发都用python3版本,我这里使用的是python3.6.11版本和django1.11.9,这里有个坑,就是python3.6和django1版本是不会出现问题,但是当django2版本和python3.6版本一起使用时就会报一个错误:query = query.decode(errors='replace')
AttributeError: 'str' object has no attribute 'decode'
,
1. 当出现这种报错时:打开文件:vim /root/Envs/drawer/lib/python3.7/site-packages/django/db/backends/mysql/operations.py的146行修改
把:query = query.decode(errors='replace')
改成:query = query # .decode(errors='replace')
或者改成:query = query.encode(errors='replace') # 推荐
还有就是urls.py文件的路径写法也有所变化:url -----> path ; url(正则) ---->re_path
-
下载之前要先下载依赖包:
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
-
下载python解释器:
wget https://www.python.org/ftp/python/3.6.11/Python-3.6.11.tar.xz
-
解压安装:
yum install gcc -y./configure --prefix=/opt/python
make && make install
-
加入python的启动环境变量,永久生效自动补全
只需要启动时执行一条命令即可 import rlcompleter, readline readline.parse_and_bind('tab:complete') 可以将上述的代码存于~/.pythonrc.py文件中。 然后,在~/.bashrc中设置 export PYTHONSTARTUP=~/.pythonrc.py 这样,每次启动终端,bash就会设置PYTHONSTARTUP这个环境变量,然后,python启动时就会使用这个变量指定的文件中的初始化代码。 在python解释器中,输入一个变量的一部分,或者变量后面加句点,再按TAB键就可以看到自动补全的威力。
2、安装配置virtualenv和virtualenvwrapper管理工具
在使用python开发的过程中,项目一多,管理起来就很麻烦,像不同的项目以来不同的版本库的问题,或者是不想当前的开发环境下充斥着各种各样又不需要的库,由此引发一些依赖报错问题。
这种情况下,就需要通过不同的工程使用不同的虚拟环境来保持开发环境以及宿主环境的清洁。
这时,我们就要使用virtualenv,它可以帮助我们管理不同的python环境,除了virtualenv还有一款工具叫anaconda这个工具里面内置了很多包,但是对于linux中生产环境的部署通常都使用virtualenv。
两者是有区别的:
- anaconda:anaconda里面自带python解释器,也可以通过anaconda的命令安装python解释器,由此来创建不同的虚拟环境
- virtualenv:virtualenv是依赖于python解释器的,也就是说他需要通过pip3 install命令来进行下载
- 两者的创建虚拟环境的命令使用方法和操作方法很像,具体命令操作可以看作者的另一篇博客:https://www.cnblogs.com/wylshkjj/p/13122349.html
安装命令
# 指定清华源下载pip的包,这种方式是临时换源,如果使用的是阿里云的服务器,是不需要换源的,里面是默认的阿里源,如果是虚拟机的话可以自行换源达到加快下载速度的目的,至于怎么换源,我想大家都懂的,我就不多说了
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
# 升级pip工具
pip3 install --upgrade pip
安装virtualenv:pip3 install virtualenv
注:虽然virtualenv很方便,但是他有一个大缺点
就是每次开启虚拟环境之前要去虚拟环境所在目录下的bin目录下source一下activate,所以这就需要我们记住每个虚拟环境所在的目录。但是人的记忆是会出错的,甚至由于时间过长直接就忘记了虚拟环境放在哪里了。所以我们需要使用virtualenvwrapper工具进行虚拟环境的管理,其实他就是统一管理虚拟环境的目录,并且省去了source的步骤。
安装virtualenvwrapper命令:pip3 install virtualenvwrapper
至于操作命令上面的博客链接里面写了基本的使用命令
3、下载所需包软件:
-
方式一:比较麻烦,一个一个手动下载
-
方式二:导包通过pip freeze 文件名,把所需下载的包打包成文件,传到服务器中直接执行下载:
pip3 freeze > requirements.txt
1.通过命令保证环境的一致性,导出当前python环境的包 pip3 freeze > requirements.txt 这将会创建一个 requirements.txt 文件,其中包含了当前环境中所有包及 各自的版本的简单列表。 可以使用 “pip list”在不产生requirements文件的情况下, 查看已安装包的列表。 2.上传至服务器后,在服务器下创建virtualenv,在venv中导入项目所需的模块依赖 pip3 install -r requirements.txt