SYSU-xiaoxin-catering 小欣餐饮点餐系统

The Documents about Group Project of Software Analysis & Design

View the Project on GitHub LeonhardE/Dashboard

How to deploy

后台部署包括分布式数据库部署和服务部署

分布式数据库部署

我们利用docker工具来实现分布式数据库。数据库服务将放置在容器中,多个数据节点Data node通过Management node的 调度分配来提高高可用,可伸缩的数据库读写服务。

Prerequisite

安装镜像

$  docker pull mysql/mysql-cluster

启动容器

新建局域网

$ docker network create cluster --subnet=192.168.0.0/16

先启动 management node

$ docker run -d --net=cluster --name=management1 --ip=192.168.0.2 mysql/mysql-cluster ndb_mgmd

然后启动 data nodes

$ docker run -d --net=cluster --name=ndb1 --ip=192.168.0.3 mysql/mysql-cluster ndbd
$ docker run -d --net=cluster --name=ndb2 --ip=192.168.0.4 mysql/mysql-cluster ndbd

再启动 MySQL server node

$ docker run -d -p 23333:3306 --net=cluster --name=mysql1 --ip=192.168.0.10 -e MYSQL_RANDOM_ROOT_PASSWORD=true mysql/mysql-cluster mysqld

得到 MySQL 密码

$ docker logs mysql1 2>&1 | grep PASSWORD
$ docker exec -it mysql1 mysql -uroot -p
Enter password: XXXXX

利用 management node 来管理 cluster

$ docker run -it --net=cluster mysql/mysql-cluster ndb_mgm
ndb_mgm> show

利用 MySQL server node 来使用 cluster,我们要创建一个属于我们的数据库,比如说xiaoxin

$ docker exec -it mysql1 mysql -uroot -p

mysql> create database xiaoxin; use xiaoxin;

配置数据库内容

我们在 ./Backend/Config/secure.py 中可以配置数据库连接

SQLALCHEMY_DATABASE_URI = mysql://root@localhost:23333/xiaoxin?charset=utf8mb4

后台服务部署

Prerequisite

后端

下载仓库:

$ git clone  https://github.com/JohnsonLeeeee/SYSU-xiaoxin-catering.git

安装python 虚拟环境工具 pipenv

$ pip install pipenv

进入Backend目录,启动虚拟环境并安装项目依赖模块

$ pipenv install
$ pipenv shell

进行配置: 进入Config 文件夹在secure.py中可以进行数据库配置,和其他相关配置如下。

#密钥配置
SECRET_KEY = '\x88D\xf09\x91\x07\x98\x89\x87\x96\xa0A\xc68\xf9\xecJ:U\x17\xc5V\xbe\x8b\xef\xd7\xd8\xd3\xe6\x98*4'
# Email 配置
MAIL_SERVER = 'smtp.163.com'
MAIL_PORT = 465
MAIL_USE_SSL = True
MAIL_USE_TSL = False
MAIL_DEBUG = True
MAIL_USERNAME = 'xxw9808@163.com'
MAIL_PASSWORD = 'YYH123456'
MAIL_SUBJECT_PREFIX = '[小欣餐饮]'
MAIL_SENDER = '杨元昊 <xxw9808@163.com>'

运行一个后端程序服务,我们可以使用gunicorn做多线程并发加速:

(venv) $ nohup gunicorn -w 4 -b 0.0.0.0:10086 app:app &

负载均衡器

创建xiaoxin.conf文件:

server {
	listen 5000;

	# SSL configuration     
    # listen 443 ssl;
    server_name localhost;

	root /yourpath/SYSU-xiaoxin-catering/www/static/;

    access_log /yourpath/SYSU-xiaoxin-catering/log/access_log;
    error_log /yourpath/SYSU-xiaoxin-catering/log/error_log;

    location ~ ^\/v1\/.*$ {
        rewrite ^.+v1/?(.*)$ /$1 break;
        proxy_pass       http://127.0.0.1:10086;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    
}

在该示例文件中,我们将所有url是v1开头的请求(本项目中这是v1版本api的请求)转发到我们之前开在10086端口的后端程序中。我们可以在这里自如的 更改转发地址和对应的url,来满足我们的需求。

进一步地,我们还可以根据需要为每个转发请求的服务配置负载均衡,比如我们为v1版本api请求开启多个进程/服务器进行服务


    upstream http://127.0.0.1:10086 {
      server 地址1;
      server 地址2;
      server 地址3;
}
}

重新加载配置文件:

$ sudo nginx -s reload

运行效果

在浏览器中输入localhost:8080可查看自如地进行登录注册等功能,数据库中默认存在代码编号为1的餐厅供测试使用。