• 全栈最后一公里


    1、生产环境所需要素

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

     一、远程登录以及设置登录权限人员以及通过ssh设置无密码登录

    远程登录服务器  ssh root@47.92.145.61

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

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

    对用户名进行升权操作 使该用户能够以sudo的权限调用系统命令

    gpasswd -a dzq_manager sudo

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

    进行如下修改,按下 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

    现在登录的时候就不需要进行密码的输入了

    二、增强服务器的安全级别

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

    修改默认端口号是3999

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

    2、关掉以root权限登录和禁止空密码(因为可以通过root进行扫描,导致安全风险)

    这是我们再以root账号登录,就会被拒绝

    3、配置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

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

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

    修改fail2ban的配置文件

    sudo vi /etc/fail2ban/jail.conf

    进行下面两处的修改

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

    sudo service fail2ban status/stop/start

    三、搭建Nodejs生产环境 

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

    执行 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

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

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

    可以直接执行 pm2 start app.js 命令运行node项目

    可以通过pm2 list 命令列出当前运行的项目列表

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

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

    四、配置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地址不输入端口号就可以直接访问服务器上的项目了

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

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

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

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

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

     

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

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

     六、服务器配置安装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安全防护

    1、修改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()"

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

    1、mongodb没有默认的管理员账号,所以要先添加管理员账号,然后开启权限的认证。

    2、只有切换到admin之后,添加的账号才算是管理员账号,用户只能在用户所在的数据库登录,包括管理员账号。 

    3、管理员可以管理所有的数据库,但是不能直接管理数据库,首先要到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 这样就进入了某个数据库,然后就可以针对于每个数据库进行操作。

     七、部署线上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的平滑重启。

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

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

    我们可以到腾讯云上申请一个免费的ssl证书

    下一步,手动dns验证

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

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

    进行nginx配置文件的修改

     

    至此,ssl证书配置完成

     
     
  • 相关阅读:
    性格决定命运
    操作系统课程设计之生产者消费者问题
    Linux 操作系统学习之线程
    OpenCV 显示一幅图片
    对图像每个像素点量化
    css选择器
    极简主义,对逻辑操作符||和&&深度运用的理解
    slice的用法与用量
    简单重置移动端默认样式
    移动端视口格式化备注
  • 原文地址:https://www.cnblogs.com/qqqiangqiang/p/7110742.html
Copyright © 2020-2023  润新知