Nginx反向代理&&Node服务器部署发布流程

目录

一、生产环境所需要素

二、域名

三、远程登录服务器

1、windows用户可以下载putty、xshell等工具

2、使用zsh配置登录别名

3、添加用户,不再用root登陆

4、实现无密码登陆(重点)

5、端口安全性

6、关闭root方式登陆

7、配置iptables

8、安装Fail2Ban

四、搭建node生产环境

1、首先更新源

2、安装包文件

3、安装nvm和node

4、配置淘宝源

5、增加系统文件监控

6、安装必要依赖

7、测试一下

8、使用pm2让程序一直运行

五、使用Nginx反向代理

1、让web服务通过80端口被外网访问

2、安装nginx

3、配置nginx

六、利用DNSPod管理域名

七、安装配置mongoDB

1、参照官方安装文档来安装,注意选择是centos(redHat)还是Ubuntu

2、有可能因为阿里云的源问题导致下载失败,那么就屏蔽源

3、在最后下载mongodb包是可以在更改阿里云的源

4、编辑防火墙允许27017端口访问

5、启动重启mongodb

6、更改默认端口

7、导出导入数据

8、导出导入某条记录值

9、设置数据库权限

10、容灾备份

11、安装mysql

八、项目部署(重点)

1、安装git,生成本地密钥

2、建立本地与码云的通信

3、上传项目值码云

4、建立服务器与码云的通信

5、测试是否可行

6、使用pm2自动部署管理代码(重要)

7、有数据库且开了用户权限的项目发布

九、配置HTTPS协议

1、申请免费的ssl证书的平台

2、配置DNS解析

3、更改nginx配置

遇到的问题:阿里云服务器配置(以后遇到问题逐渐添加)


一、生产环境所需要素

  1. 购买域名;
  2. 购买服务器;
  3. 域名备案;
  4. 配置服务器环境;
  5. 安装配置数据库;
  6. 项目远程部署发布与更新

二、域名

推荐网站:爱名网、阿里云/万网、腾讯云/新网、DNSpod

三、远程登录服务器

1、windows用户可以下载putty、xshell等工具

2、使用zsh配置登录别名

      用于方面mac linux系统快速登陆(没多好作用)

     alias shh_tcf=”ssh [email protected]"

3、添加用户,不再用root登陆

     add immoc_manager

     升级immoc_manager权限

     gpasswd -a immoc_manager sudo

     编辑sudo

     sudo visudo

     添加imooc_manager All=(All:ALL) ALL

      重启服务:service ssh restart

4、实现无密码登陆(重点)

免密登陆流程

本地生成公钥私钥id_rsa 和 id_rsa.pub(Windows需要再git bash中执行。

mkdir .ssh

cd .ssh

ssh-keygen -t rsa -b 4096 -C ”[email protected]

开启ssh代理并加入代理:

eval "$(ssh-agent -s)"(或者eval `ssh-agent -s`)

ssh-add ~/.ssh/id_rsa

(如果不成功,则windows先去到.ssh目录下执行ssh-agent bash 再执行ssh-add ~/.ssh/id_rsa)

去将本地公钥发送到服务器

在.ssh目录下

ssh-keygen -t rsa -b 4096 -C ”[email protected]

eval "$(ssh-agent -s)"(或者eval `ssh-agent -s`)

ssh-add ~/.ssh/id_rsa

vi authorized_keys 添加本地服务器中的公钥(is_rsa.pub)这种方式容易拷贝空格

最好在本地git bash中执行ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

更改权限:chmod 600 authorized_keys

重启服务:sudo service ssh restart(centos 下执行service sshd restart)

这样一来,当本地登陆服务器时,就会去匹配看秘钥是否一致。

 

5、端口安全性

sudo vi /etc/ssh/sshd_config

在修改之前先再开一个窗口保持登陆状态,一旦修改出错,还能在那个已登陆态里修改回来

首先修改Port 39999

末尾添加AllowUsers immoc_manager

重启Sudo service ssh restart

下次登陆就需要输入端口ssh -p 39999 [email protected]这样可以降低被扫描攻击的概率

 

6、关闭root方式登陆

因为阿里云的账号都是root,别人可以扫描root下所有端口破解。所以再新建imooc_manager用户后,可以关闭root来登陆

sudo vi /etc/ssh/sshd_config

PermitEmptyPasswords no#是否允许空密码登陆

PermitRootLogin no#是否允许root登陆

PasswordAuthentication no#是否允许密码登陆。因为配置了秘钥登陆,所以不需要密码,但是只能配置好了的本地主机才能登陆了

 

7、配置iptables

还是先多开几个窗口,防止配置出错不能登陆

先升级apt-get(centos请使用yum命令)

Sudo apt-get update && sudo apt-get upgrade

清空iptables

sudo iptables -F

配置iptables规则

sudo vi /etc/iptables.up.rules

告诉iptables规则在哪里

sudo iptables-restore < /etc/iptables.up.rules

激活防火墙

sudo ufw enables

sudo ufs status

设置脚本开机启动

sudo vi /etc/network/if-up.d/iptables

Sudo chmod +x /etc/network/if-up.d/iptables

8、安装Fail2Ban

Sudo apt-get install fail2ban

编辑配置文件

Vi /etc/fail2ban/jail.conf

bantime=3600

destemail = [email protected]

action = %(action_mw)s

开启Fail2Ban

sudo service fail2ban start/stop/status

四、搭建node生产环境

1、首先更新源

sudo apt-get update(centos用sudo yum update)

2、安装包文件

sudo apt-get install vim openssl build-essential libssl-dev wget curl git

3、安装nvm和node

去github搜索nvm,第一个就是

执行命令

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash

nvm install lts

nvm use vxx.xx.xx

nvm alias default vxx.xx.xx

4、配置淘宝源

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

5、增加系统文件监控

echo fs.inotigy.max_user.watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

6、安装必要依赖

npm i pm2 webpack gulp grunt-cli -g

7、测试一下

const http = require("http")

http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'})
  res.end("test111")

}).listen(8989)

console.log('servier starting at 8989')

记住即防火墙开启8989端口,在阿里云ECS里面安全策略也要对应配置出入策略

8、使用pm2让程序一直运行

pm2 start app.js --watch

pm2 list//查看应用列表

pm2 logs//查看日志

 

五、使用Nginx反向代理

1、让web服务通过80端口被外网访问

root权限才能监听0~1024的端口,其他imooc_manager用户可以强制使用sudo来启动监听80,但是要做额外配置同时会放大程序的权限,不安全。

2、安装nginx

Sudo apt-get install nginx(centos使用sudo yum install nginx)

3、配置nginx

进入配置目录

cd /etc/nginx/conf.d

新建应用的配置文件

sudo vi imooc-com-8081.conf

upstream imooc {
    server 127.0.0.1:8989;
}
server {
    listen 80;
    server_name 47.97.224.211;
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Nginx-Proxy true;
        proxy_pass http://imooc;
        proxy_redirect off;
    }
}

找到nginx.conf修改如下(默认不用修改)

server_tokens off;去掉前面的#能隐藏服务器信息

改完配置通过nginx -t检测配置

启动服务

service nginx start

重启服务

sudo service nginx reload

 

六、利用DNSPod管理域名

点击域名--管理--修改DNS--修改为DNSPod的DNS服务器地址

然后再DNSPod添加域名(会从阿里云DNS转移过来),会自动扫描记录值,扫面之后要几个小时生效。

cname介绍:比如七牛存有很多图片,每张图片存放在不用的服务器有着不同的ip地址,我们不能将域名指向那么多服务器,但是我们可以将我们的域名指向七牛图片服务域名,而其内部再分发到不同的服务器ip来访问不同服务器上的图片(1---1---n)

如:项目代码将图片视频传到video.youyoum.top,然后该域名转发到七牛的一个域名去。

 

七、安装配置mongoDB

1、参照官方安装文档来安装,注意选择是centos(redHat)还是Ubuntu

2、有可能因为阿里云的源问题导致下载失败,那么就屏蔽源

Sudo vi /etc/apt/apt.conf

3、在最后下载mongodb包是可以在更改阿里云的源

sudo apt-get install -y mongodb-org

通过vi /etc/apt/sources.list.d/mongodb-org-3.4.list

改成http://mirrors.aliyun.com/mongodb/apt/ubuntu trusty/mongodb-org/3.4 multiverse

更新sudo apt-get update

4、编辑防火墙允许27017端口访问

重新载入,sudo iptables-restore < /etc/iptables.up.rules

5、启动重启mongodb

Sudo service mongod stop/start/restart

输入mongo就可进入数据库

6、更改默认端口

Sudo vi /etc/mongod.conf

将port:27017改成19999再更新访问墙里面的端口

输入mongo --port 19999就能进入终端

7、导出导入数据

导出:mongodump -h 127.0.0.1:27017 -d indust-app -0 indust-app.backup

打包:tar zcvf indust.backup.tar.gz indust-app.backup

上传:scp -P 39999 ./indust.backup.tar.gz [email protected]:/home/dbbackup

解压:tar xvf indust.backup.tar.gz

导入:mongorestore --host 127.0.0.1:1999 -d indust-app ./dbbackup/indust-app

查看数据:mongo --port 19999

use indust-app

show tables

db.createioin.find({})

8、导出导入某条记录值

导出:

上传:

导入:

查看:

Show dbs

db.users.find({})

清空数据库:

 

9、设置数据库权限

1)设置超级管理员权限,间接管理所有数据库,超管数据库是admin

2)在超级管理员权限下授权其他用户对其他数据库的管理权限。

首先登陆超级管理员,选择要授权的数据库

然后针对imooc-movie这个数据库添加两个角色,一个readWrite一个read(备份)权限

针对imooc-app数据库创建readWrite权限角色,再创建备份(只读权限,不再演示)

针对imooc-wechat数据库添加角色权限

3)权限设置好后,开启验证

sudo vi /etc/mongod.conf

4)重启mongodb生效

sudo service mongod restart

5)进入超级管理员数据库,验证,查看数据库列表

mongo --port 19999

6)登陆某个用户数据库,验证,查看

7)迁移一个服务器数据库

8)迁移一张单表

9)当有了权限之后导入数据库需要数据账号密码

导入数据库

导入一张表

查看某个数据库

 

10、容灾备份

通过系统任务通过自动定时备份

1)编辑备份脚本

midir tasks

cd tasks

vi movie.back.sh

#!/bin/sh

backUpFolder=/home/imooc_manager/backup/movie
date_now =`date +%Y_%m_%d_%H%M`
backFileName=movie_$date_now

cd backUpFolder
mkdir -p $backFileName

mongodump -h 127.0.0.1:19999 -d imooc-movie -u imooc_movie_wheel -p BackTcf -o $backFileName

tar zcvf $backFileName.tar.gz $backFileName

rm -rf $backFileName

NNODE_ENV=$backUpFolder@$backFileName node /home/imooc_manager/tasks/upload.js

2)测试执行

 sudo sh ./tasks/movie.backup.sh

3)启动定时任务

crontab -e //nano编辑器输入2

凌晨4点、8点执行任务

Ctrl+s shift+y保存

5)将备份文件上传七牛云

https://developer.qiniu.com/kodo/sdk/1289/nodejs#upload-flow

vi upload.js

写七牛云上传逻辑,在定时任务执行的时候就会执行

11、安装mysql

具体配置不在详细介绍,和安装mongodb差不多

sudo apt-get install mysql-server mysql-client

 

八、项目部署(重点)

1、安装git,生成本地密钥

ssh-keygen -t rsa -C "[email protected]"。详细安装上传公钥等操作见此博客

2、建立本地与码云的通信

将本地公钥上传码云(在C:\Users\jefferyteng\.ssh)

3、上传项目值码云

将本地项目通过git上传云端私有仓库(github,码云)

 

4、建立服务器与码云的通信

将服务器的公钥上传码云(在/root/.ssh/id_rsa.pub中)

5、测试是否可行

执行clone,将码云上的项目下载到服务器

git clone [email protected]:JefferyTeng/projectShangCheng.git

6、使用pm2自动部署管理代码(重要)

http://pm2.keymetrics.io/docs/usage/deployment/

(1)创建ecosystem.json文件

{
  "apps": [
    {
      "name": "projectShangCheng",
      "script": "nodetest.js",
      "env": {
        "COMMON_VARIABLE": "true"
      },
      "env_production": {
        "NODE_ENV": "production"
      }
    }
  ],

  "deploy": {
    "production": {
      "user": "root",
      "host": ["47.95.201.251"],
"port": "22",
      "ref": "origin/master",
      "repo": "[email protected]:JefferyTeng/nodetest.git",
      "path": "/home/JefferyTeng",
      "ssh_options": "StrictHostKeyChecking=no",
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}

注意:如果服务器端口改了,则需要改为对应的端口(我的默认22)

注意:添加了文件要重新git add .

(2)在服务器上建立对应的目录/home/Jefferyteng

         添加可读可写权限Sudo chmod 777 JefferyTeng

(3)项目部署

         在git bash(cnd会报下面的错)中执行如下命令将项目部署到远程服务器

         pm2 deploy ecosystem.json production setup

(4)添加域名指向

将nodetest.youyoum.top指向一个A记录,指向服务器ip

(5)添加Nginx记录

cd /etc/nginx/conf.d

vim nodetest-8989.conf

重启nginx服务

server nginx restart/nginx -s reload

(6)防火墙配置,去阿里云开放该端口的访问权限。

(7)项目发布

pm2 deploy ecosystem.json production

注意:如果报错:“pm2:command not found”则去服务器vim ~/.bashrc

注释掉case $- in *i*);; *) return;; esac

(8)更新服务器代码

git add .

git commit -m “xxxx”

git push origin master

pm2 deploy ecosystem.json production

 

7、有数据库且开了用户权限的项目发布

(1)连接数据库代码

(2)增加ecosystem.json发布脚本

(3)Nginx添加静态资源源访问路径

通过pm2 logs查看日志

 

九、配置HTTPS协议

1、申请免费的ssl证书的平台

upyun.com

qiniu.com(赛门铁克)

qcloud.com(推荐)

2、配置DNS解析

去阿里云做DNS解析,并添加A记录使得free.youyoum.top指向服务器,服务器再配置Nginx的转发策略,所有从free.youyoum.top来的都转发到https://

3、更改nginx配置

 

遇到的问题:阿里云服务器配置(以后遇到问题逐渐添加)

1、注意开启/关闭自带的iptables。本人忘记了曾经测试的时候开启了自带的iptalbes,而只是去阿里云控制台开启要访问的端口,导致其他端口不能访问

 

发布了139 篇原创文章 · 获赞 146 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/TCF_JingFeng/article/details/89484771