10分鐘搭建ubuntu+nodejs+pm2自動部署+nginx+永久免費SSL證書+mongodb自動部署環境

若是你對nodejskoa2vuejs等感興趣,請加QQ羣:732189938
或者直接點擊連接加入羣聊【Node.js/Koa2/vuejs】:https://jq.qq.com/?_wv=1027&k...vue

準備

全新ubuntu請先執行如下命令安裝經常使用工具node

sudo apt-get install git vim wget curl openssl build-essential libssh-dev

1.安裝nodejs

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs

2.安裝pm2

npm install pm2 -g

3.安裝nginx

若是服務器已經安裝了apache須要先卸載掉,由於apache佔用80端口會致使nginx沒法啓動
依次執行如下命令python

sudo service apache2 stop
update-rc.d -f apache2 remove
sudo apt-get remove apache2

更新包列表nginx

sudo apt-get update

安裝git

sudo apt-get install nginx

4.nginx添加虛擬機配置

cd /etc/nginx/conf.d

建立綁定域名的虛擬機配置文件,例如:你所綁定的域名是 fuck.baidu.net 項目所在的node端口是6661github

vi fuck-baidu-net-6661.conf

將如下配置內容粘貼進去,根據實際狀況自行修改web

server {
    listen 80;
    listen [::]:80;

    server_name baidu.com;
    root /var/www/baidu.com/;

    # logging
    access_log /var/log/nginx/baidu.com.access.log;
    error_log /var/log/nginx/baidu.com.error.log warn;

    # reverse proxy
    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

重啓以前,能夠先檢測一下配置規則mongodb

sudo nginx -t

執行上面的命令若是出現下面的提示apache

sudo: unable to resolve host XXX

則執行npm

vi /etc/hosts

修改 127.0.1.1 hostname 爲 127.0.1.1 XXX
重啓nginx

sudo nginx -s reload

5.安裝mongoDB

官網安裝說明 https://docs.mongodb.com/manu...
根據安裝說明執行完第一步。將第二步中的安裝源換成阿里雲的鏡像安裝會比較快,以下:

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list

將上面的部分替換以下

echo "deb [ arch=amd64,arm64 ] https://mirrors.aliyun.com/mongodb/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list

更新源

sudo apt-get update

正式安裝

sudo apt-get install -y mongodb-org

經常使用命令

sudo service mongod start
sudo service mongod stop
sudo service mongod restart

6.本地和服務器使用ssh 公鑰 免密訪問git倉庫

在使用SSH協議訪問項目倉庫以前,須要先配置好帳戶/項目的SSH公鑰。本地和服務器均執行

你能夠按以下命令來生成 sshkey:
這一步請慎重,若是你已經生成過而且有在使用的key這一步就不要再執行了,不然會覆蓋以前生成的key致使你其它須要使用這個key的沒法訪問

ssh-keygen -t rsa -C "xxxxx@xxxxx.com"

按照提示完成三次回車,便可生成 ssh key。經過查看 ~/.ssh/id_rsa.pub 文件內容,獲取到你的 public key

cat ~/.ssh/id_rsa.pub

將ssh key複製添加到git倉庫中 碼雲官方說明見這裏 https://gitee.com/help/articl...

測試是否成功
github

ssh -T git@github.com

碼雲

ssh -T git@gitee.com

7.本地環境免密訪問服務器

  • 若是使用pm2的一鍵自動部署,須要先將本地生成的ssh key添加到服務器,在本地實現免密鏈接服務器的狀況下才可使用pm2的一鍵自動部署,執行下面的命令來說ssh公鑰添加到服務器上
  • A 服務器使用密碼登錄的狀況下
ssh-copy-id username@ip-address

按提示輸入服務器密碼,完成後會有以下提示

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@114.xxx.xxx.xx'"
and check to make sure that only the key(s) you wanted were added.

使用以下命令測試是否能夠鏈接服務器成功

ssh 'root@114.xxx.xxx.xx'
  • B 服務器使用密鑰對登錄鏈接的狀況下

(好比阿里雲服務器在建立實例的時候能夠設置密鑰對鏈接,阿里雲會自動生成密鑰文件並下載提供給你保存)

先建立ssh代理,執行以下命令

eval $(ssh-agent -s)

將阿里雲下載的密鑰文件添加進來,下面的密鑰文件路徑修改成你本身的

ssh-add ~/.ssh/aliyun-ssh-key.pem

這樣就能夠實現本地終端免密碼登錄鏈接服務器了

8.使用pm2在本地使用命令進行一鍵部署了(本地執行)

  • 首先執行 pm2 init 生成一個 ecosystem.config.js 模版,並對相關參數進行配置

在本地終端執行下面的命令來進行第一次部署並填充遠程路徑

pm2 deploy production setup

每次本地git提交代碼後在本地終端執行下面的名來實現自動拉取git倉庫中的代碼並部署

pm2 deploy production

9.將當前pm2進程設置爲開機自啓動(服務器端執行)

pm2 startup
pm2 save

10.啓用SSL證書(Let's Encrypt證書)

不得不說Let's Encrypt證書作的簡直太方便了,幾個命令全自動搞定,無需手動作任何修改配置
依次執行下面的命令( 其它操做系統請自行在官方查看使用方法 https://certbot.eff.org/lets-... )

sudo apt-get update 
sudo apt-get install software-properties-common 
sudo add-apt-repository ppa:certbot / certbot 
sudo apt-get update 
sudo apt-get install python-certbot-nginx

安裝

sudo certbot --nginx

執行上面的命令後會提示你輸入你的郵箱,會檢測到你nginx配置的域名,選擇你要生成證書的域名序號便可;還會提示你是否在用戶使用http訪問的時候自動跳轉到https訪問,序號1是不跳轉,序號2是自動跳轉,建議選2

每次生成的證書有效期是90天,到期後須要從新申請,若是你想在證書到期前自動續訂能夠執行

sudo certbot renew --dry-run

這樣certbot會在證書到期時自動幫你續訂證書,這就至關於你有了永久的免費SSL證書了

pm2經常使用的命令

$ pm2 list               # 顯示全部進程狀態
$ pm2 monit              # 監視全部進程
$ pm2 logs               # 顯示全部進程日誌
$ pm2 stop all           # 中止全部進程
$ pm2 restart all        # 重啓全部進程
$ pm2 reload all         # 0 秒停機重載進程 (用於 NETWORKED 進程)
$ pm2 stop 0             # 中止指定的進程
$ pm2 restart 0          # 重啓指定的進程
$ pm2 startup            # 產生 init 腳本 保持進程活着
$ pm2 web                # 運行健壯的 computer API endpoint (http://localhost:9615)
$ pm2 delete 0           # 殺死指定的進程
$ pm2 delete all         # 殺死所有進程
相關文章
相關標籤/搜索