The Documents about Group Project of Software Analysis & Design
后台部署包括分布式数据库部署和服务部署
我们利用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的餐厅供测试使用。