他山之石,可以成云

——咆哮金刚猪的云烹饪之路

第一周(7月13日~7月19日):熟悉开发环境

实验内容:

  • 云平台功能模块分析
  • 云平台架构设计
  • Flask开发环境搭建
  • Flask可运行的代码框架
    实验目标:

  • 提交LouCloud v0.1:简单的Flask Web应用

    相关知识点
    按照ok,not good,no三种级别把自己目前的知识情况做了说明,课下主要查漏补缺。

  • 操作系统:Linux 基本操作(ok)

  • 编程语言:Python 语言开发(ok)
  • 开发框架:Flask Web 框架,MVC 开发模式(not good)
  • 虚拟化技术: KVM/QEMU,Libvirt API 接口开发(no)
  • 云计算技术:基础设施即服务(IaaS)基本概念(no)
  • 数据库:MySQL 数据库设计及 SQLAlchemy 接口开发(no)
  • 开发流程:Git 基本操作及代码库使用(ok)
  • 安装部署:Virtualenv,Apache,WSGI等(no)
  • 前端开发:Bootstrap 3.0,HTML,Javascript(not good)

技术架构
项目选用Python语言,Web 开发框架选用 Flask。虚拟机操作使用 Libvirt API,数据库采用 MySQL,代码管理使用 Git,采用 【WSGI 方式部署到 Apache 】上,前端基于 Bootstrap 开发。

知识扩展

WSGI 方式部署到 Apache:这个参考使用Apache服务器wsgi方式部署Django应用进行学习。

**实验步骤**

1 安装virtualenv
sudo apt-get update
sudo apt-get install python-virtualenv
2 安装虚拟化组件

Libvirt API 是一套用于多种虚拟化平台统一管理的接口,详细文档:http://libvirt.org,我们基于 Libvirt 开发虚拟机的管理模块,virsh 是 Libvirt 的一套命令行接口,我们可以使用各种 virsh 命令来管理虚拟机的生命周期。

python-libvirt 是 Python 版本的 Libvirt API。

# 安装虚拟化组件
sudo apt-get install qemu libvirt-bin python-libvirt
# 启动 libvirt-bin 服务
sudo service libvirt-bin start
# 查看 libvirt-bin 服务状态
sudo service libvirt-bin status
# 查看当前虚拟机列表,具体可使用virsh --help 帮助命令
sudo virsh list
#感想:
  • 拼写一定要注意啊!!!比如libvirt
3 MYSQL

由于实验环境中已经安装了 MySQL 服务器,所以这一步操作可以省略。

sudo apt-get install mysql-server

实验楼环境中的 MySQL 管理员账户为 root,密码为空.

4 Flask 代码框架

LouCloud v0.1的代码结构

|-- README.md
|-- loucloud
|   |-- __init__.py
|   |-- app.py
|   |-- config.py
|   |-- extension.py
|   |-- static
|   |-- templates
|   `-- user
|       |-- __init__.py
|       `-- views.py
`-- manage.py

其中:

manage.py 提供了测试和初始化命令;
loucloud 模块为核心代码;
loucloud/user 模块提供用户登陆认证及用户管理等基本操作;
loucloud/static 与 loucloud/templates 用来存放界面实现所需的静态文件以及 jinja2 模板;
loucloud/app.py loucloud/init.py 及loucloud/config.py 用于初始化和部署Flask 应用;
loucloud/extension.py 用来初始化和配置 Flask 的扩展,例如 Flask-Login 等;
创建目录与代码提交
cd /home/shiyanlou/Code/shiyanlou_cs354
touch manage.py
mkdir loucloud
cd loucloud
mkdir user static templates
touch __init__.py config.py app.py extension.py
cd user
touch __init__.py views.py
cd ../../

cd /home/shiyanlou/Code/shiyanlou_cs354
# 查看当前文件修改的列表
git status
# commit, also git add .
git add *
git commit -m 'first commit of loucloud'
# push到git.shiyanlou.com远程仓库,first push using this, later just 'git push'
git push origin master
5 Flask 及相关扩展
Flask:Flask 框架基础包
Flask-SQLAlchemy:在 Flask 中使用的 SQLALchemy ORM,用于数据库操作;
Flask-WTF:页面表单扩展;
Flask-Cache:缓存扩展;
Flask-Login:用户登陆认证及会话管理组件;
Flask-Script:Flask 的脚本支持,例如 manage.py 这类启动和管理脚本;
原来requirement.txt文件这么玩

曾经年少的我,还以为只是个说明,挨个的google百度下载呢。。。

该文件中包含开发环境所需要的各种 Python 模块。

touch requirement.txt
vim requirement.txt

输入以下内容,每个包占一行

flask
flask-sqlalchemy
flask-wtf
flask-cache
flask-login
flask-script

虚拟环境初始化与进入

cd /home/shiyanlou/Code/shiyanlou_cs354
# 初始化虚拟环境venv
virtualenv venv
# 进入virtualenv venv
source venv/bin/activate

退出虚拟环境只需要输入deactivate命令即可。

deactivate

安装 Python 模块

进入到 Virtualenv 虚拟环境后执行下面的命令即可安装 requirement.txt 文件中的 Python 模块到 Virtualenv 虚拟环境的路径中。

pip install -r requirement.txt

6 其他 Python 模块

下述 Python 模块分别具备不同的功能,安装在我们的代码环境中最大的作用是避免我们把时间浪费在重复制作轮子上。

paramiko:SSH链接管理组件;通过requirement文件安装
mysql-python:MySQL链接管理;通过requirement文件安装
libvirt:Libvirt 虚拟化管理组件:直接copy
cp /usr/lib/python2.7/dist-packages/libvirt*  /home/shiyanlou/Code/shiyanlou_cs354/venv/lib/python2.7/site-packages
# 然后,测试下依赖的 Python 模块是否都已经起作用:

cd /home/shiyanlou/Code/shiyanlou_cs354
source venv/bin/activate
python
>> import libvirt
>> import flask
>> import paramiko
由于 mysql-python模块依赖与 libmysqlclient-dev,python-dev 软件包,所以需要先通过 apt-get 安装这个包再执行后续操作。 sudo apt-get install libmysqlclient-dev python-dev
注意:由于实验楼环境不会保存,每次开始实验后先执行一次下述虚拟环境初始化操作:
virtualenv venv
source venv/bin/activate
pip install -r requirement.txt
cp /usr/lib/python2.7/dist-packages/libvirt*  /home/shiyanlou/Code/shiyanlou_cs354/venv/lib/python2.7/site-packages
deactivate

flask最小的可运行代码

偷懒了,用的IDE直接粘贴的代码,慢慢研究了,代码都在./loucloud

cd /home/shiyanlou/Code/shiyanlou_cs354
source venv/bin/activate
python manage.py run
添加tag然后push

使用git tag给版本做个标记v0.1,表明我们的第一个最简版本已经完成。

cd /home/shiyanlou/Code/shiyanlou_cs354
git tag
git tag -a v0.1 -m "LouCloud v0.1"
git push origin –-tags

本文为实验楼训练营课程仿OpenStack开发云计算管理软件,学员咆哮金刚猪第一周学习所撰写的优质实验报告。

训练营仿OpenStack开发云计算管理软件第二期,将于11月9日正式开启。欢迎有兴趣的同学加入:https://www.shiyanlou.com/courses/354