Node服务器开发和部署
第一步:写一个Node服务
方法1:Express编写
mkdir node_server && cd node_server && npm init -y
npm install express
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);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
Welcome to our website.
</body>
</html>
node server.js
http://localhost:3000
至此,第1步的node服务创建完成!
方法2:Koa2编写
mkdir node_koa_server && cd node_koa_server && npm init -y
npm install koa koa-router –save
至此,项目创建成功
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);
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 server.js
至此,第一步的node服务创建完成!
方法3:原生Node编写
…
第二步:拥有一台服务器
- 购买:阿里云、腾讯yun、百度云、华为云等,系统:Ubuntu
- VMware配置Ubuntu虚拟机
(一)Ubuntu如何开启22端口支持ssh访问
ifconfig
执行后如果提示服务不存在,则需要下载net-tools网络工具
sudo apt install net-tools
ping yourUbuntuIpAdress
netstat -nltp|grep 22
- -n 不以进程的服务名称,以编号port number显示
- -t 列出tcp网络封包的信息
- -l 列出目前正在网络监听listen服务
- -p 列出该网络服务的进程
如果发现没有22端口进程,则执行如下命令:
sudo apt-get install openssh-server
sudo apt-get install ufw
sudo ufw enable
sudo ufw allow 22
(二)安装Git
Ubuntu安装git,在Ubuntu上安装Git可以通过以下步骤进行:
打开终端。
首先更新你的包列表:
sudo apt-apt update
sudo apt-get install 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。
首先,打开您的终端并运行以下命令来安装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 –version
nvm list-remote
使用nvm安装Node.js的特定版本非常简单,您只需要指定所需版本的Node.js即可。例如,如果想安装Node.js 14.17.0版本,运行:
nvm install 16.20.2
成功执行后,nvm将安装Node.js 16.20.2 及其包管理器npm。
如果您已经安装了多个版本的Node.js,可以通过以下命令在它们之间切换:
nvm use <version>
例如,如果想切换到Node.js 12.22.1,您可以运行:
nvm use 12.22.1
可以通过下面的命令查看所有已安装的Node.js版本:
nvm ls
为了避免每次打开新会话时都要切换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
如果出现未安装(或者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当前所在的文件夹)
上传文件夹下多个文件,选中文件夹下所有文件(或者几个)文件即可
从服务器下载文件(sz)sz filename
下载文件夹下所有文件 sz filename1 filename2 …(下载多个文件) 或者 sz \\*.\\*(下载所有文件)
其他功能 rz –help自己探索吧。
方法2:通过FileZilla上传
第四步:安装并使用PM2
通过pm2启动Node服务
- 保证pm2 start xx.js成功
- 通过curl能访问
(一)安装PM2并启动Node服务
npm install -g pm2
pm2 –version
cd node_server
npm install
pm2 start bin/www 或 pm2 start server.js
pm2 start server.js –name wb123
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 logs
pm2 logs www
pm2 restart www
pm2 restart all
(二)通过Curl访问,网站是否正常启动
curl http://127.0.0.1:3000
第五步:安装Nginx
目标:nginx安装成功
- 没有报错
- 能显示版本
sudo apt-get install nginx
nginx -v
第六步:配置Nginx
目标:能用绑定的域名访问
- nginx映射域名
- 域名访问成功
(一)反向代理配置
一般的nginx默认安装的配置文件都是在:/etc/nginx/conf.d/
cd /etc/nginx/conf.d/
sudo touch server.conf
sudo apt install vim
Vim基本使用 Vim 有多种工作模式,以下是一些基本使用方法:
- 普通模式:打开 Vim 后默认进入普通模式,可使用方向键或h、j、k、l键移动光标,使用x键删除字符,使用dd命令删除整行;
- 插入模式:在普通模式下,按下i、a、o等键可进入插入模式,此时可输入文本;
- 命令模式:在普通模式下,输入:进入命令模式,可执行保存、退出、查找、替换等操作;
- 可视化模式:在普通模式下,按下v键进入可视化模式,可选择文本进行复制、粘贴、删除等操作;
- 替换模式:在普通模式下,按下R键进入替换模式,可替换文本。
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! 。
这里注意需要修改 ·/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
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端口访问解决
ps -ef | grep nginx
sudo ufw allow 80
第八步:访问服务
在主机中通过输入网址进行访问
http://UbuntuIpAdress
评论前必须登录!
注册