寫在最前
這是根據(jù) imooc 上 Scott 老師的課程整理的,主要是方便自己查找,因?yàn)檎娴挠洸蛔?..
附上鏈接:Node.js項(xiàng)目線上服務(wù)器部署與發(fā)布 靜態(tài)網(wǎng)站,需要數(shù)據(jù)庫(kù)的電影網(wǎng)站、公眾號(hào),小程序,app 五種項(xiàng)目的部署。
這里只寫最簡(jiǎn)單的靜態(tài)網(wǎng)站的部署
1、完成項(xiàng)目
2、購(gòu)買域名,備案,解析一些二級(jí)域名出來(lái)備用
3、購(gòu)買服務(wù)器
4、ssh 遠(yuǎn)程登錄服務(wù)器 并進(jìn)行一些安全配置
5、服務(wù)端搭建 node 環(huán)境
6、Nginx 反向代理。持有80端口,負(fù)責(zé)端口轉(zhuǎn)發(fā)
7、配置 數(shù)據(jù)庫(kù) mongodb... 安裝教程
8、部署上線。本地和服務(wù)器上都安裝git、pm2(pm2 負(fù)責(zé)把git的項(xiàng)目更新到服務(wù)器)
騰訊的超級(jí)管理員賬戶是 ubuntu ,阿里的是 root
ssh root@公網(wǎng)ip
2、委派一個(gè)欽差大臣Jerry,避免用超級(jí)管理員賬號(hào)進(jìn)行直接操作添加用戶 Jerry sudo adduser Jerry
給 Jerry 升官。sudo visudo 打開(kāi) GUN nano 配置文件, 在 User privilege specification 下添加 Jerry ALL=(ALL:ALL) ALL
對(duì)所有sudo生效;Jerry 可以以任何命令來(lái)執(zhí)行操作;Jerry 可以以任何組來(lái)執(zhí)行操作;這個(gè)規(guī)則適用于所有命令
重啟 ssh 服務(wù):service ssh restart。 然后就可以用 Jerry 登錄啦(新開(kāi)一個(gè)命令行,以免登錄失敗無(wú)后路可退): ssh Jerry@外網(wǎng)IP
3、ssh 免密登錄本地生成公鑰、私鑰
密鑰存放在本地 .ssh 文件下, 如果沒(méi)有先創(chuàng)建一下 mkdir .ssh。如果文件夾和密鑰都已經(jīng)存在,可以先備份一下已存在的密鑰 mv id_rsa id_rsa_backup。
在 .ssh 目錄下做如下操作 : 注冊(cè) ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ,開(kāi)啟代理 eval "$(ssh-agent -s)", 加入代理 ssh-add ~/.ssh/id_rsa
服務(wù)端生成 并把本地的公鑰放在服務(wù)端的 authorized_keys 中
使用 Jerry 登錄服務(wù)端,在 /home/Jerry/.ssh 目錄下也進(jìn)行如上操作生成密鑰。接著創(chuàng)建授權(quán)文件 vi authorized_keys, vi 是 vim 的縮寫,把想要免密登錄服務(wù)器的電腦的公鑰 ip_rsa.pub 復(fù)制過(guò)來(lái)
服務(wù)端授權(quán) chmod 600 authorized_keys 并重啟ssh 服務(wù) service ssh restart 。 這樣就可以通過(guò) Jerry 免密登錄了, 通過(guò) root 依然需要密碼
一個(gè)報(bào)錯(cuò)提升安全等級(jí) 1、修改服務(wù)器默認(rèn)登錄端口號(hào)
Host key verification failed
原因:
本地 .ssh 文件夾下存在另一個(gè)文件 known_hosts, 這里記錄的是所有訪問(wèn)過(guò)的計(jì)算機(jī)(服務(wù)器是臺(tái)遠(yuǎn)程計(jì)算機(jī))的公鑰,報(bào)錯(cuò)的公鑰有問(wèn)題
解決辦法:
清除對(duì)應(yīng)的公鑰信息。 最粗暴的辦法是直接刪除文件 rm -rf known_hosts , 正確的公鑰也會(huì)被刪掉。含蓄一點(diǎn)就是打開(kāi)文件找到公鑰刪掉它。 還有一種辦法 ssh-keygen -r 公網(wǎng)IP,可惜報(bào)錯(cuò)了 no keys found
打開(kāi)配置文件 sudo vi /etc/ssh/sshd_config ,服務(wù)器默認(rèn)端口是 22 ,修改 Port 22 。0-1024 不用,被系統(tǒng)程序占用,且必須 root 啟用,1024-65536可用。
文件末行添加 AllowUsers Jerry 。 順便確認(rèn)一下 UseDNS no
重啟 ssh 服務(wù) sudo service ssh restart
新開(kāi)一個(gè)命令行登錄試試 ssh -p 39999 Jerry@外網(wǎng)IP
2、關(guān)閉 root 密碼登錄sudo vi /etc/ssh/sshd_config PermitRootLogin no PasswordAuthentication no PrimitEmptyPasswords no (確認(rèn)一下,默認(rèn)也是no)3、配置iptables 和 Fail2Ban 增強(qiáng)安全防護(hù)
iptables 防火墻
Fail2Ban 防御性的動(dòng)作庫(kù) 監(jiān)控系統(tǒng)的日志中的行為給相應(yīng)的操作??梢尚袨镮P鎖定...
搭建 node 生產(chǎn)環(huán)境 1、搭建 node 環(huán)境更新系統(tǒng) sudo apt-get update
一口氣安裝 sudo apt-get install vim openssl build-essential libssl-dev wget curl git
安裝 nvm。 在git上搜索 nvm , install script 下有安裝辦法 curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash 或者 wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
安裝某版本的 node nvm install v6.9.5 或者安裝最新的 nvm install node
安裝一些全局工具包 npm i pm2 webpack gulp grunt-cli -g..
2、借助 pm2 讓服務(wù)器常駐
可以配置一個(gè)taobao鏡像,直接 npm 可能很慢
npm --registry=https://registry.npm.taobao.org install -g npm echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p npm --registry=https://registry.npm.taobao.org install -g cnpm
安裝 pm2 cnpm i pm2 -g or npm i pm2 -g or npm --registry=https://registry.npm.taobao.org install -g pm2
Nginx 反向代理Nginx 持有 80 端口,負(fù)責(zé)端口轉(zhuǎn)發(fā)
更新 sudo apt-get update
安裝 nginx sudo apt-get install nginx
解析一個(gè)二級(jí)域名(A記錄)出來(lái) test.segmentfault.com
配置 nginx cd /etc/nginx/conf.d 目錄下新增一個(gè)配置文件 sudo vi test-3000.conf。檢測(cè)配置 sudo nginx -t, 重啟nginx sudo nginx -s reload
upstream test { server 127.0.0.1:3000; } server { listen 80; server_name test.segmentfault.com; 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://test; proxy_redirect off; } }
隱藏瀏覽器 Header 信息中 Nginx 的版本號(hào)。 配置 /etc/nginx 下的 nginx.conf,把Basic Setting 下 server_token off 的注釋拿掉。檢測(cè)配置 sudo nginx -t, 重新加載配置 sudo server nginx reload
靜態(tài)網(wǎng)站部署 1、項(xiàng)目上傳至 git 倉(cāng)庫(kù)把本地和服務(wù)端的 id-rsa.pub添加至 git
本地安裝 git ,創(chuàng)建并上傳項(xiàng)目到 git
服務(wù)端安裝 git sudo apt-get install git
服務(wù)端測(cè)試一下 clone 項(xiàng)目 git clone git@github.com:DoFind/test.git
2、配置 pm2 一鍵部署項(xiàng)目在本地項(xiàng)目下新增配置文件ecosystem.json 并配置
在服務(wù)端新建發(fā)布項(xiàng)目的文件夾 /www/test,粗暴給操作 test 的權(quán)限 sudo chmod 777 test
vi .bashrc 注釋一些代碼 source .bashrc
找到以下這幾行代碼注釋掉:
# If not running interactively, don"t do anything # case $- in # *i*);; # *)return;; # esac
接送一下項(xiàng)目(從 git 到 服務(wù)器) pm2 deploy ecosystem.json production setup
之后的項(xiàng)目更新重啟服務(wù) pm2 deploy ecosystem.json production
// ecosystem.json 內(nèi)容如下: { "apps": [ { "name": "test", "script": "app.js", "env": { "COMMON_VARIABLE": "true" }, "env_production": { "NODE_ENV": "production" } } ], "deploy": { "production": { "user": "Jerry", "host": ["公網(wǎng)IP"], "port": "39999", "ref": "origin/master", "repo": "git@github.com:DoFind/test.git", "path": "/www/test/production", "ssh_options": "StrictHostKeyChecking=no", "post-deploy": "npm install --registry=https://registry.npm.taobao.org && pm2 startOrRestart ecosystem.json --env production", "env": { "NODE_ENV": "production" } } } }
我自己遇到的一個(gè)問(wèn)題,無(wú)法訪問(wèn)部署在阿里云上的站點(diǎn):ERR_CONNECTION_TIMED_OUT。 網(wǎng)絡(luò)診斷的結(jié)果是 服務(wù)器 不接受 80 端口上的連接
解決:
ECS實(shí)例的安全組規(guī)則中添加 HTTP(80) ,順便把 HTTPS(443) 也加進(jìn)來(lái)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/19132.html
寫在最前 這是根據(jù) imooc 上 Scott 老師的課程整理的,主要是方便自己查找,因?yàn)檎娴挠洸蛔?.. 附上鏈接:Node.js項(xiàng)目線上服務(wù)器部署與發(fā)布 靜態(tài)網(wǎng)站,需要數(shù)據(jù)庫(kù)的電影網(wǎng)站、公眾號(hào),小程序,app 五種項(xiàng)目的部署。這里只寫最簡(jiǎn)單的靜態(tài)網(wǎng)站的部署 部署思路 1、完成項(xiàng)目2、購(gòu)買域名,備案,解析一些二級(jí)域名出來(lái)備用3、購(gòu)買服務(wù)器 4、ssh 遠(yuǎn)程登錄服務(wù)器 并進(jìn)行一些安全配置5、服務(wù)...
摘要:本文將介紹如何在一臺(tái)的云服務(wù)器上快速部署博客站點(diǎn),如何快速發(fā)布一篇博文并通過(guò)云服務(wù)器上的私有倉(cāng)庫(kù)部署到服務(wù)器目錄下。此外,還要在云服務(wù)器上安裝和兩個(gè)必備的軟件包。在服務(wù)器上部署博客以下為文章正文。 推薦理由:Hexo 是用 Node.js 開(kāi)發(fā)的一個(gè)靜態(tài)站點(diǎn)生成器(Static Site Generator),支持 Markdown 語(yǔ)法寫作,有著強(qiáng)大的插件系統(tǒng),而且性能優(yōu)異。下面我推...
摘要:本文整理自時(shí)速云線上微信群分享第十期本文主要包括的基本概念使用場(chǎng)景,以及如何在時(shí)速云平臺(tái)上進(jìn)行的編排部署,希望對(duì)大家在進(jìn)行微服務(wù)架構(gòu)實(shí)踐時(shí)有所幫助。問(wèn)關(guān)于提供訪問(wèn)容器數(shù)據(jù)的能力,中包含一個(gè)業(yè)務(wù)和一個(gè)服務(wù),時(shí)速云的控制臺(tái)可以進(jìn)入到容器內(nèi)部。 本文整理自【時(shí)速云線上微信群分享】第十期 本文主要包括Pod的基本概念、使用場(chǎng)景,以及如何在時(shí)速云平臺(tái)上進(jìn)行Pod的編排部署,希望對(duì)大家在進(jìn)行微服務(wù)...
摘要:測(cè)試后,使用來(lái)發(fā)布。部署軟件組件,啟動(dòng)虛擬機(jī),將虛擬機(jī)分類到和節(jié)點(diǎn),然后部署密鑰清單。集群自動(dòng)化集群配置由三個(gè)控制。自簽證書(shū)簽署的服務(wù)器端證書(shū)和它的密鑰文件。 我們之前聊了把OpenStack跑在K8S上,如何基于Kubernetes在TCP云端創(chuàng)建私有云解決方法,運(yùn)用在生產(chǎn)或在OpenStack啟動(dòng)虛擬化。今天換個(gè)姿勢(shì),我們來(lái)看看如何在OpenStack虛擬機(jī)上運(yùn)行Kubernete...
閱讀 1175·2021-11-22 15:22
閱讀 3850·2021-10-19 13:13
閱讀 3599·2021-10-08 10:05
閱讀 3306·2021-09-26 10:20
閱讀 2994·2019-08-29 14:21
閱讀 2204·2019-08-27 10:55
閱讀 1880·2019-08-26 10:31
閱讀 2589·2019-08-23 16:47