這是根據 imooc 上 Scott 老師的課程整理的,主要是方便本身查找,由於真的記不住...
附上連接:Node.js項目線上服務器部署與發佈 靜態網站,須要數據庫的電影網站、公衆號,小程序,app 五種項目的部署。
這裏只寫最簡單的靜態網站的部署html
一、完成項目
二、購買域名,備案,解析一些二級域名出來備用
三、購買服務器
四、ssh 遠程登陸服務器 並進行一些安全配置
五、服務端搭建 node 環境
六、Nginx 反向代理。持有80端口,負責端口轉發
七、配置 數據庫 mongodb... 安裝教程
八、部署上線。本地和服務器上都安裝git、pm2(pm2 負責把git的項目更新到服務器)node
ubuntu
,阿里的是 root
ssh root@公網ip
sudo adduser Jerry
sudo visudo
打開 GUN nano 配置文件, 在 User privilege specification
下添加 Jerry ALL=(ALL:ALL) ALL
service ssh restart
。 而後就能夠用 Jerry 登陸啦(新開一個命令行,以避免登陸失敗無後路可退): ssh Jerry@外網IP
密鑰存放在本地 .ssh
文件下, 若是沒有先建立一下 mkdir .ssh
。若是文件夾和密鑰都已經存在,能夠先備份一下已存在的密鑰 mv id_rsa id_rsa_backup
。
在 .ssh 目錄下作以下操做 : 註冊 ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
,開啓代理 eval "$(ssh-agent -s)"
, 加入代理 ssh-add ~/.ssh/id_rsa
webpack
authorized_keys
中Jerry
登陸服務端,在 /home/Jerry/.ssh
目錄下也進行如上操做生成密鑰。接着建立受權文件 vi authorized_keys
, vi 是 vim 的縮寫,把想要免密登陸服務器的電腦的公鑰 ip_rsa.pub
複製過來chmod 600 authorized_keys
並重啓ssh 服務 service ssh restart
。 這樣就能夠經過 Jerry 免密登陸了, 經過 root 依然須要密碼一個報錯
Host key verification failed
緣由:
本地 .ssh 文件夾下存在另外一個文件known_hosts
, 這裏記錄的是全部訪問過的計算機(服務器是臺遠程計算機)的公鑰,報錯的公鑰有問題
解決辦法:
清除對應的公鑰信息。 最粗暴的辦法是直接刪除文件rm -rf known_hosts
, 正確的公鑰也會被刪掉。含蓄一點就是打開文件找到公鑰刪掉它。 還有一種辦法ssh-keygen -r 公網IP
,惋惜報錯了 no keys found
sudo vi /etc/ssh/sshd_config
,服務器默認端口是 22 ,修改 Port 22
。0-1024 不用,被系統程序佔用,且必須 root 啓用,1024-65536
可用。AllowUsers Jerry
。 順便確認一下 UseDNS no
sudo service ssh restart
ssh -p 39999 Jerry@外網IP
sudo vi /etc/ssh/sshd_config PermitRootLogin no PasswordAuthentication no PrimitEmptyPasswords no (確認一下,默認也是no)
iptables
防火牆Fail2Ban
防護性的動做庫 監控系統的日誌中的行爲給相應的操做。可疑行爲IP鎖定...sudo apt-get update
sudo apt-get install vim openssl build-essential libssl-dev wget curl git
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
nvm install v6.9.5
或者安裝最新的 nvm install node
npm i pm2 webpack gulp grunt-cli -g
..能夠配置一個taobao鏡像,直接 npm 可能很慢nginx
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
cnpm i pm2 -g
or npm i pm2 -g
or npm --registry=https://registry.npm.taobao.org install -g pm2
sudo apt-get update
sudo apt-get install nginx
test.segmentfault.com
配置 nginx cd /etc/nginx/conf.d
目錄下新增一個配置文件 sudo vi test-3000.conf
。檢測配置 sudo nginx -t
, 重啓nginx sudo nginx -s reload
git
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; } }
/etc/nginx
下的 nginx.conf
,把Basic Setting
下 server_token off
的註釋拿掉。檢測配置 sudo nginx -t
, 從新加載配置 sudo server nginx reload
id-rsa.pub
添加至 gitsudo apt-get install git
git clone git@github.com:DoFind/test.git
ecosystem.json
並配置/www/test
,粗暴給操做 test 的權限 sudo chmod 777 test
vi .bashrc
註釋一些代碼 source .bashrc
github
找到如下這幾行代碼註釋掉:web
# If not running interactively, don't do anything # case $- in # *i*);; # *)return;; # esac
pm2 deploy ecosystem.json production setup
pm2 deploy ecosystem.json production
// ecosystem.json 內容以下: { "apps": [ { "name": "test", "script": "app.js", "env": { "COMMON_VARIABLE": "true" }, "env_production": { "NODE_ENV": "production" } } ], "deploy": { "production": { "user": "Jerry", "host": ["公網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" } } } }
我本身遇到的一個問題,沒法訪問部署在阿里雲
上的站點:ERR_CONNECTION_TIMED_OUT
。 網絡診斷的結果是 服務器 不接受80
端口上的鏈接
解決:
ECS
實例的安全組規則中添加HTTP(80)
,順便把HTTPS(443)
也加進來