万事开头难。尝试通过阿里云服务器部署node服务。中间踩了一些坑。借此给自己一个总结。
1 远程服务器安装node
(1) 安装node
wget https://npmmirror.com/mirrors/node/v16.16.0/node-v16.16.0-linux-x64.tar.xz
通过此命令。我们会在服务器当前目录下出现一个node的压缩包
(2)解压 tar xf node-v16.16.0-linux-x64.tar.xz
注意,这里最后的.xz不要遗漏
(3)此时会出现一个和压缩包同名的文件夹,我们可以直接更改名称为node 或者借助lunix命令 mv node-v16.16.0-linux-x64.tar.xz node //mv A B 把A 重命名为B
(4)我们需要配置node的全局环境变量
通过vim /etc/profile 打开profile这个文件,添加如下语句:
export NODE_HOME=/opt/node/node
export PATH=$NODE_HOME/bin:$PATH
这里特别注意:NODE_HOME的路径是你安装node的目录。比如我的node安装在根目录下的node文件下其路径就是opt/node/node
(5)/ 保存环境变量。通过 source /etc/profile (source命令 后面是路径)source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。因为linux所有的操作都会变成文件的格式存在。
到这一步node就安装成功了。我们通过node -V就能正常显示当前node的版本。
2 部署node服务
(1)新建一个文件夹用于部署node
我这里直接在根目录新建一个nodeServer文件夹,然后把server.js文件和packages.json文件上传上去。文件内容如下
server.js
const Koa=require("koa")
const Router=require("koa-router")
const Multer=require("koa-multer")
const fs=require("fs")
const path=require("path")
const app=new Koa()
const router=new Router()
let storage=Multer.diskStorage({
destination:function(req,file,cb){
cb(null,"static/upload")
},
filename:function(req,file,cb){
var fileFormat = (file.originalname).split(".");
cb(null,Date.now() + "." + fileFormat[fileFormat.length - 1]);
}
})
let upload=Multer({storage:storage})
app.use(router.routes())
app.use(router.allowedMethods())
router.get("/api/userInfo",async ctx=>{
ctx.body={
name:"sean",
age:20
}
})
router.post("/api/upload",upload.fields([{name:"file"}]),async ctx=>{
console.log("ctx.req:",ctx.req)
ctx.body={
msg:"上传成功"
}
})
app.listen(4000,()=>{
console.log("监听成功")
})
package.json
{
"name": "upload",
"private": true,
"version": "0.0.0",
"type": "module", //特别注意
"scripts": {
},
"dependencies": {
"koa": "^2.13.4",
"koa-multer": "^1.0.2",
"koa-router": "^12.0.0"
}
}
这里特别注意package中的type字段:由于之前我用的是vite生成的项目。这里运行以后发现一直报错。提示require不支持。最后发现问题出在这里。一定要把type:"module"去掉。不然运行它会以e6模块化方式,这在node服务里是不支持的。
(2)给服务器新增一个端口。比如我们的server.js启动的端口是3000,那我们需要看防火墙是否开放了这个端口,通过 firewall-cmd --zone=public --list-ports 如果3000端口不在列表中则需要新增3000端口,最后千万不要忘记firewall-cmd --reload 重启防火墙
3 启动node服务
我们首先进入nodeServer目录,直接在远程通过 ip:3000 (ip)是你远程服务器的公网ip 就可以正常访问。如图:
这样就是远程获取到node服务的数据