Node.js + MongoDB + Nginx 线上部署

1,701 阅读1分钟

Linux 版本为 centos7

安装 node.js

首先直接使用 yum 安装

$	yum -y install nodejs

但是此时并不是最新的版本, 应该是6.xxx,可以使用 node -v 查看;

升级到最新版本

首先安装 n(nodejs 管理工具)

$ npm install -g n

安装完成后安装 node.js 最新版本

$ n latest

然后使用

$ n

选择最新版本。

接着全局改变 nodejs 版本

$ vim ~/.bash_profile

并在其中输入

export N_PREFIX=/usr/local #node实际安装位置
export PATH=$N_PREFIX/bin:$PATH

保存并退出,在用下面命令刷新

$ source ~/.bash_profile

这边就升级成功了,再检查下版本吧。

安装 MongoDB

首先编写 yum 库文件

$  sudo vi /etc/yum.repos.d/mongodb-org.repo

将下面文本写入

[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

保存并退出;
检查可用库:

$  yum repolist

如果看到

. . .
repo id                          repo name
mongodb-org-3.2/7/x86_64         MongoDB Repository
. . .

就可以进行安装操作

$  sudo yum install mongodb-org

安装结束后,启动它

$  sudo systemctl start mongod

安装 Nginx

前期准备

$  yum install gcc-c++
$  yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel

安装结束后,执行安装 Nginx 的命令:

$  yum install nginx -y

反向代理配置

进入 nginx 文件夹

$  cd /etc/nginx

打开配置文件:

$  vim nginx.conf

忽略其他,我们看 server, 删除多余的,将 server 改造成下面这样:

    server {
        listen       80;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

然后我们新增自己的代理配置,类似于下面:

    server {
        listen 80;
        server_name xxx.com www.xxx.top;
        location / {
                proxy_pass http://127.0.0.1:8080;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_set_header X-Nginx-Proxy true;
                proxy_redirect off;
        }
    }

解释下:

  • server_nme 是域名,这边可以配置一级或者二级域名;
  • proxy_pass 是ip,通常直接以 127.0.0.1 代替,当然你也可以写你云服务器的公网ip;

其他的照着写就👌, 上面文本达成的效果是,使用 server_name 代替直接访问 ip.
Ps. server_name 只能填写域名解析后的域名,并且需要在云服务器安全组中添加 80 端口的支持规则。

SSL 配置

首先要申请证书,并且下载到本地。
通常它们会是这样命名:

// xxx 是域名
cert-1541562634350_xxx.crt
cert-1541562634350_xxx.key

下载完后,使用 FTP 等同类工具上传到云服务器上,在 /etc/nginx 文件夹下创建 cert,将这这两个文件移到这个文件夹下;

接着编写 nginx.conf

    server {
        listen       443 ssl;
        server_name  *.xxx.com;
        root         /usr/share/nginx/html;

        ssl_certificate /etc/nginx/cert/cert-1541562634350_www.funnyfm.top.crt;
        ssl_certificate_key /etc/nginx/cert/cert-1541562634350_www.funnyfm.top.key;
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        location / {
                proxy_pass http://127.0.0.1:8080;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $http_host;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

几个注意点:

  • SSL 监听的是 443 端口,需要在安全规则中添加;
  • 每一个 SSL server 需要对应一个 http 80 的server

编写结束后,需要重启 Nginx

$  nginx -s reload

好了,现在可以使用 xxx.com 来代替直接访问 ip 了。