【转载】node服务开发和服务器部署(node.js+koa2+pm2+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

posted @ 2023-03-09 09:01  panbin_2006  阅读(234)  评论(0编辑  收藏  举报