首页 > 系统相关 >【转载】node服务开发和服务器部署(node.js+koa2+pm2+nginx)教程

【转载】node服务开发和服务器部署(node.js+koa2+pm2+nginx)教程

时间:2023-03-09 09:13:10浏览次数:49  
标签:node pm2 代码 ctx js nginx 复制

我为什么要写这篇文章

昨天晚上有个小哥发维信给我,问我怎么部署一个node服务,有没有相关教程,我有点震惊,就问他有哪些不懂,他说几乎都不懂。我想他应该也是找过相关教程了,只是看不懂或者无法理解。

我让他把他不懂的东西写出了,我出一个视频,从头到尾讲。他说都不懂,你会不会打死我,我说我能理解你,你不是一个人,是一个群体的代表,既然你不懂,也会有部分人不懂,所以我决定从头开始讲讲怎么用node开发一个服务,在服务器上部署,并用域名解析。

视频地址:

B站(点击跳转)

涉及到的知识点

node.js、koa2、koa-router、pm2、nginx、Linux

教程结构

第一步:写一个node服务

写一个node服务有很多种方式:

  • 用原生的node写
  • 用express写
  • 用koa2写
  • egg直接上

这里我们用koa2写一个:

创建一个项目node-koa-pm2:

mkdir node-koa-pm2 && cd node-koa-pm2 && npm init -y
复制代码

安装koa和koa-router:

npm install koa koa-router --save
复制代码

至此,项目创建成功,在根目录下创建app.js:

const Koa = require('koa');
const app = new Koa();
const router = require('./api/test')
app.use(async (ctx, next) => {
    const start = Date.now();
    await next();
    const ms = Date.now() - start;
    console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
});
app.use(router.routes())
app.listen(3000);
复制代码

在根目录下创建api目录,里边再创建test.js:

const Router = require('koa-router');
const router = new Router();
router
    .get('/api/', (ctx, next) => {
        ctx.body = 'Hello World!';
    })
    .get('/api/test', (ctx, next) => {
        ctx.body = {
            msg:'here is test',
            query:ctx.query,
            queryStr:ctx.querystring,
        }
    })
    .post('/api/users', (ctx, next) => {
        ctx.body = 'here is users';
    })
    .all('/api/users/:id', (ctx, next) => {
        // ...
    });
    

module.exports = router
复制代码

当前的目录结构如下图:

根目录下启动服务:

node app.js
复制代码

浏览器访问:http://127.0.0.1:3000/api/test?aa=1 效果如下:

至此,第一步的node服务创建完成!

第二步:拥有一台服务器(node环境)

购买:阿里云、腾讯yun、百度云、华为云 个人:500元/年(推荐双十一pin团) 系统:centos 7

装node环境:blog.csdn.net/u014726163/…

把代码上传到服务器:FTP、git、rz 安装依赖:

npm i
复制代码

尝试启动服务:

node app.js
复制代码

curl服务器本地访问:

curl http://127.0.0.1:3000/api/test?aa=1 
复制代码

如果成功则返回:

{"msg":"here is test","query":{"aa":"1"},"queryStr":"aa=1"}
复制代码

第三步:安装并使用pm2

npm install -g pm2
复制代码

用pm2启动node服务:

pm2 start app.js -i max -n node-koa-pm2
复制代码

curl服务器本地访问(pm2启动后):

curl http://127.0.0.1:3000/api/test?aa=1 
复制代码

如果成功则返回(pm2启动后):

{"msg":"here is test","query":{"aa":"1"},"queryStr":"aa=1"}
复制代码

pm2常用命名:

跳转(豆瓣)

第四步:安装nginx

安装方式:

源码安装
yum安装: 
复制代码
yum install nginx
复制代码

查看版本:

nginx -v
复制代码

返回示例(错误):

nginx version: nginx/1.16.1
复制代码

第五步:配置nginx

域名解析:

用我阿里云的域名: node.lijicheng.cn

解析到小哥的服务器:182.61.31.56

配置截图如下:

反向代理配置:

一般的nginx默认安装的配置文件都是在:/etc/nginx/conf.d/

进入配置文件目录:

cd /etc/nginx/conf.d/
复制代码

创建配置文件:

touch node.lijicheng.cn.80.conf
复制代码

写入配置文件里粘贴一下代码:

server {
    listen 80;
    server_name node.lijicheng.cn;
    root html;
    index index.html index.htm;
    location /api/ {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
            proxy_pass http://127.0.0.1:3000;
        }
    
    	location / {
            proxy_pass http://127.0.0.1:7001;
        }
        #error_page  404              /404.html;
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }


}
复制代码

检查配置文件是否合格:

nginx -t
复制代码

如果合格,会有如下输出:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
复制代码

至此说明nginx配置没有语法问题了,可以考虑重启了:

nginx -s reload
复制代码

如果有如下报错:

nginx: [error] invalid PID number "" in "/run/nginx.pid"
复制代码

需要重新加载一下配置文件:

nginx -c /etc/nginx/nginx.conf
复制代码

这个时候再重启nginx:

nginx -s reload
复制代码

理论上是成功了的,如果有错误,还得看具体什么错了,然后针对性解决

此时通过域名访问:点击这里访问:http://node.lijicheng.cn:3000/api/test/?t=1

理论上是会有返回,但是因为我的域名是阿里云的,服务器是百度云的,导致百度拒绝了请求,后面将会用百度云的域名解析到服务器(待续)

 

读到这里,或许你已经懂了,或许你还有需要疑问,欢迎评论,也可以添加我微信,有可能后面拉个群 

域名备案好了

一个月过去了,经过小哥的努力,他的域名终于备案好了,备案好了以后我把域名替换上去后重启nginx就跑起来了。

转载自:https://juejin.cn/post/6844904080414867469

标签:node,pm2,代码,ctx,js,nginx,复制
From: https://www.cnblogs.com/panbin2006/p/17197044.html

相关文章

  • 浏览器控制台引入css和js
    varimport_css=document.createElement('link');import_css.setAttribute("rel","stylesheet");import_css.setAttribute("href",'https://cdn.bootcdn.net/ajax/lib......
  • 基于JSP+javaBean的留言板--改进(附源码)
    一、系统的主要功能和特点系统主要实现了以JSP和JavaBean为基础的留言板。主要包括登录、登陆检查、增加留言、查看全部留言信息、查看指定留言信息等功能实现了数据的读......
  • k8s 练习 - node 亲和和反亲和
    假设有3 个节点,具有一下标签:节点名标签w1env=prod,plan=a1,kubernetes.io/hostname=w1w2env=dev,plan=a2,kubernetes.io/hostname=w2w3env=test,plan=a3,kubernetes......
  • Rocky Linux 9 安装 Node.js
    一、概要1.环境(1)RockyLinux9.1(2)Node.js16.0二、安装1.准备(1)更新仓库sudodnfupdate-y(2)安装NPM依赖的构建工具sudoyumgroupinstall'Deve......
  • 遍历JSONObject、JSONArray (适用任意复杂结构类型)
    https://blog.csdn.net/xiangshui021/article/details/120059652?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7......
  • JS系列--【千分位处理和还原】
    1.千分位转化文件utils/common.jsconsttoThousands=function(value,num=0){if(value==null){return}if(value>0){value......
  • fastjson
    1.2.25-1.2.41版本绕过首先我们用以前的脚本打一下:发现报错autoType不允许后面的类加载,查看代码publicClass<?>checkAutoType(StringtypeName,Class<?>expect......
  • 看看CabloyJS是如何异步加载并执行go wasm模块的
    介绍CabloyJS提供了一个内置模块a-wasmgo,将gowasm模块的异步加载运行机制进行了封装,使我们可以非常方便的在CabloyJS项目中引入gowasm,从而支持更多的业务场景开发下面,......
  • 66.mysql的json语法
    Mysql的json语法:#创建json表createtablet_json(idintprimarykey,snamevarchar(20),infojson);#插入json数据insertintot_json(id,sname,info)values(1,'......
  • JS系列---【转化时间格式moment】
    1.先安装momentnpminstallmoment--save2.在main.js进入并加到原型上供全局使用importmomentfrom'moment';//moment.locale('zh-cn');//根据情况需要Vue.prot......