搭建跨平台的统一python开发环境:
使用开发环境的好处:
可不用在服务器上直接修改源代码---写的代码首先得入版本库(放git或giitlab中),在本地写代码提交到git中.然后在服务器上git pull把代码拉上来运行。
项目大层级目录多用vim写不利于管理项目--用ide管理可组织代码结构,甚至能自动import,还可做到集成的功能:如可直接在ide中运行我的服务,甚至解释器使用远程在本地进行调试(如果在本地写python脚本的话要在本地安装一python脚本,那还得各种依赖--这就麻烦)。
不管何种开发语言,目前用的比较多的开发环境基本就是Vagrant+VirtualBox搭建的虚拟开发环境,这种开发环境的好处就是一次搭建处处可用,各个平台和系统都可以使用。开发团队中,可以自己制作一个box,让团队的成员方便安装,保证每个人的开发环境都是一致的。
Vagrant可以创建一些共享目录,让物理机和虚拟机使用共享的目录,虚拟机只提供开发环境。这样的话,开发环境随处可用。代码目录只要在物理机上共享就可以使用这套开发环境。
这里使用的是win7系统,可能会出现powershell过低的情况,所以需要先检查本机的powershell版本:
Windows + R 输入powershell回车,打开命令行窗口,输入$PSVersionTable ,查看powershell版本号
1.安装必要的.net插件 确保你已经安装了.net 4.5以上。如果没装,直接装.net 4.6即可Microsoft .NET Framework4.61https://www.microsoft.com/zh-cn/download/details.aspx?id=49982
1.2 Microsoft .NET Framework 4.61简体中文语言包
https://www.microsoft.com/zh-cn/download/details.aspx?id=49977
1.3装ps5.1安装包下载地址:
https://www.microsoft.com/en-us/download/details.aspx?id=54616
安装上图所示的插件后,再次查看powershell版本截图如下:
二.安装virtualbox和vagrant:
请务必完全参照以下步骤顺序一步步来:
2.下载并安装https://www.vagrantup.com/ virtualbox和vagrant版本要对应,建议都安装最新版的
3.重启--->cmd--->进入代码的项目目录f:--->mkdir devops--->新建一存放vagrant的项目目录mkdir data---->cd data-->vagrant box list列出本地模版(此时vagrant还需要一个模版vagrant box:虚拟镜像文件---下载地址http://cloud.centos.org/centos/7/vagrant/)这里我用的是自己网盘中的镜像,因为此镜像已有所有基础环境,不是纯净版-- >
添加镜像到Vagrant:
.最后如下可以看到镜像文件列表了
.初始化vagrant项目:如下命令后就会在当前目录下生成一Vagrantfile配置文件
.先不着急打开虚拟系统,我们配置vagrantfile,执行上面那条语句后生成的,对应生成的还有一个.vagrant文件,接下来是vagrantfile配置信息如下:
修改端口转发为8000(访问本机host的哪个端口时它会帮我转发到虚虚拟机guest的哪个端口)
config.vm.box = "centos7.1" #box名称
config.vm.hostname = "CentOS7" #win10系统下的主机名
config.vm.network "forwarded_port", guest: 8000, host: 8000 --->修改26行
config.vm.synced_folder "../data", "/vagrant_data", disabled: true --->修46行禁用默认同步目录
config.vm.synced_folder "F:/devops/data", "/share",type: "virtualbox" --->设置同步目录
由于vagrant没有Guest
Additions,通过vagrant不能创建共享文件夹,所以需要下载vbguest插件,当启动时自动安装Guest Additions
在命令行:
$ vagrant plugin install vagrant-vbguest --->需要花几分钟耐心等待
完成后启动系统,在命令行:
$ vagrant up --->这个要花点时间耐心等待
$vagrant halt --->同时在virtualbox图形软件中点击关闭虚拟机
$vagrant reload --->重新加载虚拟机-->如下图说明已经挂载成功!!
由于我们上面安装好了Guest Additions,需要修改vagrantfile配置文件,以免下次启动时重复安装Guest Additions,在配置文件最后一个end前添加两行命令:
config.vbguest.auto_update = false
config.vbguest.no_remote = true
$vagrant halt--->同时在virtualbox软件中点击关闭虚拟机
配置好后我们基本上已经配置好了虚拟系统,下一步在命令行启动系统
.启动虚拟机器:$ vagrant up有如下提示信息:网络/名称/端口转发/端口映射/ssh认证方式/目录映射
密钥生成是在F:\devops\data\.vagrant此隐藏目录中
.此时直接vagrant ssh就进入虚拟机了#sudo su - 切换root ---->vi /etc/ssh/sshd_config--->passwordAuthentication no-->改为yes如下两图:
.并systemctl restart sshd
.此时机器就起来了,然后exit退出。打开virtualbox如下图可看到有机器运行了
. 此时可直接关掉virtuabox因为占系统资源,并可直接用crt去连了:
用户名密码都是vagrant
此时如下图中自动挂载了一个本地的一个目录(在本地此目录中操作什么虚拟中就会有什么):
此时我在本机F:\devops\data目录下建一名为111.txt文件,在虚拟机中也能同步看到了
如下图:若上述图中没显示挂载目录则从下图中可以看出 centos/7 镜像缺少 Virtualbox Guest Additions---照上述几个步骤操作即可。
到此虚拟开发环境就搭建成功了!!
三.安装python
1. python和django的版本选择:
https://docs.djangoproject.com/en/2.2/ ---阅读django2.2官文中有python版本依赖说明--选稳定版本python3.6
所以看完上述三个官文后版本就定了:python3.6 + django2.2
python官网中:
[root@centos7 ~]$ wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz 下载
2.安装依赖--python会用到的工具:如自动提示/ssl相关软件包
[vagrant@centos7 ~]$ sudo su - root
[root@centos7 ~]# 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
3.编译安装python
[root@centos7 ~]$ tar -xzf Python-3.6.6.tgz
[root@centos7 ~]$ cd Python-3.6.6
[root@centos7 Python-3.6]$ ./configure -prefix=/usr/local/python36 ---->指定安装目录
[root@centos7 Python-3.6]$ make && make install --->编译如下图结束后它帮我把pip和setuptools都安装了
4.配置pip源
tee /etc/pip.conf <
[global]
index-url = http://pypi.douban.com/simple
trusted-host =pypi.douban.com
[list]
format=columns
EOF
四.创建虚拟环境
1.用pip安装python的虚拟环境virtualenv--开发中用虚拟环境来开发为了隔离默认python环境
切换到vagrant用户:
[vagrant@CentOS7 ~]$ sudo /usr/local/python36/bin/pip3 install virtualenv
2.用virtualenv去初始化一python的虚拟环境:
[vagrant@CentOS7 ~]$ /usr/local/python36/bin/virtualenv ./python36env 生成一当前用户家目录下的此目录
3.进入虚拟环境:一定要在vagrant普通用户下进入
[vagrant@CentOS7 ~]$ source ./python36env/bin/activate
(python36env) [vagrant@CentOS7~]$
五.开发django项目:
1.安装django---用django2.2
(python36env) [vagrant@CentOS7 ~]$ pip install django==2.2.1
2.安装并配置数据库:安装vim:
sudo yum-y install vim
安装mariadb:
(python36env) [vagrant@CentOS7~]$ sudo yum -y install mariadb mariadb-server mariadb-devel
修改/etc/my.cnf配置:
[mysqld]
default-storage-engine =innodb
innodb_file_per_table
collation-server =utf8_general_ci
init-connect = 'SET NAMES utf8'character-set-server =utf8
启动服务:
sudo systemctl start mariadb
sudo systemctl enable mariadb
安装mysqlclient:----python的mysql扩展pip install mysqlclient
初始化数据库: mysql_secure_installation
空(回车)--y--123456(root密码)--y,y,y,y,y创建数据库:
mysql-uroot -p123456
create database devops CHARACTER SET utf8;
3.初始化django项目:
(python36env) [vagrant@CentOS7 ~]$ cd /vagrant/
(python36env) [vagrant@CentOS7 vagrant]$ django-admin startproject devops 启动django项目后如下图生成devops项目目录
用windows上装的pycharm软件(打开远程项目)打开此devops项目:
进行项目设置:
找解释器(用远程的)file-->setting-->project:devops--->project interpreter-->add这里选vagrant且它的目录一定要选vagrant的项目目录,此时它会把远程的python的全所包同步下来。
django 数据库配置:settings.py中:
DATABASES={'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'devops','USER': 'root','PASSWORD': '123456','HOST': '127.0.0.1','PORT': 3306,'OPTIONS':{'init_command': 'SET default_storage_engine=INNODB;',
},
}
}
启动服务:第一种方式:
(python36env) [vagrant@CentOS7 vagrant]$ cd devops/
(python36env) [vagrant@CentOS7 devops]$ ls
devops manage.py
(python36env) [vagrant@CentOS7 devops]$ python manage.py migrate
(python36env) [vagrant@CentOS7 devops]$ python manage.py runserver 此时它就监听127.0.0.0:8000,但此时你访问此地址是访问不到的。
因为这个是一vm的linux机器,它只监听127.0.0.1这个网卡上的8000端口所以不行,得改成0.0.0.0的8000端口。
(python36env) [vagrant@CentOS7 devops]$ python manage.py runserver 0.0.0.0:8000 此时你在浏览器访问127.0.0.1的8000端口它就会帮转发到虚拟机中。
第二种方式:通过pycharm来启动给manage.py一个参数runserver 0.0.0.0:8000如下图,并点击三角号就运行了
但是这里要注意下我的vagrant是用的nat网络模式:所以宿主机不能直接连虚拟机,得做如下文中设置
到此完整的python开发环境就搭建完成了!!!!
六.vagrant package 打包自己的box镜像
搭建完毕后等虚拟机的细节都调整好后强烈建议打包成自己的镜像,以后需要在其他电脑安装虚拟机环境或者电脑的虚拟机出问题的时候可以直接一键还原,不然要重新搭建有点繁琐。
开发环境配置一次可以生成box文件,可移植.我们在vagrant的虚拟机下面进行了一些操作之后想把它导出作为备份,为的是以后在别的机器上安装完vagrant以后可以立即导入自己熟悉的box进行开发。就是将虚拟机打包出去,方便以后或者别人直接使用。当别人拿到我们打包后的镜像文件,直接使用vagrant init即可使用,此时同样的会生成一个Vagrantfile配置文件,我们需要对虚拟机进行操作,直接在配置文件修改即可。
1、查看虚拟机名称
去到虚拟机安装目录,执行命令:vboxmanage list vms
这里有可能提示:‘vboxmanage’ 不是内部或外部命令,也不是可运行的程序
或批处理文件。那是因为VirtualBox安装的时候没有将vboxmanage自动放入环境变量中,我们可以直接进入VirtualBox的安装目录执行这句命令,也就是VirtualBox.exe这个文件的同级目录.
data_default_1590575788478_13541就是我本地的虚拟机名称,复制下这个名字,后面打包box镜像需要用到。
2、执行打包命令
vagrant自带打包命令,需要去到你的vagrant目录下,也就是vagrantFile文件目录下执行
F:\devops\data>vagrant ssh
F:\devops\data>vagrant halt
3、部署回自己的box环境
到上面第二步的时候已经打包完毕了,如果想在其他电脑部署自己的box很简单
先把box文件放到需要部署的磁盘目录下。
执行以下操作命令:
1、将box安装到vagrant容器
$ vagrant box add -name centos7 package.box
$vagrant init centos7
2、然后直接启动即可
$ vagrant up