远程登录服务器
第一次 ssh 远程登录服务器
设置密码
登录
1 | ssh root@[IP ID地址] |
配置 root 及应用账号权限
1 | $ adduser hhp # 自动加入群组 hhp,生成 /home/hhp |
保存
执行“Ctrl+O”
回车
执行完“Ctrl+O”后,会输出”File Name to Write sudoers.tmp”,在 tmp 后执行回车
退出
执行“Ctrl+X”
用新账号远程联机
1 | $ ssh hhp@[外网 IP] |
配置本地无密码 SSH 登录
(1) 客户端配置
1 | # 确保还没有创建过(没有 id_rsa) |
(2) 服务端配置 ~/.ssh/authorized_keys 文件
1 | # 将客户端的 id_rsa.pub 中的公钥信息复制到这个文件 |
(3) 然后就可以通过 ssh 登录服务器而不需要密码了
增强服务安全等级
修改服务器默认 ssh 登录端口
注意:远程修改 ssh 的配置文件有可能不小心就导致当前 ssh 连接断线,再也不能用 ssh 远程登录。因此可以多开一个 ssh 登录服务器。
1 | $ sudo vim /etc/ssh/sshd_config |
配置 iptables 和 Fall2Ban 增强安全等级 iptables
☑ 注意: 为了防止 iptables 设置不当导致远程无法登陆,额外开一个 ssh 远程登录。
1 | # 清空当前所有 iptables 规则 |
Fail2Ban
☑ 说明: 一个安防模块,可以看作一个防御性的动作库,通过监控系统的日志文件,根据检测到任意可疑的行为,出发不同的环境动作,比如对可疑的目标执行 ip 锁定等。
安装
1 | $ sudo apt-get install fail2ban |
配置
/etc/fail2ban/jail.conf
1 | bantime = 3600 |
运行状态
1 | $ sudo service fail2ban status |
开启与关闭
1 | $ sudo servive fail2ban start |
搭建 Nodejs
搭建服务器的 Nodejs 环境依赖环境
1 | $ sudo apt-get update # 更新系统 |
nvm
☑ 注意: 安装后,需要重新登入终端,从而载入 nvm 相关的环境变量。
1 | $ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash |
最好重新打开一个窗口,进行一下命令
nodejs
1 | $ nvm ls-remote |
升级 npm
1 | # 国内网速慢的话,可以考虑用淘宝的源 |
设置系统文件监控数目
1 | $ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p |
使用 cnpm 取代 npm
☑ 注意: 只要网络不是太糟糕,建议始终使用 npm 而不是 cnpm。
1 | $ npm install --registry=https://registry.npm.taobao.org install -g cnpm |
常用 nodejs 包
1 | $ npm i pm2 webpack gulp grunt-cli -g |
借助 pm2 让 Nodejs 服务常驻
1 | # 启动 nodejs 程序 |
配置 nginx 实现反向代理
删除 apache
1 | $ sudo service apache2 stop |
安装 nginx
1 | $ sudo apt-get update |
配置 nginx
/etc/nginx/conf.d/webappbook-8081.conf
1 | upstream imooc { |
1 | $ sudo nginx -s reload |
/etc/nginx/nginx.conf
1 | ...http { |
1 |
|
服务器配置安装 MongoDB
注意: 因为成本原因,MongoDB 和 Web 服务在同一个 ECS 实例上,在商业实践中,为了解耦,应当放在不同的实例中。或者有条件的话,可以购买阿里云专门的 MongoDB 数据库服务。
在 Ubuntu 14.04 上安装 MongoDB
安装
参考 MongoDB 官网 Install on Ubuntu
1 | $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6 |
配置 MongoDB 配置
/etc/mongod.conf
1 | net: |
防火墙配置
/etc/iptables.up.rules
1 | # mongodb connect |
启动
1 | # mongodb 的日志文件 |
连接
1 | $ mongo --port 27018 |
往线上 MongoDB 导入单表数据或数据库
☑ 技巧: 导入的时机一般是在数据库软件安装好之后,数据库用户创建前。从而避免用户权限带来的一些麻烦。
整个数据库本地导出、打包、上传
1 | # 存放项目备份数据的文件夹 |
1 | # 打包 MongoDB 数据库数据并压缩 |
服务器解压、导入
1 | $ tar xvf indust-app-backup.tar.gz |
服务器正式部署和发布上线 Nodejs 项目
上传项目代码到线上私有 Git 仓库
1 | $ git config --global user.name "Scott" |
配置 PM2 一键部署线上项目结构
使用 PM2,并采用配置文件的方式来部署项目。
服务端准备
(1) 准备好程序所在的文件夹
1 | $ sudo mkdir -p /www/website |
从客户端发布
(1) 本地在项目中创建 PM2 配置文件
#/ecosystem.json
1 | { |
(2) 本地使用 PM2 部署到线上服务器
1 | $ pm2 deploy ecosystem.json production setup |
1 | # 新配置的服务器可能还没有使用过ssh连接GitHub,方法与服务器的ssh登录相似 |
从本地发布上线和更新服务器的 Nodejs 项目
使用 PM2 实现本地控制远端代码更新和服务重启。
服务端准备
1 | $ sudo vim ~/.bashrc |
由于 PM2 需要以交互的方式通过 SSH 连接服务器,需要注释掉下面的代码:
1 | # If not running interactively, don't do anything |
1 | $ source ~/.bashrc |
从客户端发布到服务端并启动应用
1 | $ pm2 deploy ecosystem.json production |
修改入口代码
1 | let env = process.env.NODE_ENV || "development"; |
nginx 配置
/etc/nginx/conf.d/***.conf
1 | upstream movie { |
iptables 配置 打开特定端口
/etc/iptables.up.rules
1 | # movie |
1 | $ sudo iptables-restore < /etc/iptables.up.rules |
使用和配置更安全的 HTTPS 协议
SSL 证书
SSL 证书分类
| DV | 一般 | 个人博客、产品展示、中小企业网站 | 有些免费的可以选择,即便收费的也通常不贵,申请流程也比较简单。|
| OV | 企业级别、等级较高 | 常用在一些电商网站、社交、 O2O 等涉及到用户资料、订单支付的场景 | 审核比较严格,价格不亲民,对业务有一定规模的可以考虑。|
| EV | 按照严格身份验证标准颁发的证书,是目前全球最高等级的 SSL 证书,安全性非常高,使用这个证书的网站,浏览器地址栏一般会显示为绿色 | 常用金融支付、网上银行等资金交易比较敏感的场景。|
SSL 证书有效期
3 个月、一年;每次过期都需要更新证书,或者重新提交申请。可以通过一些工具或脚本,实现证书的自动更新。
免费的 SSL 证书
沃通与 StarSSL 已经被 Google 与 Firefox 屏蔽。
付费的 SSL 证书
赛门铁克、 Geotrust 、 亚洲诚信
云平台申请免费证书及 Nginx 配置
又拍云、七牛云、腾讯云
Nginx 配置
(1) 将 SSL 证书文件上传到服务器
1 | # 将 mini.iblack7.com 对应的 SSL 证书的 key 文件上传到服务器 |
(2) nginx 配置更新
1 | upstream free { |