上線筆記 ubuntu - nodejs

【未完豪筝, 缺部署和HTTPS】

ssh 登陸

  1. ssh root@ip (ssh -p [port] [username]@[ip])
  2. 掛載盤 fdisk -l
  3. df -h
  4. 配置賬號權(quán)限 adduser [name]
  5. 賬號授權(quán) gpasswd -a [name] sudo
    sudo visudo (在nano 的 user privilege specification 中增加[name]的權(quán)限)
  6. 重啟ssh功能 service ssh restart

無密碼 ssh 登陸(同時在本機(jī)和服務(wù)器執(zhí)行)

  1. 配置公鑰和私鑰
    ssh-keygen -t rsa -b 4096 -C "[email]"

  2. 配置ssh 代理 eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_rsa

  3. 在服務(wù)器創(chuàng)建授權(quán)文件:(在.ssh中) vi authorized_keys (esc -> wq!)

  4. 復(fù)制本地的公鑰 id_rsa.pub的內(nèi)容到 服務(wù)器的authorized_keys(cat -> vi -> i -> esc -> eq!)

  5. 修改文件權(quán)限 chmod 600 authorized_keys

  6. 重啟服務(wù) sudo service ssh restart

修改服務(wù)器默認(rèn)登陸端口(安全)

  1. sudo vi /etc/ssh/sshd_config
  2. 修改端口端口可修改范圍 0~65536 (1~1024不要用)
  3. 在文件末尾增加 AllowUsers [name]
  4. 重啟服務(wù) sudo service ssh restart
  5. 重新登陸 ssh -p 8899 manager@124.71.194.225

關(guān)閉root 賬戶登陸(安全)

  1. sudo vi /etc/ssh/sshd_config
  2. PermitRootLogin no
  3. 重啟ssh服務(wù) sudo service ssh restart

配置 iptables 和 Fail2Ban (安全)

  1. 更新ubuntu sudo apt-get update && sudo apt-get upgrade
  2. 清空規(guī)則 sudo iptables -F
  3. 配置 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
  1. 告訴配置項(xiàng)在哪里 sudo iptables-restore < /etc/iptables.up.rules
  2. 查看ufw是否激活: sudo ufw status
  3. 激活防火墻ufw: sudo ufw enable
  4. 防火墻開機(jī)自啟動: sudo vi /etc/network/if-up.d/iptables.
#!/bin/sh
iptables-restore /etc/iptables.up.rules
  1. 對上述腳本賦予權(quán)限sudo chmod +x /etc/network/if-up.d/iptables
  2. 安裝 Fail2Ban: sudo apt-get install fail2ban
    10.修改fail2ban的配置文件: sudo vi /etc/fail2ban/fail.conf
    bantime = 3600
    destemail = [email]
  3. 開啟 fail2ban : sudo service fail2ban stop

搭建Nodejs 環(huán)境

  1. sudo apt-get update
  2. 安裝工具: sudo apt-get install vim openssl build-essential libssl-dev wget curl git
  3. 安裝nvm: wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
  4. 使用nvm安裝nodejs : nvm install --lts
  5. 使用此版本的nodejs: nvm use --lts
  6. 默認(rèn)系統(tǒng)中的版本就是此版本: nvm alias default v14.15.4
  7. 檢查版本: node -v
  8. 安裝淘寶源 npm install -g cnpm --registry=https://registry.npm.taobao.org
  9. 檢查cnpm 版本 cnpm -v
  10. 增加系統(tǒng)監(jiān)控數(shù)目: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
  11. 安裝全局工具包 npm install pm2 webpack gulp grunt-cli -g
  12. 測試環(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ù)常駐

  1. pm2 start app.js
  2. 使用pm2 list 列出已跑起來的服務(wù)
  3. 看服務(wù)的具體信息 pm2 show [服務(wù)名]
  4. 實(shí)時日志 pm2 log

https://pm2.keymetrics.io/docs/usage/pm2-doc-single-page/

配置 nginx 反向代理

  1. 嘗試關(guān)閉apache服務(wù)器 sudo service apache2 stop
  2. 刪除apache:
    update-rc.d -f apache2 remove
    sudo apt-get remove apache2
  3. 更新包列表 sudo apt-get update
  4. 安裝 nginx : sudo apt-get install nginx
  5. 配置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)入:
    1. 進(jìn)入mongo數(shù)據(jù)庫: mongo --port 29999
    2. 使用 use indust-app
    3. show tables
    4. exit

上線項(xiàng)目配置 MongoDB 數(shù)據(jù)庫讀寫權(quán)限

  • 為線上數(shù)據(jù)庫設(shè)置超級管理員:

    1. 進(jìn)入mongo 命令行界面:mongo --port 29999 (未設(shè)置port則直接是mongo)
    2. 切換至 admin 數(shù)據(jù)庫: use admin
    3. 新建用戶:db.createUser({user: 'some_owner', pwd: '123455', roles:[{role: 'userAdminAnyDatabase', db:'admin'}]})
  • 為數(shù)據(jù)庫設(shè)置管理員:

    1. 授權(quán)(因?yàn)楹罄m(xù)操作需要管理員賬戶首先授權(quán)后再進(jìn)行):db.auth('some_owner', '123455') *返回值為1則表示正確*\
    2. 對其他數(shù)據(jù)庫進(jìn)行授權(quán)糖驴,進(jìn)入其他數(shù)據(jù)庫 use [數(shù)據(jù)庫名]
    3. db.createUser({user: 'owner2', pwd: '123455', roles:[{role: 'readWrite', db:'數(shù)據(jù)庫名'}]})
    4. 數(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)證模式

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市贮缕,隨后出現(xiàn)的幾起案子辙谜,更是在濱河造成了極大的恐慌,老刑警劉巖感昼,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件装哆,死亡現(xiàn)場離奇詭異,居然都是意外死亡抑诸,警方通過查閱死者的電腦和手機(jī)烂琴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜕乡,“玉大人奸绷,你說我怎么就攤上這事〔懔幔” “怎么了号醉?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵反症,是天一觀的道長。 經(jīng)常有香客問我畔派,道長铅碍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任线椰,我火速辦了婚禮胞谈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘憨愉。我一直安慰自己烦绳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布配紫。 她就那樣靜靜地躺著径密,像睡著了一般。 火紅的嫁衣襯著肌膚如雪躺孝。 梳的紋絲不亂的頭發(fā)上享扔,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機(jī)與錄音植袍,去河邊找鬼惧眠。 笑死,一個胖子當(dāng)著我的面吹牛奋单,可吹牛的內(nèi)容都是我干的锉试。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼览濒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拖云?” 一聲冷哼從身側(cè)響起贷笛,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宙项,沒想到半個月后乏苦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡尤筐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年汇荐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盆繁。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡掀淘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出油昂,到底是詐尸還是另有隱情革娄,我是刑警寧澤倾贰,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站拦惋,受9級特大地震影響匆浙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜厕妖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一首尼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧言秸,春花似錦饰恕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至俱恶,卻和暖如春雹嗦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背合是。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工了罪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人聪全。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓泊藕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親难礼。 傳聞我的和親對象是個殘疾皇子娃圆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容