Node服务器开发和部署
第一步:写一个Node服务
方法1:Express编写
- 创建一个项目:node_server
mkdir node_server &&cd node_server &&npm init -y
- 安装express:
npminstall express
- 至此,项目创建成功,在根目录下创建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);
- 在
src
目录下新建index.html文件
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body>
Welcome to our website.
</body></html>
- 根目录下启动服务:
node server.js
- 打开浏览器,输入如下网址
http://localhost:3000
至此,第1步的node服务创建完成!
方法2:Koa2编写
- 创建一个项目node_koa_server:
mkdir node_koa_server &&cd node_koa_server &&npm init -y
- 安装koa和koa-router:
npminstall koa koa-router --save
至此,项目创建成功
- 在根目录下创建server.js:
const Koa =require('koa');const app =newKoa();const router =require('./router')
app.use(async(ctx, next)=>{const start = Date.now();awaitnext();const ms = Date.now()- start;
console.log(`${ctx.method}${ctx.url} - ${ms}ms`);});
app.use(router.routes())
app.listen(3000);
- 在根目录下再创建router.js:
const Router =require('koa-router');const router =newRouter();
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 server.js
至此,第一步的node服务创建完成!
方法3:原生Node编写
…
第二步:拥有一台服务器
- 购买:阿里云、腾讯yun、百度云、华为云等,系统:Ubuntu
- VMware配置Ubuntu虚拟机
(一)Ubuntu如何开启22端口支持ssh访问
- 查看IP地址
ifconfig
执行后如果提示服务不存在,则需要下载
net-tools
网络工具
- 安装IP地址查看工具
sudoaptinstall net-tools
- 在Windows机上Ping是否能通
ping yourUbuntuIpAdress
- 查看端口22是否被占用
netstat -nltp|grep22
- -n 不以进程的服务名称,以编号port number显示
- -t 列出tcp网络封包的信息
- -l 列出目前正在网络监听listen服务
- -p 列出该网络服务的进程
- 安装SSH工具,防火墙和开启22端口
如果发现没有22端口进程,则执行如下命令:
sudoapt-getinstall openssh-server
sudoapt-getinstall ufw
sudo ufw enablesudo ufw allow 22
- 用Xshell连接是否成功
(二)安装Git
Ubuntu安装git,在Ubuntu上安装Git可以通过以下步骤进行:
- 打开终端。
- 首先更新你的包列表:
sudo apt-apt update
- 安装Git:
sudoapt-getinstallgit
- 安装完成后,验证Git是否正确安装:
git--version
这将安装最新的Git版本,并允许你通过终端使用Git命令。如果你需要配置Git或设置全局参数,你可以使用以下命令:
git config --global user.name "Your Name"git config --global user.email "[email protected]"
这些步骤适用于大多数基于Debian的系统,包括Ubuntu。如果你使用的是Ubuntu的旧版本,可能需要使用
apt-get
命令替换为
apt
。
(三)安装Curl
在Ubuntu上安装
curl
的命令如下:
sudoapt update
sudoaptinstallcurlcurl--version
(四)通过Nvm安装Node.js
nvm(Node Version Manager)是一个用于管理多个Node.js版本的工具,可让您在同一台机器上安装和维护不同版本的Node.js。
- 安装nvm
首先,打开您的终端并运行以下命令来安装nvm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh |bash
上述命令会从nvm的GitHub仓库获取安装脚本并执行。请注意检查GitHub上nvm的最新版本,以便获取最新的安装脚本。
- 更新您的会话
运行上述命令后,您通常需要重新开启终端或者重新读入您的bash配置文件,以便使用nvm命令,这可以通过以下任一命令实现:
source ~/.bashrc
或者:
source ~/.profile
- 验证nvm是否安装成功
nvm --version
- 查看可安装Node版本
nvm list-remote
- 安装Node.js
使用nvm安装Node.js的特定版本非常简单,您只需要指定所需版本的Node.js即可。例如,如果想安装Node.js 14.17.0版本,运行:
nvm install16.20.2
成功执行后,nvm将安装Node.js 16.20.2 及其包管理器npm。
- 切换Node.js版本
如果您已经安装了多个版本的Node.js,可以通过以下命令在它们之间切换:
nvm use <version>
例如,如果想切换到Node.js 12.22.1,您可以运行:
nvm use 12.22.1
- 查看安装的所有Node.js版本
可以通过下面的命令查看所有已安装的Node.js版本:
nvm ls
- 设置默认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命令
- 先测试是否安装rz
rz
如果出现未安装(或者command not found)且建议sudo apt install lrzsz(Ubuntu)
那么键入
sudo apt install lrzsz
并输入密码,安装好lrzsz。
可以开始上传文件啦!
定位到需要上传文件的目录
cd /home/rambo
sudomkdir app
cd app
本地上传到服务器(rz命令)
键入rz -y,会唤起文件选择 ,选择文件->打开,即可上传(上传的位置就是Xshell当前所在的文件夹)
- 上传文件夹下多个文件,选中文件夹下所有文件(或者几个)文件即可
- 从服务器下载文件(sz)
sz filename
- 下载文件夹下所有文件
sz filename1 filename2 ...(下载多个文件)
或者sz \*.\*(下载所有文件)
- 其他功能 rz --help自己探索吧。
方法2:通过FileZilla上传
- 登录账号
- 定位到上传文件夹
- 拖拽文件夹进行上传
第四步:安装并使用PM2
通过pm2启动Node服务
- 保证pm2 start xx.js成功
- 通过curl能访问
(一)安装PM2并启动Node服务
- 全局安装PM2
npminstall-g pm2
- 检查PM2是否安装成功
pm2 --version
- 进入项目根目录
cd node_server
- 安装项目依赖
npminstall
- 启动进程/应用
pm2 start bin/www 或 pm2 start server.js
- 重命名进程/应用
pm2 start server.js --name wb123
- 添加进程/应用 watch
pm2 start bin/www --watch
- 结束进程/应用
pm2 stop www
- 结束所有进程/应用
pm2 stop all
- 删除进程/应用
pm2 delete www
- 删除所有进程/应用
pm2 delete all
- 列出所有进程/应用
pm2 list
- 查看某个进程/应用具体情况
pm2 describe www
- 查看进程/应用的资源消耗情况
pm2 monit
- 查看pm2的日志
pm2 logs
- 若要查看某个进程/应用的日志,使用
pm2 logs www
- 重新启动进程/应用
pm2 restart www
- 重新启动所有进程/应用
pm2 restart all
(二)通过Curl访问,网站是否正常启动
curl http://127.0.0.1:3000
第五步:安装Nginx
目标:nginx安装成功
- 没有报错
- 能显示版本
- 安装Nginx
sudoapt-getinstall nginx
- 查看Nginx版本
nginx -v
第六步:配置Nginx
目标:能用绑定的域名访问
- nginx映射域名
- 域名访问成功
(一)反向代理配置
一般的nginx默认安装的配置文件都是在:/etc/nginx/conf.d/
- 进入配置文件目录
cd /etc/nginx/conf.d/
- 创建配置文件
sudotouch server.conf
- 在 Ubuntu 系统中可以使用以下命令安装 Vim
sudoaptinstallvim
Vim基本使用
Vim 有多种工作模式,以下是一些基本使用方法:
- 普通模式:打开 Vim 后默认进入普通模式,可使用方向键或h、j、k、l键移动光标,使用x键删除字符,使用dd命令删除整行;
- 插入模式:在普通模式下,按下i、a、o等键可进入插入模式,此时可输入文本;
- 命令模式:在普通模式下,输入:进入命令模式,可执行保存、退出、查找、替换等操作;
- 可视化模式:在普通模式下,按下v键进入可视化模式,可选择文本进行复制、粘贴、删除等操作;
- 替换模式:在普通模式下,按下R键进入替换模式,可替换文本。
- 使用 Vim 编辑文本文件
vim server.conf
- 写入配置文件在配置文件里粘贴以下代码,注意其中的路径
/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! 。
- Nginx跳转默认欢迎页面的问题
这里注意需要修改 ·/etc/nginx/nginx.conf·文件中的一行代码注释掉,否则Nginx会调用默认的配置,访问时会跳转到默认的Nginx欢迎页面
# include /etc/nginx/sites-enabled/*;
- 检查配置文件是否合格
sudo nginx -t
如果合格,会有如下输出:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
- 至此说明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文件
sudovim 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-R777 /opt/html/
4. SELinux设置为开启状态(enabled)的原因
查看当前selinux的状态。
/usr/sbin/sestatus
将SELINUX=enforcing 修改为 SELINUX=disabled 状态。
vi /etc/selinux/config
#SELINUX=enforcingSELINUX=disabled #注释之前,替换为这个
重启生效:reboot。
第七步:服务器安装了nginx 不能通过80端口访问解决
- 检查Nginx是否开启
ps-ef|grep nginx
- 放开80端口
sudo ufw allow 80
第八步:访问服务
在主机中通过输入网址进行访问
http://UbuntuIpAdress
版权归原作者 智元黑科技 所有, 如有侵权,请联系我们删除。