首页 > 程序开发 > 移动开发 > 其他 >

搭建Flask+Gunicorn+Supervisor+Nginx的聊天室服务器端

2017-03-06

搭建Flask+Gunicorn+Supervisor+Nginx的聊天室服务器端,上一个课程项目中开发了一个安卓的聊天软件,现在需要在AWS上搭建自己的服务器,就可以实现完整的聊天功能,思路大致是用Flask搭建Web框架。

上一个课程项目中开发了一个安卓的聊天软件,现在需要在AWS上搭建自己的服务器,就可以实现完整的聊天功能,思路大致是用Flask搭建Web框架,Gunicorn搭建WSGI服务器,Supervisor监控,Nginx前置作为HTTP服务器。

1.在AWS上创建一个Ubuntu的micro实例(关于如何创建实例可参考我之前的文章,传送门AWS Instance创建), 为了方便把流量进出限制都关掉。

2.为了更好地理解涉及到的各个框架,我将逐步搭建服务器。首先,连接到我们的实例上,安装pip和flask。

sudo apt-get update

sudo apt-get install python-pip

sudo pip install flask

如果出现了如下的错误,

locale.Error

可通过下列指令解决,

export LC_ALL=C

我暂时猜想可能是和python版本有关,具体可参考这里:stackoverflow

安装完Flask后,可在python中尝试import,若无报错即安装成功。

import flask

3.编写Flask的Hello Word

创建一个新的文件夹来存放Flask的python文件,并编写我们的第一个Flask demo。

mkdir FlaskApp

cd FlaskApp/

vim app.py

python文件中的代码如下:

from flask import Flask

app = Flask(__name__)

@app.route('/')

def hello_world():

return 'Hello World!'

if __name__ == '__main__':

app.run(host='0.0.0.0')

运行app.py,Flask成功启动,在浏览器中输入服务器的Public IP和端口号,应该能看到输出。

web browser

这里,推荐使用postman进行测试,十分方便!传送门:Postman

postman get

这样我们就用python 和Flask创建了一个网页服务器了,是不是很简单~

4.安装mysql,创建database

聊天室的信息我们存放到mysql中,并使用Flask进行读取、新增等操作。首先安装mysql,

sudo apt-get install mysql-server

sudo apt-get install python-mysqldb

对于mysql的操作这里不作赘述,相关的教程请自行百度,

mysql -uroot -p

创建数据库

CREATE DATABASE androidIM;

USE androidIM;

分别建立聊天室列表和聊天内容列表

CREATE TABLE chatrooms (

id int(11) NOT NULL AUTO_INCREMENT,

name varchar(100) NOT NULL,

PRIMARY KEY(ID)

)DEFAULT CHARSET=utf8;

CREATE TABLE messages (

id int(11) NOT NULL AUTO_INCREMENT,

chatroom_id varchar(11) NOT NULL,

user_id varchar(11) NOT NULL,

name varchar(100) NOT NULL,

messages varchar(300) NOT NULL,

timestamp varchar(30) NOT NULL,

PRIMARY KEY(ID)

)DEFAULT CHARSET=utf8;

向聊天室列表加入内容以便测试

INSERT INTO chatrooms (name) VALUES ('TEST');

为了连接Flask和mysql,创建mydb.py,建立MyDataBase类

import MySQLdb

class MyDataBase:

db = None

def __init__(self):

self.connect()

return

def connect(self):

self.db = MySQLdb.connect(

host = "localhost",

port = 3306,

user = "root",

passwd = "iems5722",

db = "AndroidIM",

use_unicode = True,

charset = "utf8",

)

self.cursor = self.db.cursor(MySQLdb.cursors.DictCursor)

return

修改app.py,这里省略了其它功能的代码

from flask import Flask, jsonify, g, request

import mydb

@app.before_request

def before_request():

g.mydb = mydb.MyDataBase()

return

@app.route("/api/asgn3/get_chatrooms")

def get_chatrooms():

query = "SELECT * FROM chatrooms ORDER BY id ASC"

g.mydb.db.cursor.execute(query)

chatroom_list = g.mydb.db.cursor.fetchall()

return jsonify(data=chatroom_list,status="OK")

运行app.py,在postman中尝试获取聊天室列表

get chatroom

5.安装gunicorn并进行测试

sudo apt-get install gunicorn

cd FlaskApp/

gunicorn app:app -b 0.0.0.0:8000

在postman中测试api是否正常,记得把端口改为8000

6.安装supervisor,通过supervisor对gunicorn进行启动和监控

sudo apt-get install supervisor

sudo su - root -c "echo_supervisord_conf > /etc/supervisord.conf"

sudo vim /etc/supervisord.conf

在最后插入如下代码

[program:android_IM]

command = gunicorn app:app -b 0.0.0.0:8000

directory = /home/ubuntu/FlaskApp

user = ubuntu

autostart = true

autorestart = true

stdout_logfile = /home/ubuntu/FlaskApp/app.log

redirect_stderr = true

保存后运行

supervisord -c /etc/supervisord.conf

supervisorctl

若输出我们定义的程序名并且状态为运行,则安装成功,在postman中测试api

7.安装、调试Nginx

sudo apt-get install nginx

删除Nginx原有的配置文件并创建我们自己的配置文件

sudo rm /etc/nginx/sites-enabled/default

sudo vim /etc/nginx/sites-enabled/androidIM.conf

插入以下代码

server {

listen 80;

listen [::]:80;

location /api/asgn3/ {

proxy_pass http://0.0.0.0:8000;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header Host $http_host;

proxy_http_version 1.1;

proxy_redirect off;

proxy_buffering off;

}

}

最后,把我们建立的配置文件链接到Nginx的配置文件夹中,重启nginx

sudo ln -s /etc/nginx/sites-enabled/androidIM.conf /etc/nginx/conf.d/

sudo /etc/init.d/nginx restart

此时,通过Public IP应该就能直接获取到api的相关返回,至此配置大功告成!

final
相关文章
最新文章
热点推荐