【未完, 缺部署和HTTPS】
ssh 登陆
- ssh root@ip (ssh -p [port] [username]@[ip])
- 挂载盘 fdisk -l
- df -h
- 配置账号权限 adduser [name]
- 账号授权 gpasswd -a [name] sudo
sudo visudo (在nano 的 user privilege specification 中增加[name]的权限) - 重启ssh功能 service ssh restart
无密码 ssh 登陆(同时在本机和服务器执行)
-
配置公钥和私钥
ssh-keygen -t rsa -b 4096 -C "[email]" -
配置ssh 代理 eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa -
在服务器创建授权文件:(在.ssh中) vi authorized_keys (esc -> wq!)
-
复制本地的公钥 id_rsa.pub的内容到 服务器的authorized_keys(cat -> vi -> i -> esc -> eq!)
-
修改文件权限 chmod 600 authorized_keys
-
重启服务 sudo service ssh restart
修改服务器默认登陆端口(安全)
- sudo vi /etc/ssh/sshd_config
- 修改端口端口可修改范围 0~65536 (1~1024不要用)
- 在文件末尾增加 AllowUsers [name]
- 重启服务 sudo service ssh restart
- 重新登陆 ssh -p 8899 manager@124.71.194.225
关闭root 账户登陆(安全)
- sudo vi /etc/ssh/sshd_config
- PermitRootLogin no
- 重启ssh服务 sudo service ssh restart
配置 iptables 和 Fail2Ban (安全)
- 更新ubuntu sudo apt-get update && sudo apt-get upgrade
- 清空规则 sudo iptables -F
- 配置 sudo vi /etc/iptables.up.rules
*filter
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT // 允许所有建立起来的连接
-A OUTPUT -j ACCEPT //允许所有出去的连接
-A INPUT -p tcp --dport 443 -j ACCEPT // 允许 https 连接
-A INPUT -p tcp --dport 80 -j ACCEPT //允许80端口
-A INPUT -p tcp -m state --state NEW --dport 8899 -j ACCEPT //允许 8899 端口的ssh服务
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT //允许ping
-A INPUT -m limit 5/min -j LOG --log-prefix "iptables denied:" --log-level 7 //打印错误日志
// 排除掉那些60秒访问了150次以上的请求
-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 150 -j DROP
//拒绝其他
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
- 告诉配置项在哪里 sudo iptables-restore < /etc/iptables.up.rules
- 查看ufw是否激活: sudo ufw status
- 激活防火墙ufw: sudo ufw enable
- 防火墙开机自启动: sudo vi /etc/network/if-up.d/iptables.
#!/bin/sh
iptables-restore /etc/iptables.up.rules
- 对上述脚本赋予权限sudo chmod +x /etc/network/if-up.d/iptables
- 安装 Fail2Ban: sudo apt-get install fail2ban
10.修改fail2ban的配置文件: sudo vi /etc/fail2ban/fail.conf
bantime = 3600
destemail = [email] - 开启 fail2ban : sudo service fail2ban stop
搭建Nodejs 环境
- sudo apt-get update
- 安装工具: sudo apt-get install vim openssl build-essential libssl-dev wget curl git
- 安装nvm: wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
- 使用nvm安装nodejs : nvm install --lts
- 使用此版本的nodejs: nvm use --lts
- 默认系统中的版本就是此版本: nvm alias default v14.15.4
- 检查版本: node -v
- 安装淘宝源 npm install -g cnpm --registry=https://registry.npm.taobao.org
- 检查cnpm 版本 cnpm -v
- 增加系统监控数目: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
- 安装全局工具包 npm install pm2 webpack gulp grunt-cli -g
- 测试环境
- 新建app.js vi app.js
const http = require('http')
http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain'})
res.end('12334')
}).listen(8081)
console.log('server running')
- 运行服务 node app.js
- 注意此处可能需要增加防火墙对8081端口的支持
借助 pm2 让 Nodejs 服务常驻
- pm2 start app.js
- 使用pm2 list 列出已跑起来的服务
- 看服务的具体信息 pm2 show [服务名]
- 实时日志 pm2 log
配置 nginx 反向代理
- 尝试关闭apache服务器 sudo service apache2 stop
- 删除apache:
update-rc.d -f apache2 remove
sudo apt-get remove apache2 - 更新包列表 sudo apt-get update
- 安装 nginx : sudo apt-get install nginx
- 配置nginx:
- 进入 /etc/nginx/conf.d
- 新建配置文件 sudo vi [name]-com-8081.conf
upstream [name] {
server 127.0.0.1:8081;
}
server {
listen 80;
server_name [服务器IP, 如:124.71.194.225];
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_xforwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
proxy_pass http://[域名];
proxy_redirect off;
}
}
- 确定 host 的配置未被注释:/etc/nginx/nginx.conf
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
- 测试nginx的配置是否正确
sudo nginx -t - 重启 nginx : sudo nginx -s reload
- 隐藏 nginx 的ubuntu版本: /etc/nginx/nginx.conf 中 server_tokens 设为off
更改域名的DNS根服务器
使用 dnspod
-
将各个运营商的DNS解析指向dnspod
参考文档https://docs.dnspod.cn/dns/5ffd613346757d460d99ed5b/ -
将域名加入 dnspod
-
配置解析项目的域名
A记录: 用来指定域名的IPv4地址(如: 8.8.8.8),将域名指向一个IP地址
CNAME: 将一个域名指向另一个域名,另一个域名指向IP地址,
NS: 如果需要将子域名交给其他DNS服务商解析
MX: 如果需要设置又想,让邮箱能够收到邮件
主机地址 + A记录 + IP + 600TTL
在 Ubuntu 上安装 MongoDB
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
- Import the public key used by the package management system:
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add - - Create a list file for MongoDB
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list - Reload local package database:
sudo apt-get update - Install the MongoDB packages:
sudo apt-get install -y mongodb-org
注意: 阿里云服务器的源可能是阿里云的,将阿里云的源去掉sudo vi /etc/apt/apt.conf中的地址注释掉, 修改镜像文件 sudo vi /etc/apt/souces.list.d/mongodb-org.....list/ 改为阿里云 http:/mirrors.
- 检查防火墙是否同意 27017 端口 sudo vi /etc/iptables.up.rules
-A INPUT -s 127.0.0.1 -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -d 127.0.0.1 -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT
sudo iptables-restore < /etc/iptables.up.rules
- 开启mongod服务: sudo service mongod start
- 查看 mongod服务是否开启: cat /var/log/mongodb/mongod.log
- 如果要关闭mongod服务 : sudo service mongod stop(start 启动 restart重启)
- 修改mongod的默认端口(原本是27017): sudo vi /etc/mongod.conf
将 net 下的port 的 27017 改为 29999, 要重新设置防火墙端口, 然后使用mongo --port 29999进入数据库终端
向线上服务器导入数据
- |本地|备份数据库 mondodump -h 127.0.0.1:27017 [数据库名] -o [导出文件名]
- |本地|打包文件: tar zxvf [打包后文件名称,如: indust-app.tar.gz] [储存位置 indust-app-backup/]
- |本地| 上传到服务器:scp -P [数据库端口] [打包后文件地址] [用户名]@[服务器IP]:[服务器上需要的储存位置] 如:
scp -P 29999 ~/Desktop/deploy-projects/indust-app.tar.gz manager@124.71.194.225:/home/manager/dbbackup
(以上使用FTP工具亦可) - |服务器|解压缩tar包:tar xvf [包名]
- |服务器|将文件导入线上mongodb:
mongorestore --host 127.0.0.1:29999 -d [文件名] [文件相对路径]
- |服务器|验证是否导入:
- 进入mongo数据库: mongo --port 29999
- 使用 use indust-app
- show tables
- exit
上线项目配置 MongoDB 数据库读写权限
-
为线上数据库设置超级管理员:
- 进入mongo 命令行界面:mongo --port 29999 (未设置port则直接是mongo)
- 切换至 admin 数据库: use admin
- 新建用户:db.createUser({user: 'some_owner', pwd: '123455', roles:[{role: 'userAdminAnyDatabase', db:'admin'}]})
-
为数据库设置管理员:
- 授权(因为后续操作需要管理员账户首先授权后再进行):db.auth('some_owner', '123455') *返回值为1则表示正确*\
- 对其他数据库进行授权,进入其他数据库 use [数据库名]
- db.createUser({user: 'owner2', pwd: '123455', roles:[{role: 'readWrite', db:'数据库名'}]})
- 数据库备份员角色: db.createUser({user: '用户名', pwd: '111111', roles:[{role: 'read', db:'数据库名'}]})
注: 3-> 4-> 5-> 6 为创建数据库用户的方法, 记得每次创建好后找个地方存起来密码
-
开启验证模式
网友评论