node服務開發和服務器部署(node.js+koa2+pm2+nginx)教程(帶視頻)

我爲何要寫這篇文章

昨天晚上有個小哥發維信給我,問我怎麼部署一個node服務,有沒有相關教程,我有點震驚,就問他有哪些不懂,他說幾乎都不懂。我想他應該也是找過相關教程了,只是看不懂或者沒法理解。html

我讓他把他不懂的東西寫出了,我出一個視頻,從頭至尾講。他說都不懂,你會不會打死我,我說我能理解你,你不是一我的,是一個羣體的表明,既然你不懂,也會有部分人不懂,因此我決定從頭開始講講怎麼用node開發一個服務,在服務器上部署,並用域名解析。node

視頻地址:

B站(點擊跳轉)nginx

涉及到的知識點

node.js、koa二、koa-router、pm二、nginx、Linuxgit

教程結構

第一步:寫一個node服務

寫一個node服務有不少種方式:express

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

這裏咱們用koa2寫一個:

建立一個項目node-koa-pm2:npm

mkdir node-koa-pm2 && cd node-koa-pm2 && npm init -y
複製代碼

安裝koa和koa-router:centos

npm install koa koa-router --save
複製代碼

至此,項目建立成功,在根目錄下建立app.js:api

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
複製代碼

當前的目錄結構以下圖:bash

根目錄下啓動服務:

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

理論上是會有返回,可是由於個人域名是阿里雲的,服務器是百度雲的,致使百度拒絕了請求,後面將會用百度雲的域名解析到服務器(待續)

讀到這裏,或許你已經懂了,或許你還有須要疑問,歡迎評論,也能夠添加我微信,有可能後面拉個羣

相關文章
相關標籤/搜索