在构建应用程序时,部署API是一个关键的步骤。API部署允许其他应用程序或用户与您的服务进行交互,并访问所需的功能和数据。本文将介绍一个示例,展示如何使用Node.js和Express框架来部署一个简单的API。
准备工作
- 安装Node.js:用于运行JavaScript代码的运行时环境。
1
2sudo apt update
sudo apt install nodejs - 安装npm(Node Package Manager):用于管理和安装Node.js模块。
1
sudo apt install npm
创建API脚本
编写脚本
在服务器想要存放API脚本的目录下,创建API脚本(这里我用的是server.js),其中{ TemplateName, site }
为请求API传递的json参数:
1 | const express = require('express'); |
我是在本地写完传到服务器指定目的了,在本地创建server.js的根目录,右键打开Windows Powershell
终端,你要用vs code或者git bash,执行以下指令scp server.js qianduan@124.0.0.0:~/H5/server/
:
1 | scp server.js qianduan@112.124.59.167:~/H5/server/ |
其中qianduan@124.0.0.0
是你配置好本地能够远程连接的服务器地址:用ssh不知道怎么操作的可以看下(windows系统ssh连接服务器(免密+私钥)
另外假如linux批处理不是使用.bat
而是.sh
,假如有用到deploy.sh
文件头要加上#!/bin/bash
,然后再执行以下命令为deploy.sh剔除Window本地上传发生的格式冲突
1 | # sed -i -e 's/\r$//' scriptname.sh |
安装依赖项
server.js脚本需要安装express
依赖项
1 | npm install express |
安装cors
依赖项
1 | npm install cors |
启动API服务器
在存放API脚本目录下执行以下命令:
1 | node server.js |
如果启动成功,你会看的脚本返回的输出:
1 | API服务器正在运行,监听端口:3000 |
长期启用API
安装PM2进程:
1 | npm install pm2 -g |
重启且更新环节变量
1 | pm2 restart --update-env server.js |
定个时,每天凌晨0.30重启:
1 | # 添加定时任务 |
重启主要时为了防止长时间启用api写入进程被关闭问题。
设置开机启动
例如我在根目录cd H5/server
,要启用的是server
目录下的server.js
,本次启动的名字我定义为my-server
,在进入H5/server
目录执行如下pm2命令:
1 | pm2 start server.js --name my-server |
回车继续输入:
1 | pm2 startup |
运行后,你会看到一条输出命令,它会根据你的系统生成适合的命令,复制系统给你返回的输入,例如:
1 | sudo env PATH=$PATH:/home/qianduan/.nvm/versions/node/v16.19.0/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u qianduan --hp /home/qianduan |
**注意上条命令是执行pm2 startup
返回的,不是复制我上面的,最后保存进程:
1 | pm2 save |
重启服务器试试,如果设置成功,稍后你就可以直接客户端请求API成功了,后面再不需要手动启动。
1 | sudo reboot |
附:删除自启配置
进入到当初设定的对应目录,删除my-server
进程,执行:
1 | pm2 unstartup |
测试API端点
使用本地测试
要测试API的/deploy端点,您可以使用工具如cURL或Postman发送POST请求。确保请求体中包含必要的参数TemplateName和site。
示例cURL请求:
1 | curl -X POST -H "Content-Type: application/json" -d '{"TemplateName": "example", "site": "example.com"}' http://localhost:3000/deploy |
示例powershell请求:
1 | Invoke-RestMethod -Uri 'http://localhost:3000/deploy' -Method Post -Body '{"TemplateName":"YourTemplateName","site":"YourSite"}' -ContentType 'application/json' |
如果启动成功,你会看的脚本返回的输出:
1 | message |
使用公网IP测试
假如我的公网IP是:124.0.0.0
,示例cURL请求:
1 | curl -X POST -H "Content-Type: application/json" -d '{"TemplateName": "example", "site": "example.com"}' http://124.0.0.0:3000/deploy |
注意:使用公网IP需要在阿里云和腾讯云服务器后台添加安全组规则开放对应端口(如果你检查服务器内防火墙没问题后已经无法请求,检查安全组是否开放对应端口例如server.js使用的3000端口
很重要)。
使用方法
javascript:
1 | fetch(http://124.0.0.0:3000/deploy, { |
使用https请求API
如果你使用https协议的网址请求http协议的api,那么遇到请求失败报错:
1 | This request has been blocked: the content must be served over HITPS! |
解决办法是换成把api换成https协议,或者在html的header加上下面的代码:
1 | <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" /> |
但我在webpack项目试下了直接报错,最佳办法还是给api加上换成https协议也就是绑定域名,并安装证书。
绑定域名
首先你需要有自己的域名,其次你在国内要使用域名还得备案过审后可以使用。
到域名后台—>解析:添加记录—>api.yoursitename.com 记录类型A 记录值:你的服务器地址(例如:124.0.0.0
)—>确定
SSL证书
在将域名api.yoursitename.com解析到服务器IP地址后,开启服务器80和443端口允许入站连接
然后为域名申请证书,好像不同服务器流程不一样,我用到是Ubuntu 18.04.6 LTS服务器:
1.运行以下命令来安装Certbot:
1 | sudo apt update |
2.安装Certbot后,运行以下命令以获取证书:
1 | sudo certbot certonly --standalone -d api.rfcode.top |
申请成功后,配置下路径,就可以使用https://api.yoursitename.com/deploy
了。
其他Linux相关指令
1 | ## 列出正在运行的所有网络连接和监听端口 |