生产环境
概念
应用正式运行的地方叫做生产环境。如果使用 node 开发了服务端应用,在生产环境上面需要支持运行 node 应用,要提供应用需要的数据仓库服务。应用的生产环境可以在一台服务器上搭建,也可以使用多台服务器共同创建,比如可以在一台服务器上安装配置 node,在另一台服务器上搭建数据仓库服务,还可以再找一台服务器提供反向代理服务,这些东西也可以同时在一台服务器上。
在服务器上安装 nodejs
在终端使用 root 用户登录服务器。
1 | dnf search nodejs //在软件仓库搜索nodejs |
安装更新版本的 node:
1 | curl -sL https://rpm.nodesource.com/setup_12.x | bash - //安装这个软件仓库 |
在服务器上安装 mysql
1 | sudo dnf install mysql-server -y //安装mysql |
mysql 安全配置
1 | mysql_secure_installation |
会问几个问题:
- 是否要使用验证密码组件: y
- 三种验证密码组件使用哪个: 2,表示要使用最强的那个
- 请设置 root 用户密码:
如果要使用随机密码可以生成随机字符,新建终端标签
1 | openssl rand -bsse64 32 |
将此密码作为登录密码,输入 y 确定,然后将它并保存到安全的地方。
- 是否要移除掉系统里的匿名用户:y
- 要不要禁止 root 用户远程登录:y
- 是否删除 test 数据仓库: y
- 是否现在重载权限:y
创建新用户与数据仓库
1 | mysql -u root -p //登录到mysql系统 |
有了这个用户后再给它创建个数据仓库:
1 | create database xb2_node; |
设置新创建的用户可以去管理新创建的数据库:
1 | grant all privileges on xb2_node.* to 'xb2_node_operator'@'%'; //将所有的权限分配给'xb2_node_operator'@'%'这个用户 |
查看服务器上的数据库
1 | mysql -u root -p //登录 |
nginx
nginx 是一种 web 服务器,比 node 更擅长接待请求。可以配置反向代理服务。
1 | sudo dnf install nginx -y //安装nginx |
nginx 配置文件
1 | cd /etc/nginx //nginx配置文件的目录 |
选项解释:
user:用户 // linux 中对用户权限有非常严格的要求,当 nginx 要读取文件时,就要保证这个用户对文件拥有读取权限。nginx 在运行时会用到缓存,还有写入一些日志文件,就要保证这个用户对相应的目录和文件有相应的权限。
worker_processes:进程数量
error_log:错误日志的文件,运行时产生的错误都会记录在里面 使用:sudo tail /var/log/nginx/error.log 可以查看最近的错误日志。
http 区块:
log_format:设置日志格式,后面的 main 是给这个格式取的名字。
access_log:访问日志文件。
include:这个指令可以把一些文件的内容载入到这里,也可以自定义一些.conf 结尾的文件来进行自定义配置
default_type:默认的文件格式
server 区块
server 区块定义了一个 nginx 服务器
listen:监听端口 default_server 会把这个服务器设置为默认的服务器,只能有一个 default_server
server_name:设置服务器域名
root:服务器的根目录
配置一个 nginx 服务器
进入数据盘的目录,比如 mnt
1 | cd /mnt |
docker 应用容器
把应用需要的运行环境,包括应用本身,可以制作成一个镜像,基于这个镜像可以创建并且运行一个容器,这样我们的应用就会运行起来了,也就不需要手工配置服务器,然后搭建运行环境了。你可以在任何支持 docker 的环境里面,使用一行命令,去启动应用。这就是 docker 这个东西做的事。
安装:
1 | sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo //在centOS系统中安装docker可以先去安装一个软件仓库,ce表示社区版,还有个商业版 |
https
想要使用这种更安全的协议传输数据,要在 web 服务器上配置使用 ssl 证书,这种证书是权威机构颁发的,有些是付费的,而且不便宜,但也有一些免费的。
用 Certbot 命令行工具申请 Let‘s Encrypt 签发的 ssl 证书
Certbot 为不同的平台提供各自的安装方法,可以去 Certbot 官网筛选出适合申请 ssl 证书的方法。
比如在 centOS8 中申请 nginx 这种 web 服务器的 ssl 证书,这里借助了 docker:
1 | sudo systemctl stop nginx //怕端口冲突,先停掉 |
第一次运行会弹出一些问题:
- 选择验证方法:1
- 域名
申请成功后的文件会放在一个目录中,有提示的。找到这个文件可以:
1 | sudo ls 目录位置 |
证书有效期
申请的证书有三个月的有效期,在证书到期前可以重新申请,或使用命令更新一下证书。
配置 nginx 服务器支持 https
1 | cd /etc/letsencrypt //进入这个目录 |
给应用创建反向代理服务
把收到的请求再转给别人,nginx 配置个反向代理服务器,这个服务器会把收到的请求转给 nodejs 应用,应用处理后将结果交给反向代理,反向代理再把最终的结果发给客户端。在 conf.d 这个目录中
1 | sudo mv demo.conf demo.bak //让demo.conf这个文件不生效 |
用 PM2 管理运行 node 应用
在服务器如果直接用 node 命令运行应用,关掉终端的时候这个应用也会停止运行,所以需要一种方法在后台运行应用。PM2 就是一种关门管理 node 应用的进程管理器,可以帮我们在后台去运行 node 应用,应用如果意外停止它就会自动启动应用。
1 | sudo npm install pm2 --global //全局安装pm2 |
进入编辑模式,输入
1 | const express = require('express'); |
现在可以使用 pm2 运行刚才创建的 node 应用
1 | pm2 start index.js --name node-app |