Node服务器开发和部署

Node服务器开发和部署

第一步:写一个Node服务

方法1:Express编写

  1. 创建一个项目:node_server
mkdir node_server && cd node_server && npm init -y
  1. 安装express:
npm install express
  1. 至此,项目创建成功,在根目录下创建server.js:
var express = require('express');
var http = require('http');
var fs = require('fs');
var app = express();
var path = require('path');app.all('*', function (req, res, next) {res.header("Access-Control-Allow-Origin", "*");res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');res.header("Access-Control-Allow-Headers", "X-Requested-With");res.header('Access-Control-Allow-Headers', 'Content-Type');next();
});app.use('/', express.static('./src/')); //设置静态文件路径
app.use(express.static(path.join(__dirname, 'static')));
app.get('/', function (req, res, next) {res.writeHead(200, {'Content-Type': 'text/html'})fs.readFile('./src/index.html', 'utf-8', function (err, data) {if (err) {throw err;}res.end(data);});
});var port = 3000;
app.listen(port);
console.log('start service');
console.log('please visit: http://localhost:' + port);
  1. src目录下新建index.html文件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>Welcome to our website.
</body>
</html>
  1. 根目录下启动服务:
node server.js
  1. 打开浏览器,输入如下网址
http://localhost:3000

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

方法2:Koa2编写

  1. 创建一个项目node_koa_server:
mkdir node_koa_server && cd node_koa_server && npm init -y
  1. 安装koa和koa-router:
npm install koa koa-router --save

至此,项目创建成功

  1. 在根目录下创建server.js:
const Koa = require('koa');
const app = new Koa();
const router = require('./router')
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);
  1. 在根目录下再创建router.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
  1. 根目录下启动服务:
node server.js
  1. 浏览器访问:http://127.0.0.1:3000/api/test?aa=1

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

方法3:原生Node编写

第二步:拥有一台服务器

    1. 购买:阿里云、腾讯yun、百度云、华为云等,系统:Ubuntu
    1. VMware配置Ubuntu虚拟机

(一)Ubuntu如何开启22端口支持ssh访问

  1. 查看IP地址
ifconfig

执行后如果提示服务不存在,则需要下载net-tools网络工具

  1. 安装IP地址查看工具
sudo apt install net-tools
  1. 在Windows机上Ping是否能通
ping yourUbuntuIpAdress
  1. 查看端口22是否被占用
netstat -nltp|grep 22
  • -n 不以进程的服务名称,以编号port number显示
  • -t 列出tcp网络封包的信息
  • -l 列出目前正在网络监听listen服务
  • -p 列出该网络服务的进程
  1. 安装SSH工具,防火墙和开启22端口

如果发现没有22端口进程,则执行如下命令:

sudo apt-get install openssh-server
sudo apt-get install ufw
sudo ufw enable
sudo ufw allow 22
  1. 用Xshell连接是否成功

(二)安装Git

Ubuntu安装git,在Ubuntu上安装Git可以通过以下步骤进行:

  1. 打开终端。

  2. 首先更新你的包列表:

sudo apt-apt update
  1. 安装Git:
sudo apt-get install git
  1. 安装完成后,验证Git是否正确安装:
git --version

这将安装最新的Git版本,并允许你通过终端使用Git命令。如果你需要配置Git或设置全局参数,你可以使用以下命令:

git config --global user.name "Your Name"
git config --global user.email "youremail@example.com"

这些步骤适用于大多数基于Debian的系统,包括Ubuntu。如果你使用的是Ubuntu的旧版本,可能需要使用apt-get命令替换为apt

(三)安装Curl

在Ubuntu上安装curl的命令如下:

sudo apt update
sudo apt install curl
curl --version

(四)通过Nvm安装Node.js

**nvm(Node Version Manager)**是一个用于管理多个Node.js版本的工具,可让您在同一台机器上安装和维护不同版本的Node.js。

  1. 安装nvm

首先,打开您的终端并运行以下命令来安装nvm:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

上述命令会从nvm的GitHub仓库获取安装脚本并执行。请注意检查GitHub上nvm的最新版本,以便获取最新的安装脚本。

  1. 更新您的会话

运行上述命令后,您通常需要重新开启终端或者重新读入您的bash配置文件,以便使用nvm命令,这可以通过以下任一命令实现:

source ~/.bashrc

或者:

source ~/.profile
  1. 验证nvm是否安装成功
nvm --version
  1. 查看可安装Node版本
nvm list-remote
  1. 安装Node.js

使用nvm安装Node.js的特定版本非常简单,您只需要指定所需版本的Node.js即可。例如,如果想安装Node.js 14.17.0版本,运行:

nvm install 16.20.2

成功执行后,nvm将安装Node.js 16.20.2 及其包管理器npm。

  1. 切换Node.js版本

如果您已经安装了多个版本的Node.js,可以通过以下命令在它们之间切换:

nvm use <version>

例如,如果想切换到Node.js 12.22.1,您可以运行:

nvm use 12.22.1
  1. 查看安装的所有Node.js版本

可以通过下面的命令查看所有已安装的Node.js版本:

nvm ls
  1. 设置默认Node.js版本

为了避免每次打开新会话时都要切换Node.js版本,nvm允许您设置一个默认版本:

nvm alias default <version>

例如,要将默认版本设置为14.17.0:

nvm alias default 14.17.0

通过以上步骤,您可以在Ubuntu系统上灵活地安装和管理不同版本的Node.js。这种方法让开发者能够根据不同项目的需要选择合适的Node.js版本,同时也使版本切换变得非常方便。而且,nvm能够为每个项目独立管理依赖,从而确保不同项目之间的环境隔离,增强了开发环境的稳定性和可维护性。

第三步:上传Server文件

方法1:通过Xshell的命令上传

打开Xshell,连上一台Linux服务器或者是虚拟机,如果要方便的上传文件,需要rz命令

  1. 先测试是否安装rz
rz

如果出现未安装(或者command not found)且建议sudo apt install lrzsz(Ubuntu)

那么键入sudo apt install lrzsz 并输入密码,安装好lrzsz。

可以开始上传文件啦!

定位到需要上传文件的目录

cd /home/rambo
sudo mkdir app
cd app

本地上传到服务器(rz命令)

键入rz -y,会唤起文件选择 ,选择文件->打开,即可上传(上传的位置就是Xshell当前所在的文件夹)

  1. 上传文件夹下多个文件,选中文件夹下所有文件(或者几个)文件即可

  2. 从服务器下载文件(sz)sz filename

  3. 下载文件夹下所有文件 sz filename1 filename2 ...(下载多个文件) 或者 sz \*.\*(下载所有文件)

  4. 其他功能 rz --help自己探索吧。

方法2:通过FileZilla上传

  1. 登录账号
  2. 定位到上传文件夹
  3. 拖拽文件夹进行上传

第四步:安装并使用PM2

通过pm2启动Node服务

    1. 保证pm2 start xx.js成功
    1. 通过curl能访问

(一)安装PM2并启动Node服务

  1. 全局安装PM2
npm install -g pm2
  1. 检查PM2是否安装成功
pm2 --version
  1. 进入项目根目录
cd node_server
  1. 安装项目依赖
npm install
  1. 启动进程/应用
pm2 start bin/www 或 pm2 start server.js
  1. 重命名进程/应用
pm2 start server.js --name wb123
  1. 添加进程/应用 watch
pm2 start bin/www --watch
  1. 结束进程/应用
pm2 stop www
  1. 结束所有进程/应用
pm2 stop all
  1. 删除进程/应用
pm2 delete www
  1. 删除所有进程/应用
pm2 delete all
  1. 列出所有进程/应用
pm2 list
  1. 查看某个进程/应用具体情况
pm2 describe www
  1. 查看进程/应用的资源消耗情况
pm2 monit
  1. 查看pm2的日志
pm2 logs
  1. 若要查看某个进程/应用的日志,使用
pm2 logs www
  1. 重新启动进程/应用
pm2 restart www
  1. 重新启动所有进程/应用
pm2 restart all

(二)通过Curl访问,网站是否正常启动

curl http://127.0.0.1:3000

第五步:安装Nginx

目标:nginx安装成功

    1. 没有报错
    1. 能显示版本
  1. 安装Nginx
sudo apt-get install nginx
  1. 查看Nginx版本
nginx -v

第六步:配置Nginx

目标:能用绑定的域名访问

    1. nginx映射域名
    1. 域名访问成功

(一)反向代理配置

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

  1. 进入配置文件目录
cd /etc/nginx/conf.d/
  1. 创建配置文件
sudo touch server.conf
  1. 在 Ubuntu 系统中可以使用以下命令安装 Vim
sudo apt install vim

Vim基本使用
Vim 有多种工作模式,以下是一些基本使用方法:

  • 普通模式:打开 Vim 后默认进入普通模式,可使用方向键或h、j、k、l键移动光标,使用x键删除字符,使用dd命令删除整行;
  • 插入模式:在普通模式下,按下i、a、o等键可进入插入模式,此时可输入文本;
  • 命令模式:在普通模式下,输入:进入命令模式,可执行保存、退出、查找、替换等操作;
  • 可视化模式:在普通模式下,按下v键进入可视化模式,可选择文本进行复制、粘贴、删除等操作;
  • 替换模式:在普通模式下,按下R键进入替换模式,可替换文本。
  1. 使用 Vim 编辑文本文件
vim server.conf
  1. 写入配置文件

    在配置文件里粘贴以下代码,注意其中的路径 /home/ubuntu/node_server 应和上述上传的路径同名,否则找不到服务地址

server {listen 80;server_name 127.0.0.1;location = / {index index.html;root /home/ubuntu/node_server/src;}location ~* \.html {root /home/ubuntu/node_server/src;}location ~* \.(ttf|woff|gif|jpg|png|js|css)$ {root /home/ubuntu/node_server/src;}location / {proxy_pass http://127.0.0.1:3000;}#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;}
}

进入 Vim 后,默认处于普通模式。
要进入插入模式来编辑文本,可以按 i(在当前光标位置前插入)、a(在当前光标位置后插入)、o(在当前行下一行插入新行并进入插入模式)等键。
在插入模式下进行文本的输入、修改等操作。
编辑完成后,按 Esc 键回到普通模式。
在普通模式下,可以进行删除、复制、粘贴等操作,例如 dd 可删除当前行,yy 可复制当前行。
若要保存文件,在普通模式下输入 :w 。
若要退出 Vim ,输入 :q 。如果想保存并退出,输入 :wq 。如果有未保存的更改且不想保存直接退出,输入 :q! 。

  1. Nginx跳转默认欢迎页面的问题

这里注意需要修改 ·/etc/nginx/nginx.conf·文件中的一行代码注释掉,否则Nginx会调用默认的配置,访问时会跳转到默认的Nginx欢迎页面

# include /etc/nginx/sites-enabled/*;
  1. 检查配置文件是否合格
sudo nginx -t

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

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
  1. 至此说明nginx配置没有语法问题了,可以考虑重启了:
sudo nginx -s reload

如果有如下报错:

nginx: [error] invalid PID number "" in "/run/nginx.pid"

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

nginx -c /etc/nginx/nginx.conf

这个时候再重启nginx:

sudo nginx -s reload

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

(二)Nginx 403 解决方法

1. 启动用户和nginx工作用户不一致所致

查看nginx的启动用户:打开nginx.conf文件

sudo vim nginx.conf

user www-data; 修改为 user root;

2. nginx.conf中缺少index的指定的文件

查看nginx的配置:打开nginx.conf文件

server {  listen       80;  server_name  localhost;index  index.html;root  /opt/html/;
}

如果在/opt/html/下面没有index.html的时候,会报403 forbidden。

3. 权限问题,如果nginx没有操作权限,也会出现403错误

解决办法:修改/opt/html/目录的读写权限,或者是把nginx的启动用户改成目录的所属用户,重启Nginx即可解决

chmod -R 777 /opt/html/
4. SELinux设置为开启状态(enabled)的原因

查看当前selinux的状态。

/usr/sbin/sestatus

将SELINUX=enforcing 修改为 SELINUX=disabled 状态。

vi /etc/selinux/config
#SELINUX=enforcing
SELINUX=disabled   #注释之前,替换为这个

重启生效:reboot。

第七步:服务器安装了nginx 不能通过80端口访问解决

  1. 检查Nginx是否开启
ps  -ef | grep nginx
  1. 放开80端口
sudo ufw allow 80

第八步:访问服务

在主机中通过输入网址进行访问

http://UbuntuIpAdress

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/50866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用在UE5中使用AirSim插件Eigen库头文件引用报错,出现报错的解决方式

一、概述 如图所示&#xff0c;用红线圈出的两条头文件引用会报错&#xff0c;提示无法找到他们&#xff0c;但是可以发现的是&#xff0c;他们的路径书写是没有问题的。 // #include <Source/Airlib/deps/eigen3/Eigen/Core> // #include <Source/Airlib/deps/eigen…

Android 线程并发:线程通信:Handler机制

文章目录 API源码分析操作总结 API Handler相关 Handler对象.sendMessage(Message) 发送消息 Handler对象.handleMessage()空方法 自定义Handler重写handleMessage方法&#xff0c;处理Message Looper相关 Looper.getMainLooper() 获取App的UI线程的Looper对象 Looper…

【网络爬虫技术】(1·绪论)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;网络爬虫开发技术入门_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 …

日拱一卒 | JVM

文章目录 什么是JVM&#xff1f;JVM的组成JVM的大致工作流程JVM的内存模型 什么是JVM&#xff1f; 我们知道Java面试&#xff0c;只要你的简历上写了了解JVM&#xff0c;那么你就必然会被问到以下问题&#xff1a; 什么是JVM&#xff1f;简单说一下JVM的内存模型&#xff1f;…

梯度下降算法,gradient descent algorithm

定义&#xff1a;是一个优化算法&#xff0c;也成最速下降算法&#xff0c;主要的部的士通过迭代找到目标函数的最小值&#xff0c;或者收敛到最小值。 说人话就是求一个函数的极值点&#xff0c;极大值或者极小值 算法过程中有几个超参数&#xff1a; 学习率n&#xff0c;又称…

代码随想录算法训练营第22天-leetcode-回溯算法part01:

#回溯算法理论基础 能解决的问题&#xff1a; 组合问题&#xff1a;N个数里面按一定规则找出k个数的集合切割问题&#xff1a;一个字符串按一定规则有几种切割方式子集问题&#xff1a;一个N个数的集合里有多少符合条件的子集排列问题&#xff1a;N个数按一定规则全排列&…

大数据——HBase原理

摘要 HBase 是一个开源的、非关系型的分布式数据库系统&#xff0c;主要用于存储海量的结构化和半结构化数据。它是基于谷歌的 Bigtable 论文实现的&#xff0c;运行在 Hadoop 分布式文件系统&#xff08;HDFS&#xff09;之上&#xff0c;并且可以与 Hadoop 生态系统的其他组…

太美了!智能汽车触摸屏中控让驾驶员和乘客目不转睛

太美了&#xff01;智能汽车触摸屏中控让驾驶员和乘客目不转睛 引言 艾斯视觉作为行业ui设计和前端开发领域的从业者&#xff0c;其观点始终认为&#xff1a;智能汽车已经成为现代交通的新宠。其中&#xff0c;触摸屏中控系统以其美观、智能、人性化的特点&#xff0c;为驾驶…

Electron的入门介绍与使用React18+Vite+Electron(2)共30节

上一篇讲了如何安装Electron和简单例子&#xff0c;Electron的入门介绍与使用&#xff08;1&#xff09;共30节 让我们回顾一下Electron的发展历史&#xff0c;Electron 最初由 GitHub 公司开发&#xff0c;最早用于构建 GitHub Desktop。随着其成功&#xff0c;Electron 逐渐…

在线投稿小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;编辑管理&#xff0c;用户文章管理&#xff0c;文章分类管理&#xff0c;文章展示管理&#xff0c;文章稿酬管理&#xff0c;通知公告管理&#xff0c;系统管理 微信端账号功能包…

从零开始的Python开发日记(3):Flask框架的使用

最近学会了使用Python的Flask框架&#xff0c;并通过该框架实现API的调用以及转发&#xff0c;以下是flask框架下前后端的数据交互模式 后端&#xff1a;python 的 flask 框架 前端&#xff1a;html、css、js前后端数据交互的方式&#xff1a; 一、前端发送数据&#xff0c;后…

Unity ParticleSystem:创造魔法般的视觉效果

Unity的ParticleSystem是一个功能强大的组件&#xff0c;用于创建各种动态的粒子效果&#xff0c;如火焰、烟雾、雨滴、爆炸等。它不仅可以用于增加游戏的视觉吸引力&#xff0c;还可以用于实现复杂的动画效果。本文将探讨如何使用Unity的ParticleSystem组件来实现动画效果。 …

2022.11.17 阿里钉钉数据开发岗位一面

今天晚上和阿里钉钉面试官聊了一面&#xff0c;整个过程持续45分钟&#xff0c;还是相当持久的。前面先让我自我介绍&#xff0c;包括自身背景、工作经历和项目经验&#xff0c;在介绍的时候面试官几次打断&#xff0c;让我停下来&#xff0c;然后他提问&#xff0c;我很纳闷还…

59 阻塞和非阻塞IO

阻塞式io 一个简单的用户输入回显功能&#xff0c;在用户未输入内容时&#xff0c;会一直阻塞住 #include <iostream> #include <unistd.h>using namespace std; int main() {char buff[1024];while (true){cout << "please enter ";fflush(stdo…

VAD: 向量化场景表示,用于高效的自动驾驶

VAD: Vectorized Scene Representation for Efficient Autonomous Driving VAD: 向量化场景表示&#xff0c;用于高效的自动驾驶 https://github.com/hustvl/VAD Abstract Autonomous driving requires a comprehensive understanding of the surrounding environment for …

英语单词终极记忆

你应当知道一个专业术语&#xff0c;叫COCA。 这个单词很好记&#xff0c;但你可能记不住。 你应当这样记&#xff1a; 你记住了 可口可乐&#xff0c;也就记住了 coca &#xff08;谐音&#xff1a;可口&#xff09;。 从而记住了 COCA。 无论如何&#xff0c;你这辈子&…

react版本判断是否面包含

react-admin: react版本 import { useState,useEffect } from react import ./Secene.css import { Checkbox } from "antd"; import* as turf from turf/turf; import type { CheckboxProps } from antd; // const onChange: CheckboxProps[onChange] (e) >…

机械硬盘更换判断方法

1. 频繁出现坏道&#xff1a;通过硬盘检测工具检测到硬盘存在大量坏道&#xff0c;且修复后仍不断出现&#xff0c;这可能意味着硬盘即将损坏。 2. 数据读写错误增多&#xff1a;在读写数据时频繁出现错误提示&#xff0c;文件损坏或丢失的情况频繁发生。 3. 异常噪音&#xff…

Spring Boot + Spring Batch + Quartz 整合定时批量任务

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 前言 最近一周&#xff0c;被借调到其他部门&#xff0c;赶一个紧急需求&#xff0c;需求内容如下&#xff1a; PC网页触发一条设备升级记录&#xff08;下图&#xff09;&#xff0c;后台要定时批量设备更…

宝塔/Linux/docker安装zincsearch

安装步骤 创建zincsearch目录 mkdir -p /www/wwwroot/zincsearch/data 修改目录权限 chmod arwx /www/wwwroot/zincsearch/data 创建实例 mkdir data docker run -v /www/wwwroot/zincsearch/data:/data -e ZINC_DATA_PATH"/data" -p 4080:4080 \-e ZINC_FIRST…