【转载】node服务开发和服务器部署(node.js+koa2+pm2+nginx)教程
我为什么要写这篇文章
昨天晚上有个小哥发维信给我,问我怎么部署一个node服务,有没有相关教程,我有点震惊,就问他有哪些不懂,他说几乎都不懂。我想他应该也是找过相关教程了,只是看不懂或者无法理解。
我让他把他不懂的东西写出了,我出一个视频,从头到尾讲。他说都不懂,你会不会打死我,我说我能理解你,你不是一个人,是一个群体的代表,既然你不懂,也会有部分人不懂,所以我决定从头开始讲讲怎么用node开发一个服务,在服务器上部署,并用域名解析。
视频地址:
涉及到的知识点
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就跑起来了。