(1)安装node
wget http://nodejs.org/dist/v9.9.0/node-v9.9.0-linux-x64.tar.gz #下载
tar xvzf node-v9.9.0-linux-x64.tar.gz #解压
cd node-v9.9.0-linux-x64 #进入解压文件目录
(2)安装必要的文件
sudo yum install gcc gcc-c++
(3)配置node、npm软连接
ln -s /root/node-v9.9.0-linux-x64/bin/node /usr/local/bin/node
ln -s /root/node-v9.9.0-linux-x64/bin/npm /usr/local/bin/npm
(4)安装查看
node -v #查看版本
(1)pm2的安装
npm i pm2 -g
(2)配置pm2的软链接
ln -s /root/node-v9.9.0-linux-x64/bin/pm2 /usr/local/bin/pm2
(1)nginx的安装
yum install nginx
git clone git@xxxxxxx/xxxxx.git #或者直接上传项目文件夹
cd xxx #进入项目目录
npm i #安装npm包
npm run build #打包项目,命令根据自己设定的
(1)pm2启动文件配置(可在项目文件夹根目录下)
方式1:yml配置
apps:
- script: /root/projects/VUE-SSR-TECH/server/server.js
name: vue-todo
env_production:
NODE_ENV: production
HOST: localhost
PORT: 8888
ym2.yml
方式2:json配置
{
"apps":
{
"name": "todo",
"cwd": "/root/projects/VUE-SSR-TECH",
"script": "/root/projects/VUE-SSR-TECH/server/server.js",
"exec_interpreter": "bash",
"min_uptime": "60s",
"max_restarts": 30,
"exec_mode" : "cluster_mode",
"error_file" : "./test-err.log",
"out_file": "./test-out.log",
"pid_file": "./test.pid",
"watch": true,
"env": {
"NODE_ENV": "production",
"HOST": "127.0.0.1",
"PORT": "8888"
}
}
}
app.json
(2)nginx配置(可在项目文件夹根目录下)
upstream todo {
server 127.0.0.1:8888; #这里要和启动项目的PORT端口一致
keepalive 64;
}
server {
listen 80;
server_name www.helpping.top; #填写必须是已备案的域名,不然解析会出错。没有域名可填写服务器ip
root /root/projects/VUE-SSR-TECH; #项目favicon.ico所在文件夹
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwardered-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
proxy_set_header Connection '';
proxy_pass http://todo; #这里要和最上面upstream后的应用名一致,可以自定义
}
location ~ \.(txt)$ {
root /var/www/jnode/;
}
}
todo.conf
说明:在centos里nginx有默认启动配置在etc/nginx/nginx.conf文件中
一般不修改这个文件,但有时因为权限需要,可以修改第5行的用户
修改用户为nginx用户
# 启动nginx
sudo ln -s /root/projects/VUE-SSR-TECH/todo.conf /etc/nginx/conf.d/ #nginx启动文件的软链接
service nginx start #启动nginx服务
cd xxx #进入项目根目录
# 启动pm2(选择其中一条命令)
pm2 start pm2.yml #启动,启动端口为项目默认端口
pm2 start app.json #启动,启动端口为项目默认端口
pm2 start pm2.yml --env production # 启动,启动端口为pm2.yml中env_production下指定端口
pm2 start app.json --env production # 启动,启动端口为app.json中env_production下指定端口
此时输入浏览器中输入域名(本案例为: www.helpping.top),即可看到页面
关键
很多次设置域名后,启动不是跳nginx默认页面就是502,实质上都是nginx启动成功后找不到pm2页面的启动端口所致。很多时候我们查看pm2 list发现项目启动运行了,ps -ef | grep nginx发现nginx也启动了,但就是找不到网关,很大原因就是这个端口设置和启动方式不匹配的原因(花了很久才发现问题所在TVT)
jtodo.conf中的upstream todo {server 127.0.0.1:8888}端口设置和启动命令选择的端口要一致。
我这里设置的todo.conf和ym2.yml(或者app.json)设置都是8888的端口,所以启动的时候命令要使用yml/json中新设置的
pm2 start pm2.yml --env production # 启动,启动端口为pm2.yml中env_production下指定端口
pm2 start app.json --env production # 启动,启动端口为app.json中env_production下指定端口
这样才能找到
如果不想带env的参数,就要在项目的server.js文件中查找启动端口
我这里很明显是端口号是3333
upstream todo {
server 127.0.0.1:3333; #这里要和启动项目的PORT端口一致
keepalive 64;
}
那么,设置todo.conf的端口就要为3333
启动命令可以简化(2选1)
pm2 start pm2.yml #启动,启动端口为项目默认端口
pm2 start app.json #启动,启动端口为项目默认端口
1.pm2更新启动
pm2 -i /root/projects/VUE-SSR-TECH/pm2.yml & #添加pm2软链接
pm2 start pm2.yml #启动pm2
2.conf更新启动
rm /etc/nginx/conf.d/todo.conf -rf #强制删除之前已存在的nginx启动软链接文件
sudo ln -s /root/projects/VUE-SSR-TECH/todo.conf /etc/nginx/conf.d/ #重新添加nginx启动软链接
lsof -i tcp:80 #查看服务器域名(端口默认80)所在进程
kill 12344 #杀死nginx的进程
sudo /usr/sbin/nginx #启动nginx(service nginx start)
server {
listen 80;
server_name a.com;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8082;
}
}
server {
listen 80;
server_name b.com;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8083;
}
conf文件配置
参考文档
1.在CentOS 7上安装Node.js的4种方法(包含npm):https://blog.csdn.net/xuaa/article/details/52262586
2.nginx学习-超详细nginx配置文件:https://www.cnblogs.com/2nao/p/8031866.html
3.Nginx配置文件nginx.conf详解:https://www.cnblogs.com/xuey/p/7631690.html
4.nginx部署多个node站点:https://blog.csdn.net/ziwoods/article/details/77164927