目录
1、windows用户可以下载putty、xshell等工具
1、参照官方安装文档来安装,注意选择是centos(redHat)还是Ubuntu
一、生产环境所需要素
- 购买域名;
- 购买服务器;
- 域名备案;
- 配置服务器环境;
- 安装配置数据库;
- 项目远程部署发布与更新
二、域名
推荐网站:爱名网、阿里云/万网、腾讯云/新网、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,而只是去阿里云控制台开启要访问的端口,导致其他端口不能访问