CentOS7使用Nginx和pm2部署vue和node服务

最近有点迷恋了Linux系统的部署项目,个人在整个安装部署过程中遇到各种各样的坑,所以在这里我决定写一篇从0开始的部署文档,以供大家参考。废话不多说,咱们直接切入主题。。。

​ 首先我们有了服务器,先把mysql数据库安装上,这里就不多说了,如果有不明白的小伙伴,请进入这里

​ 通常数据库安装完成之后,连接时候还会遇到一个坑,在命令行中可以正常登陆使用数据库,但是通过客户端连接时候,常常会报错,那么这个时候参考一下这篇文章,希望可以帮到你。接下来,我就来说说具体的配置以及部署过程。

1、Nginx的安装以及配置

​ nginx是一个开源且高性能、可靠的HTTP中间件和代理服务器

  1. 操作系统

    CentOS>7.0,位数 X64

  2. CentOS系统关闭防火墙

    停止防火墙      systemctl stop firewalld.service  
    永久关闭防火墙   systemctl disable firewalld.service  
    
  3. 确认停用selinux

    • 安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。
    • SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。
    检查状态       getenforce
    检查状态       /usr/sbin/sestatus -V
    临时关闭       setenforce 0
    永久关闭       vi /etc/selinux/config   将SELINUX=enforcing改为SELINUX=disabled
    
  4. 安装系统以来模块

    yum  -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
    yum  -y install wget httpd-tools vim
    

    安装完成都看到Complete!标识都安装成功。


    安装依赖.png
  5. 安装Nginx

    下载地址

  6. 使用yum安装

    本人安装使用的第二种方式,使用yum安装Nginx

    首先进入yum.repos.d目录下创建nginx.repo文件,将官网的配置文件粘贴进去

    vi /etc/yum.repos.d/nginx.repo

    贴入官方配置信息

    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    
    [nginx-mainline]
    name=nginx mainline repo
    baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://nginx.org/keys/nginx_signing.key
    
下载.png

安装配置.png
配置nginx安装文件.png
 安装

 ```
 yum install nginx -y
 查看安装好的Nginx信息
 nginx -v
 nginx -V
 ```

 好了到这里Nginx就算安装上了,至于配置文件先放一放,等项目都拷贝上来,再进行配置。

 这里简单给大家看一下nginx的默认配置信息都代表什么

 /etc/nginx/nginx.conf

 ```
 user  root;   设置nginx服务的系统使用用户 例:我是用root用户  所以我配置的是root
 worker_processes  1;  工作进程数,一般和CPU数量相同 
 
 error_log  /var/log/nginx/error.log warn;   nginx的错误日志  
 pid        /var/run/nginx.pid;   nginx服务启动时的pid
 
 events {
     worker_connections  1024;每个进程允许的最大连接数 10000
 }
 
 http {
     include       /etc/nginx/mime.types;//文件后缀和类型类型的对应关系
     default_type  application/octet-stream;//默认content-type
 
     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"';  //日志记录格式
 
     access_log  /var/log/nginx/access.log  main;//默认访问日志
 
     sendfile        on;//启用sendfile
     #tcp_nopush     on;//懒发送
 
     keepalive_timeout  65;//超时时间是65秒
 
     #gzip  on;gzip压缩
 
     include /etc/nginx/conf.d/*.conf;//包含的子配置文件
 }
 ```

 default.conf

 ```
 server {
     listen       80;  //监听的端口号
     server_name  localhost;  //用域名方式访问的地址
 
     #charset koi8-r; //编码
     #access_log  /var/log/nginx/host.access.log  main;  //访问日志文件和名称
 
     location / {
         root   /usr/share/nginx/html;  //静态文件根目录
         index  index.html index.htm;  //首页的索引文件
     }
 
     #error_page  404              /404.html;  //指定错误页面
 
     # redirect server error pages to the static page /50x.html
     # 把后台错误重定向到静态的50x.html页面
     error_page   500 502 503 504  /50x.html; 
     location = /50x.html {
         root   /usr/share/nginx/html;
     }
 
     # proxy the PHP scripts to Apache listening on 127.0.0.1:80
     # 代理PHP脚本到80端口上的apache服务器
     #location ~ \.php$ {
     #    proxy_pass   http://127.0.0.1;
     #}
 
     # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
     # 把PHP脚本9000端口上监听的FastCGI服务
     #location ~ \.php$ {
     #    root           html;
     #    fastcgi_pass   127.0.0.1:9000;
     #    fastcgi_index  index.php;
     #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
     #    include        fastcgi_params;
     #}
 
     # deny access to .htaccess files, if Apache's document root
     # concurs with nginx's one
     # 不允许访问.htaccess文件
     #location ~ /\.ht {
     #    deny  all;
     #}
 }
 ```

2、Node,npm,cnpm和pm2的安装

  1. 使用二进制方式安装Node,根据自己的操作系统位数选择相应的压缩包。

    • 使用下面命令下载到Linux系统中

    wget https://nodejs.org/dist/v10.16.3/node-v10.16.3-linux-x64.tar.xz

    • 解压下载好的文件:

      xz -d node-v10.16.3-linux-x64.tar.xz
      tar -xvf node-v10.16.3-linux-x64.tar
      
    • 进入解压好的node文件的bin目录下,会看到三个文件node、npm和npx,在这里可以查看node版本号来确认是否成功

      cd node-v10.16.3-linux-x64/bin
      ls
      ./node -v
      
    • 接下来配置一下node和npm的软连接方式,这里因为我安装node是在/root目录下进行的,因为普通用户是没有/root下的权限,所以需要映射出来,可以提供给其他用户使用,不行你可以直接在CentOS系统中直接执行node -v是报错的。一般有两种方式添加映射连接方式,第一种是软连接,第二种就是配置环境变量。本文中就用第一种方式,有兴趣的话可以自己查查第二种方式如何配置。

      我们将node和npm连接到/usr/local/bin目录下,操作如下

      ln -s /node-v10.16.3-linux-x64/bin/node  /usr/local/bin/node
      ln -s /node-v10.16.3-linux-x64/bin/npm  /usr/local/bin/npm
      

      执行完之后可以进如/usr/local/bin目录下查看是否有node和npm文件,如果有,说明成功。

      现在再执行npm-v和node-v就能看到对应的版本信息了

    软连接.png
 * 接下来使用npm来安装cnpm和pm2,安装成功之后同样需要软连接配置到/usr/local/bin目录下。

   ```
   npm install -g cnpm --registry=https://registry.npm.taobao.org
   npm install -g pm2
   ```

   软连接cnpm和pm2

   ```
   ln -s /node-v10.16.3-linux-x64/bin/cnpm  /usr/local/bin/cnpm
   ln -s /node-v10.16.3-linux-x64/bin/pm2  /usr/local/bin/pm2
   ```
全部软连接.png

3、部署vue项目和Node(Koa2)服务

  1. vue项目打包部署

    • 打包的vue项目中不能存在debugger,否则打包失败
    • 注意自己的项目是否开启路由的history模式,后面配置nginx会有不同
  2. Koa2服务部署

    • 因为是node服务,直接把本地的项目除了node_modules文件和自己的一下不需要的文件过滤到拷贝到服务器指定的目录下面就可以,然后再服务器上运行cnpm install 或者npm install命令来安装依赖包,安装完之后,在此执行npm start测试node服务时候启动成功。
部署目录.png
  1. 配置nginx配置文件,来代理vue项目和node服务

    直接进入nginx的default.conf配置文件来配置就行

    server {
        listen       52525; # 访问端口
        server_name  127.0.0.1; #这里配置的IP为虚拟机的连接IP 如果是阿里云则改为公网IP
    
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
    
        location / {
            root   /home/lvsq/Web; # vue项目存放的静态地址
            index  index.html index.htm;
            try_files $uri $uri/ /index.html; # vue路由开启history模式 需要这里特殊配置一下
            error_page 405 =200 http://$host$request_uri; # 方式部署完成之后报405错误
        }
    
        # 代理node服务
        location ~ /api {
            proxy_pass http://127.0.0.1:2019; # node服务启动的端口
        }
    
        #error_page  404              /404.html;  //指定错误页面
    
        # redirect server error pages to the static page /50x.html
        # 把后台错误重定向到静态的50x.html页面
        error_page   500 502 503 504  /50x.html; 
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        # 代理PHP脚本到80端口上的apache服务器
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        # 把PHP脚本9000端口上监听的FastCGI服务
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
    
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        # 不允许访问.htaccess文件
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    

    配置完之后一定记得重启nginx

    启动nginx   systemctl start nginx.service
    停止nginx   systemctl stop nginx.service
    重启nginx   systemctl restart nginx.service
    重新加载配置 systemctl reload nginx.service
    
  2. pm2管理node服务

    进入Koa2服务目录,执行启动命令

    pm2 start ./bin/www --watch

    pm2启动.png

pm2常用命令

停止node服务 根据项目ID停止    pm2 stop 0
停止node服务 根据名称停止       pm2 stop www
停止node服务 根据js文件停止      pm2 stop ./bin/www

除了第一次启动需要用js文件启动  其余启动都可以根据ID启动了

设置开机自启应用

1、保存当前进程状态  pm2 save
2、生成开机自启命令  pm2 startup
3、保存         pm2 save
pm2 list查看是否成功
pm2开机自启.png
pm2开机自启2.png
  1. 到这里一切配置结束,接下来打来浏览器看是否可以正常访问

    界面.png
界面2.png

​好了,希望能给大家带来帮助,如果感觉还可以,麻烦给个赞!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容