Backend on Aliyun: Webpy + MySQL

这个后台主要是LKY大神的作品,当时我们一起做安卓课程淘宝宝(TBB),一款名字山寨了淘宝、界面山寨了微信的app。现在昱神把他那的后台关了,所以我打算迁移到我的阿里云上,也许还能改动一波,总之先试试自己部署一个python(webpy + mysql)的后台。

顺便提一句,标题里的冒号是通过引号的方式解决的title: "xx:x"

Aliyun Environment Setting

mysql

阿里云买了一年的学生优惠机,本身是CentOS-7,捣鼓了半天都没装上mysql,试了community的mysql也不行。后来一狠心就重装成Ubuntu-14.04-64bit了,一开始也是死活装不上mysql,识别不出mysql的package之类的。后来经历了换源aptitude大法才强行装上了mysql。

1
$ sudo aptitude install mysql-server mysql-client libmysqlclient-dev

安装过程中会提示说有dependencies的问题,会提供几种解决方案,第一种安不上就点no跳过它往后试。我貌似是在第二种就安装上了的。

git

  • 安装git

    1
    $ apt-get install git
  • 首先设置Git提交时显示的用户名和邮箱:

    1
    2
    $ git config --global user.name "AliyunUbuntu"
    $ git config --global user.email "xxx@gmail.com"
  • 为阿里云Ubuntu创建SSH。生成的SSH密钥会存放在~/.ssh文件夹中,可用cd进入确认是否已经生成过SSH密钥。若有则需备份后(cp [old] [new])再继续生成:

    1
    $ ssh-keygen -t rsa -C "xxx@gmail.com"
  • 密钥生成后在主目录下的.ssh文件夹中就有私钥id_rsa和公钥id_rsa.pub两个文件。vi打开pub公钥中,把内容都复制粘贴到你的github账户SSHKey即可。在putty中用vim复制:直接按下ctrl+v后就进入”viewing block”模式,鼠标拖选后再按下y即可按照该格式复制出来。

  • 从github仓库抓取TBB的代码到Aliyun。

    1
    $ git clone git@github.com:bobbyliujb/TBB.git

Python

  • 安装webpy轻量级web框架,参考官方安装指南

    1
    $ sudo apt-get install python-webpy

    不过按官网的说法,这种方法不能获取最新版本的webpy。

  • 接下来安装MySQLdb,用pip方式安装就再次碰到package损坏的问题了。但是直接用下面的就可以了:

    1
    $ apt-get install python-mysqldb

Programming

>
LKY大神的描述:后台搭建在阿里云上,采用Python语言进行开发,使用web.py服务器框架,云端部署Git环境,方便版本控制。后台的稳定运行使用nohup指令,Git版本更新需要忽略pyc文件和nohup.out文件。客户端请求方式统一为POST,可以通过在POST请求中加入键值对参数传参;服务器返回的信息格式为JSON,使用Python可以轻松将字典(键值对集)转换成JSON压入返回信息中。
>

webpy是一个轻量级Python web框架,它简单而且功能强大。具体使用参看web.py 0.3新手指南。目前我只是把代码迁移到云上,先建好tbb database,再用source tbb.sql语句执行建表。在vi中将dbop.py全文中LKY的数据库root密码换成我自己的:

1
:%s/oldword/newword/g

建立好一切所需文件夹(../head & ../picture)后,即可运行。先把更新后的代码推送到远程仓库:

1
2
3
4
5
$ git status
$ git add dbop.py
$ git commit -m "mysql password changed"
$ git remote add origin git@github.com:bobbyliujb/TBB.git (若已存在则不会再次创立origin远程库)
$ git push (-u) origin master (首次推送才需要参数-u将本地与远程的master分支关联起来)

Run the Server

nohup可以保持程序在后台执行,不会因为终端关闭就hang up:

1
$ nohup python server.py 6060 (myout.out 2>&1)

真正要关闭时需要得到进程的ID,强行kill掉:

1
2
$ ps -ef | grep server.py (ps命令可显示所有进程PID)
$ kill -9 <PID>