全棧工程師之路——服務器端自動部署

前言

做爲一名前端工程師,不只要能寫前端頁面,還要懂前端工程,各類庫,各類框架,各類衍生語言,信手捏來。
若是你想要成爲一名全棧工程師,那麼就必需要學會Node.js,學會線上服務器部署和發佈。javascript

準備

爲了不我的花錢買雲服務器。我試驗的方式是本地Vmware虛擬機(裝ubuntu 16.04)和本地windows平臺(win7)。html

1 Vmware虛擬機裝上ubuntu(教程網上找)
裝好之後,調整下窗口:
圖片描述前端

2 本地win7裝上xshellvue

開始

固然,你搞Node.js,確定虛擬機上要配置NodeJs環境
虛擬機搜Terminal,打開命令行,依次輸入一下命令。
1 升級一下包java

sudo apt-get update

2 安裝一些必備工具node

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

openssh-server是咱們經過ssh鏈接用到。
curl是一個Linux下的傳輸工具
git是安裝咱們的Node.js源碼須要的版本工具git

3 安裝nvmgithub

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash

4 安裝nodejsvue-cli

nvm install v8.1.2
nvm use v8.1.2

5 關閉防火牆(由於後面咱們要ssh連到這臺虛擬機,因此防火牆最好是關閉)shell

sudo ufw stop

6 安裝yarn vue-cli pm2

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn
npm install vue-cli pm2 -g

yarn是一個包管理工具,至關於npm
vue-cli是一個Vue的命令行工具
pm2是Node服務管理工具

測試虛擬機上Node是否安裝好

虛擬機上建立一個server.js:

vi server.js

拷貝代碼進去:
圖片描述

而後按下:wq! 保存
最後測試:

pm2 start server.js

若是看到以下狀態,說明啓動成功。
圖片描述

本地windows(win7)鏈接到虛擬機

1 修改sshd_config(保證能經過密碼登陸)

vim /etc/ssh/sshd_config

找到:
Authentication:
LoginGraceTime 120
PermitRootLogin prohibit-password
StrictModes yes

修改爲:

Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes

2 虛擬機啓動ssh

sudo service ssh start

3 查看ip(記住你的IP)

ifconfig

圖片描述

4 打開xshell
輸入ssh ubuntu@192.168.150.129
@前面是用戶名 @後面是IP。 用戶名必須正確,不然會提示服務器拒絕密碼。另外虛擬機的網絡配置是NAT,不須要改成橋接。
正常狀況下能連接成功

建立一個私有倉庫

我用的是bitbuket,本身先到上面常見一個push2Server的倉庫。
圖片描述
而後本地clone下來

目錄下建立一個server.js,代碼和上面的同樣。還有一個ecosystem.json(這個是pm2自動部署須要的),目錄結構以下:
圖片描述

ecosystem.json這文件的配置很重要。

{
  "apps": [
    {
      "name": "Test",
      "script": "server.js",
      "env": {
        "COMMON_VARIABLE": "true"
      },
      "env_production": {
        "NODE_ENV": "production"
      }
    }
  ],
  "deploy": {
    "production": {
      "user": "ubuntu", //注意點1: user必須是你ubuntu的名字
      "host": "192.168.150.129", //注意點2: ip保證正確
      "port": "22", //端口保證正確
      "ref": "origin/master",
      "repo": "git@bitbucket.org:YellMan/push2server.git", //注意點3 必須用git@..開頭 不要 用https開頭的
      "path": "/home/ubuntu/www/testproject/production",//注意點4 目錄最好是絕對路徑
      "ssh_options": "StrictHostKeyChecking=no",
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}

直接看注意點3: 由於虛擬機上要clone倉庫代碼,因此虛擬機上須要配置一下,git倉庫的key.
圖片描述
到bitbuket上面的倉庫,添加一個key。

key怎麼生成看教程:https://confluence.atlassian....

$ ssh-keygen 
$ cat ~/.ssh/id_rsa.pub
$ pbcopy < ~/.ssh/id_rsa.pub

最後一步很重要:到虛擬機上運行:

ssh -T git@bitbucket.org

注意點4:由於pm2要在虛擬機上建立這個路徑:/home/ubuntu/www/testproject/production。因此要保證testproject和www路徑必須有權限。/home/ubuntu是個人根路徑,而後建立www目錄,目錄下再建立testproject.
虛擬機上給一下權限:

sudo chmod 777 www
sudo chmod 777 testproject

最後,提交代碼到遠程倉庫。

發佈前配置

本地運行:

pm2 deploy ecosystem.json production setup

若是出現一下錯誤,重試一下就行了:
圖片描述
若是出現一下錯誤:
圖片描述
在服務端配置一下ssh key到的私有倉庫(看注意點3)
若是出現如下錯誤:
圖片描述
這是由於pm2是全局安裝的,路徑不是在默認路徑下面。因此須要用ls命令link一下.
在虛擬機運行以下命令:

whereis pm2
pm2: /opt/nodejs/bin/pm2
sudo ln -s /opt/nodejs/bin/pm2 /usr/bin/pm2

若是出現一下錯誤:
圖片描述
同理:

ubuntu@ubuntu:~$ whereis node
node: /usr/bin/node /home/ubuntu/.nvm/versions/node/v8.1.2/bin/node
sudo ln -s /home/ubuntu/.nvm/versions/node/v8.1.2/bin/node /usr/bin/node

最後發佈項目

pm2 deploy ecosystem.json production

虛擬上看一下是否自動部署成功:

圖片描述
恭喜你,你成功了!

以上就是今天分享的內容,謝謝閱讀,歡迎留言交流。

相關文章
相關標籤/搜索