原AWS Ubuntu服务器丢失,基于模型JSON文件重建LoopBack后端
嘿,别慌!服务器丢了确实头疼,但只要有模型JSON在手,重建LoopBack后端其实没那么难。我帮你一步步捋清楚,从环境搭建到部署AWS全搞定:
1. 先把基础环境搭起来
不管是在新的AWS Ubuntu服务器还是本地开发机,先搞定Node.js和npm——这是LoopBack的运行基础。根据你之前用的LoopBack版本选Node版本:LoopBack 3推荐Node 10+,LoopBack 4推荐Node 14+,我以适配性广的Node 16为例:
# 安装Node 16的脚本 curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - sudo apt-get install -y nodejs
装完后敲node -v和npm -v,能正常输出版本号就ok了。
2. 初始化LoopBack项目
先确认你之前用的是LoopBack 3还是4——从你给的BikeStop模型JSON来看,更偏向LoopBack 3(因为有base: "PersistedModel"这种字段),我分开说两种情况:
如果你用的是LoopBack 3:
- 先全局装LoopBack CLI:
npm install -g loopback-cli - 然后创建新项目:
跟着CLI提示走就行:选「api-server」类型,填个项目名,默认数据源先选内存的(之后再改成AWS的数据库)。lb
如果你用的是LoopBack 4:
- 全局装LoopBack 4 CLI:
npm install -g @loopback/cli - 创建新项目:
按提示填项目信息,几步就完成初始化了。lb4 app
3. 导入你的模型JSON
这是核心步骤,把你保存的模型文件导进去:
针对LoopBack 3:
LoopBack 3的模型都存在common/models/目录下,直接把你的BikeStop模型JSON(补全缺失的字段)存成bike-stop.json放进去:
{ "name": "BikeStop", "plural": "bikeStops", "base": "PersistedModel", "idInjection": true, "options": { "validateUpsert": true }, "properties": { "geo": { "type": "geopoint", "required": true }, "description": { "type": "string", "required": false } }, "validations": [], "relations": {}, "acls": [], "methods": {} }
然后去server/model-config.json里注册这个模型,加这么一段:
"BikeStop": { "dataSource": "db", "public": true }
这里的db是你初始化时选的数据源,之后我们再改成AWS的数据库。
针对LoopBack 4:
LoopBack 4用TypeScript定义模型,你可以用CLI快速创建,或者把JSON转成TS类:
- 用CLI创建:
输入模型名lb4 modelBikeStop,然后逐个加属性:geo选GeoPoint类型并设为必填,description选string类型设为非必填就行。 - 手动创建的话,在
src/models/bike-stop.model.ts里写:import {Entity, model, property} from '@loopback/repository'; @model({ settings: { validateUpsert: true, plural: 'bikeStops' } }) export class BikeStop extends Entity { @property({ type: 'number', id: true, generated: true, }) id?: number; @property({ type: 'geopoint', required: true, }) geo: {lat: number, lng: number}; @property({ type: 'string', required: false, }) description?: string; constructor(data?: Partial<BikeStop>) { super(data); } }
4. 对接AWS数据库(比如RDS)
如果之前用的是AWS RDS(MySQL/PostgreSQL之类的),现在把数据源配置改成RDS的信息:
LoopBack 3:
打开server/datasources.json,把默认的内存数据源改成RDS的配置,比如MySQL:
{ "db": { "name": "db", "connector": "mysql", "host": "你的RDS端点.rds.amazonaws.com", "port": 3306, "database": "你的数据库名", "user": "数据库用户名", "password": "数据库密码" } }
然后装对应的连接器:
npm install loopback-connector-mysql --save
LoopBack 4:
用CLI创建数据源:
lb4 datasource
选对应的数据库类型(比如MySQL),然后输入RDS的连接信息,CLI会自动生成配置文件并安装好连接器,省心得很。
5. 生成数据库表(如果需要)
如果你的RDS里还没有bikeStops表,LoopBack可以自动帮你生成:
- LoopBack 3:运行自动迁移脚本
node server/bin/automigrate.js - LoopBack 4:直接跑迁移命令
npm run migrate
6. 测试服务是否正常
启动服务看看:
- LoopBack 3:
node . - LoopBack 4:
npm start
然后访问API Explorer(LoopBack 3和4都是http://你的服务器IP:3000/explorer),试试BikeStop的增删改查接口,能正常调用就说明模型没问题了。
7. 部署到AWS Ubuntu服务器
如果是本地开发好再部署到AWS:
- 把代码传到服务器(用Git拉取或者scp上传都行);
- 服务器上装依赖:
npm install; - 别把数据库密码硬编码!用环境变量存敏感信息;
- 用PM2进程管理器保持服务一直运行:
npm install -g pm2 # LoopBack 3启动命令 pm2 start server/server.js # LoopBack 4先build再启动 npm run build pm2 start dist/index.js - 最后去AWS安全组里开放3000端口(或者你自定义的端口),让你的Android应用能访问后端接口。
内容的提问来源于stack exchange,提问作者Tom Dawn

