全栈最后一千米

一、生产环境所须要素前端

    购买本身的域名   购买本身的服务器   域名备案  配置服务器应用环境  安装配置数据库  项目远程部署发布与更新node

 1、远程登陆以及设置登陆权限人员以及经过ssh设置无密码登陆webpack

远程登陆服务器  ssh root@47.92.145.61nginx

指定一个钦差大臣,不要以root权限登陆,由于他很敏感,有可能删掉或者修改掉一些敏感核心文件,前端时间gitlab工程师,深夜中误删掉了15g的文件致使形成了很大的故障。git

主要用到的命令是 < adduser dzq_manager(要设置的用户名) >github

对用户名进行升权操做 使该用户可以以sudo的权限调用系统命令web

gpasswd -a dzq_manager sudomongodb

进一步进行操做 sudo visudo 修改相关配置规则shell

进行以下修改,按下 control + x 以后按 shift + y 以后按下enter键  保存成功数据库

而后以该用户的权限进行登陆

登陆成功!!!

经过ssh设置无密码登陆

首先本地生成ssh_key,而后登陆到服务器生成相关的sshkey

ssh-keygen -t rsa -b 4096 -C "dongzhiqiang@qudian.com"

执行eval "$(ssh-agent -s)"

ssh-add ~/.ssh/id_rsa

跑通代理,创建链接

创建受权文件  vi authorize_keys

将本地电脑的id_rsa.pub文件复制粘贴到服务器上的该文件中

并对该文件进行受权操做 chmod 600 authorized_keys

而后执行sudo service ssh restart

如今登陆的时候就不须要进行密码的输入了

 

2、加强服务器的安全级别

 一、改变服务器登陆的默认端口号  sudo vi /etc/ssh/sshd_config

修改默认端口号是3999

 登陆的时候使用ssh -p 3999 dzq_manager@47.92.145.61

二、关掉以root权限登陆和禁止空密码(由于能够经过root进行扫描,致使安全风险)

这是咱们再以root帐号登陆,就会被拒绝

三、配置iptables防火墙

首先升级一下ubuntu,执行sudo apt-get update && sudo apt-get upgrade

清空一下当前的iptables防火墙规则

iptables -F 

继续执行 sudo vi /etc/iptables.up.rules 建立服务器防火墙规则

配置完防火墙规则以后,告诉iptables配置文件的位置

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

查看防火墙是否成功启动 

sudo ufw status

启动iptables防火墙的命令

sudo ufw enable

设置开机自动启动iptables,经过设置shell脚原本实现

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

赋予脚本执行的权限

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

四、安装fail2ban(防护性的动做库,经过检测系统的认证文件,对任何产生可疑行为的目标进行ip的锁定等等)

执行 sudo apt-get isntall fail2ban 进行fail2ban的安装

修改fail2ban的配置文件

sudo vi /etc/fail2ban/jail.conf

进行下面两处的修改

 查看fail2ban是否正常运行/启动/中止

sudo service fail2ban status/stop/start

 

3、搭建Nodejs生产环境 

一、环境搭建与必要模块安装

执行 sudo apt-get install vim openssl build-essential libssl-dev wget curl git 安装相关的依赖等

使用nvm进行nodejs的版本管理等,打开github.com搜索nvm,拷贝下面这行脚本代码

安装完成后,打开一个新的终端进行相关的操做,在新的终端界面输入 nvm install v4.4.4

使用4.4.4版本的node并默认使用,执行 nvm use v4.4.4 

nvm alias default v4.4.4

指定淘宝源镜像安装npm npm --registry=https://registry.npm.taobao.org install -g npm

增长系统文件监控数目  echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p 

为了保证更高更快的安装速度  使用cnpm 代替 npm

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

安装经常使用的工具包模块 npm i pm2 webpack gulp grunt-cli -g

二、使用pm2部署管理node进程的工具进行项目的管理

能够先写一个小的demo,例如在根目录下建立app.js文件,同时在该文件写上服务启动代码,监听8081端口,经过浏览器中输入ip以及端口号的方式,进行node服务项目的访问,若成功,表明环境搭建成功。注意这里iptables防火墙容许8081端口的访问以及阿里云服务器安全组规则的设定,不然没法正常访问。

能够直接执行 pm2 start app.js 命令运行node项目

能够经过pm2 list 命令列出当前运行的项目列表

使用pm2 show app 则是某个运行的项目更详细的信息的展现

使用pm2 logs实现实时查看日志的功能

4、配置Nginx实现反向代理

安装nginx  sudo apt-get install nginx

进入conf.d目录   cd /etc/nginx/conf.d  

新建8081端口的配置文件   sudo vi dzq-com-8081.conf

配置文件内容以下,核心思想即是经过server_name也就是经过服务器ip进来的流量,都转到upstream的dongzhiqiang中去

返回上一层,查看nginx.config文件,能够看到这么一行代码

会把咱们刚刚配置的.conf文件全都加载进来

执行 sudo nginx -t 检测咱们写的配置文件有没有问题    

 

执行sudo nginx -s reload 重启nginx服务

这个时候,咱们在浏览器中直接输入ip地址不输入端口号就能够直接访问服务器上的项目了

 5、利用DNSpos进行域名解析管理

首先,将当前域名的解析DNS服务器更换为其余的DNS服务器,由修改后的DNS服务器负责域名解析服务。

咱们选择的是DNSpos做为咱们域名的解析DNS服务器。

能够经过 https://support.dnspod.cn/Kb/showarticle/tsid/40/ 看到万网(被阿里云收购)的修改DNS解析服务器的方式。

紧接着,打开阿里云官网,找到咱们已经备案号的域名,点击管理,点击修改DNS,把相应的地址给填入。

 

 

 

而后咱们去到DNSpod的管理控制台,进入域名解析,添加咱们须要解析的域名地址,我这里是dongzhiqiang.cn,点击肯定

 而后到DNSpod官网添加相应的记录,进行域名的解析。

 6、服务器配置安装MongoDB

 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/

这是官方的mongodb unbutu 安装教程,咱们须要按照步骤一步步进行

第一步,导入publickey

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

第二步,为mongodb建立列表文件

echo "deb [ arch=amd64 ] http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

第三步,从新加载本地包数据库

sudo apt-get update

第四步,安装mongodb包,安装最新的稳定的mongodb

sudo apt-get install -y mongodb-org

可能会遇到很慢的状况,这时候咱们能够修改一下源,提升下载速度

进入到相应的目录文件 cd /etc/apt/sources.list.d 编辑相应的列表

sudo vi mongodb-org-3.4.list

这时,咱们在终端中输入 mongo ,若出现连接失败的状况,则在防火墙规则中加入如下两条规则

 mongod安全防御

一、修改mongodb默认端口号为2999

sudo vi /etc/mongod.cof

重启mongodb服务,sudo service mongod restart

首先修改防火墙的安全规则,将端口号改成2999,同时使用 mongo --port 2999 进行数据库的连接

将本地数据库数据导入线上服务器

执行 mongodump -h 127.0.0.1:27017 -d platform -o platform-backup 命令,将本地的platform数据库中的数据表备份一份

将该文件进行压缩打包 tar zcvf platform.tar.gz platform-backup

 

经过scp命令,将本地的压缩包上传到服务器 

scp -P 3999 ~/workplace/project-deploy/platform.tar.gz dzq_manager@47.92.145.61:/home/dzq_manager/dbbackup/

进入到服务器,对上传到服务器上的tar包进行解压操做

tar xvf platform.tar.gz

讲解压后的数据文件,导入到数据库的文件夹中

 mongorestore --host 127.0.0.1: 2999 -d platform ./dbbackup/platform-backup/platform/

 删除线上服务器的相关数据

mongo --host 127.0.0.1:2999 platform --eval "db.dropDatabaes()"

 为数据库配置相应的管理员和用户权限(核心文件,必须具备必定的安全性)

一、mongodb没有默认的管理员帐号,因此要先添加管理员帐号,而后开启权限的认证。

二、只有切换到admin以后,添加的帐号才算是管理员帐号,用户只能在用户所在的数据库登陆,包括管理员帐号。 

三、管理员能够管理全部的数据库,可是不能直接管理数据库,首先要到admin里认证才能够。

 

首先,对整个mongodb数据库设置超级管理员权限

进入mongo环境, 执行 mongo --port 2999

执行以下命令管理员角色(能够间接的管理全部的数据库)

db.createUser({user: 'dzq_manager_cases_owner', pwd: '1994827dzqygF', roles: [{role: 'userAdminAnyDatabase', db:'admin'}]})

在admin数据库下面对用户登陆进行受权,要相对数据库建立角色,就要在这儿进行受权操做。

db.auth('dzq_manager_cases_owner', '1994827dzqygF')

进入platform数据库,建立具备读写权限的角色

use platform 

db.createUser({user: 'platform_runner', pwd: '1994827dzqygF', roles: [{role: 'readWrite', db:'platform'}]})

建立备份角色

db.createUser({user: 'platform_wheel', pwd: '1994827dzqygF', roles: [{role: 'read', db:'platform'}]})

blog数据库进行相同的操做步骤。

开启数据库的验证模式:

编辑数据库的配置文件  sudo vi /etc/mognod.conf

重启mongodb服务  sudo service mongod restart

这时,进入mongo环境,执行show dbs,将会由于权限的问题没法访问

这时,咱们须要进行相关的权限验证 db.auth('dzq_manager_cases_owner', '1994827dzqygF')

再次执行show dbs 

若是想直接登陆某个数据库 执行 mongo 127.0.0.1:2999/platform -u platform_runner -p 1994827dzqygF 这样就进入了某个数据库,而后就能够针对于每一个数据库进行操做。

 

 7、部署线上nodejs项目

nodejs自己经过pm2来进行维护

首先,经过git把本地的项目代码上传到私有仓库,到项目目录下:

 git init  > git add . > git commit -m 'first commit'  > git remote add origin git@git.oschina.net:qqqiang123/platform.git > git push -u origin master

会出现让咱们从远程更新代码的提示,执行 git pull ,如出现以下相似错误,则执行git pull origin master --allow-unrelated-histories后再执行git push -u origin master,代码上传成功~

 登陆到服务器,把生成的公钥复制到第三方的代码仓库,把代码克隆到服务器上。

部署

用 pm2 来把指令发送到服务器端,让服务可以跑起来(傻瓜式的管理代码更新和服务运行,可以自动更新代码和重启服务等)

pm2不只能够守护nodejs服务来实现平滑重启,实现代码自动更新,从本地到线上的部署。

http://pm2.keymetrics.io/ pm2的相关文档

在项目中增长配置文件 process.json

 在服务器新建相关文件夹  sudo mkdir /workplace > cd workplace > sudo mkdir website 

执行相关pm2命令:pm2 deploy process.json production setup

这时,线上服务器便有了咱们部署后的文件夹

其中,current就是咱们跑在线上的代码,soruce即是咱们从第三方仓库克隆下来的源码,shared即是生成的日志文件等等

之后,咱们每一次部署,执行pm2 deploy process.json production即可,服务器会自动拉取仓库中的代码并自动执行pm2的平滑重启。

 

8、使用和配置更安全的HTTPS协议

 以platform.dongzhiqiang.cn为例进行讲解

咱们能够到腾讯云上申请一个免费的ssl证书

下一步,手动dns验证

 

进入到DNSpos,根据生成的主机记录,记录类型和记录值添加相应的记录

 

最后,下载证书,经过scp命令上传到服务器

进行nginx配置文件的修改

 

至此,ssl证书配置完成

相关文章
相关标签/搜索