【未完豪筝, 缺部署和HTTPS】
ssh 登陸
- ssh root@ip (ssh -p [port] [username]@[ip])
- 掛載盤 fdisk -l
- df -h
- 配置賬號權(quán)限 adduser [name]
- 賬號授權(quán) gpasswd -a [name] sudo
sudo visudo (在nano 的 user privilege specification 中增加[name]的權(quán)限) - 重啟ssh功能 service ssh restart
無密碼 ssh 登陸(同時在本機(jī)和服務(wù)器執(zhí)行)
配置公鑰和私鑰
ssh-keygen -t rsa -b 4096 -C "[email]"配置ssh 代理 eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa在服務(wù)器創(chuàng)建授權(quán)文件:(在.ssh中) vi authorized_keys (esc -> wq!)
復(fù)制本地的公鑰 id_rsa.pub的內(nèi)容到 服務(wù)器的authorized_keys(cat -> vi -> i -> esc -> eq!)
修改文件權(quán)限 chmod 600 authorized_keys
重啟服務(wù) sudo service ssh restart
修改服務(wù)器默認(rèn)登陸端口(安全)
- sudo vi /etc/ssh/sshd_config
- 修改端口端口可修改范圍 0~65536 (1~1024不要用)
- 在文件末尾增加 AllowUsers [name]
- 重啟服務(wù) sudo service ssh restart
- 重新登陸 ssh -p 8899 manager@124.71.194.225
關(guān)閉root 賬戶登陸(安全)
- sudo vi /etc/ssh/sshd_config
- PermitRootLogin no
- 重啟ssh服務(wù) sudo service ssh restart
配置 iptables 和 Fail2Ban (安全)
- 更新ubuntu sudo apt-get update && sudo apt-get upgrade
- 清空規(guī)則 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服務(wù)
-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
- 告訴配置項(xiàng)在哪里 sudo iptables-restore < /etc/iptables.up.rules
- 查看ufw是否激活: sudo ufw status
- 激活防火墻ufw: sudo ufw enable
- 防火墻開機(jī)自啟動: sudo vi /etc/network/if-up.d/iptables.
#!/bin/sh
iptables-restore /etc/iptables.up.rules
- 對上述腳本賦予權(quán)限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 環(huán)境
- 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
- 默認(rèn)系統(tǒng)中的版本就是此版本: nvm alias default v14.15.4
- 檢查版本: node -v
- 安裝淘寶源 npm install -g cnpm --registry=https://registry.npm.taobao.org
- 檢查cnpm 版本 cnpm -v
- 增加系統(tǒng)監(jiān)控數(shù)目: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
- 安裝全局工具包 npm install pm2 webpack gulp grunt-cli -g
- 測試環(huán)境
- 新建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')
- 運(yùn)行服務(wù) node app.js
- 注意此處可能需要增加防火墻對8081端口的支持
借助 pm2 讓 Nodejs 服務(wù)常駐
- pm2 start app.js
- 使用pm2 list 列出已跑起來的服務(wù)
- 看服務(wù)的具體信息 pm2 show [服務(wù)名]
- 實(shí)時日志 pm2 log
配置 nginx 反向代理
- 嘗試關(guān)閉apache服務(wù)器 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:
- 進(jìn)入 /etc/nginx/conf.d
- 新建配置文件 sudo vi [name]-com-8081.conf
upstream [name] {
server 127.0.0.1:8081;
}
server {
listen 80;
server_name [服務(wù)器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 設(shè)為off
更改域名的DNS根服務(wù)器
使用 dnspod
將各個運(yùn)營商的DNS解析指向dnspod
參考文檔https://docs.dnspod.cn/dns/5ffd613346757d460d99ed5b/將域名加入 dnspod
-
配置解析項(xiàng)目的域名
A記錄: 用來指定域名的IPv4地址(如: 8.8.8.8),將域名指向一個IP地址
CNAME: 將一個域名指向另一個域名,另一個域名指向IP地址,
NS: 如果需要將子域名交給其他DNS服務(wù)商解析
MX: 如果需要設(shè)置又想辟犀,讓郵箱能夠收到郵件
主機(jī)地址 + 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
注意: 阿里云服務(wù)器的源可能是阿里云的番官,將阿里云的源去掉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服務(wù): sudo service mongod start
- 查看 mongod服務(wù)是否開啟: cat /var/log/mongodb/mongod.log
- 如果要關(guān)閉mongod服務(wù) : sudo service mongod stop(start 啟動 restart重啟)
- 修改mongod的默認(rèn)端口(原本是27017): sudo vi /etc/mongod.conf
將 net 下的port 的 27017 改為 29999, 要重新設(shè)置防火墻端口裆蒸, 然后使用mongo --port 29999進(jìn)入數(shù)據(jù)庫終端
向線上服務(wù)器導(dǎo)入數(shù)據(jù)
- |本地|備份數(shù)據(jù)庫 mondodump -h 127.0.0.1:27017 [數(shù)據(jù)庫名] -o [導(dǎo)出文件名]
- |本地|打包文件: tar zxvf [打包后文件名稱,如: indust-app.tar.gz] [儲存位置 indust-app-backup/]
- |本地| 上傳到服務(wù)器:scp -P [數(shù)據(jù)庫端口] [打包后文件地址] [用戶名]@[服務(wù)器IP]:[服務(wù)器上需要的儲存位置] 如:
scp -P 29999 ~/Desktop/deploy-projects/indust-app.tar.gz manager@124.71.194.225:/home/manager/dbbackup
(以上使用FTP工具亦可) - |服務(wù)器|解壓縮tar包:tar xvf [包名]
- |服務(wù)器|將文件導(dǎo)入線上mongodb:
mongorestore --host 127.0.0.1:29999 -d [文件名] [文件相對路徑]
- |服務(wù)器|驗(yàn)證是否導(dǎo)入:
- 進(jìn)入mongo數(shù)據(jù)庫: mongo --port 29999
- 使用 use indust-app
- show tables
- exit
上線項(xiàng)目配置 MongoDB 數(shù)據(jù)庫讀寫權(quán)限
-
為線上數(shù)據(jù)庫設(shè)置超級管理員:
- 進(jìn)入mongo 命令行界面:mongo --port 29999 (未設(shè)置port則直接是mongo)
- 切換至 admin 數(shù)據(jù)庫: use admin
- 新建用戶:db.createUser({user: 'some_owner', pwd: '123455', roles:[{role: 'userAdminAnyDatabase', db:'admin'}]})
-
為數(shù)據(jù)庫設(shè)置管理員:
- 授權(quán)(因?yàn)楹罄m(xù)操作需要管理員賬戶首先授權(quán)后再進(jìn)行):db.auth('some_owner', '123455') *返回值為1則表示正確*\
- 對其他數(shù)據(jù)庫進(jìn)行授權(quán)糖驴,進(jìn)入其他數(shù)據(jù)庫 use [數(shù)據(jù)庫名]
- db.createUser({user: 'owner2', pwd: '123455', roles:[{role: 'readWrite', db:'數(shù)據(jù)庫名'}]})
- 數(shù)據(jù)庫備份員角色: db.createUser({user: '用戶名', pwd: '111111', roles:[{role: 'read', db:'數(shù)據(jù)庫名'}]})
注: 3-> 4-> 5-> 6 為創(chuàng)建數(shù)據(jù)庫用戶的方法僚祷, 記得每次創(chuàng)建好后找個地方存起來密碼
開啟驗(yàn)證模式