Vercel?
vercel是我用過的最好用的網站托管服務。本網站就是基於hexo引擎模板開發,托管在vercel上的。
vercel類似於github page,但遠比github page強大,速度也快得多得多,而且將Github授權給vercel后,可以達到最優雅的發布體驗,只需將代碼輕輕一推,項目就自動更新部署了。
vercel還支持部署serverless接口。那代表着,其不僅僅可以部署靜態網站,甚至可以部署動態網站,而這些功能,統統都是免費的,簡直是白嫖黨的福利啊!!!!!
vercel還支持自動配置https,不用自己去FreeSSL申請證書,更是省去了一大堆證書的配置,簡直是懶人的福利啊啊啊有木有!
vercel目前的部署模板有31種之多,我沒有全部用過。接下來,我將介紹其中的兩種。

用Vercel部署Hexo
新建一個vercel項目
關於hexo的怎么用可以前往hexo官網了解
- 將hexo上傳至github上,如果是個人博客啥的,最好使用私有方式存儲,不出意外的話。整個hexo項目的結構類似於下圖
 

- 訪問並登陸vercel網站,推薦使用github登陸
 

- 在vercel的Overview菜單下,點擊按鈕 New Project
 - 在Import Git Repository選項下,選擇需要導入的項目,Import
 

- 繼續,點擊Deploy按鈕,vercel就開始構建了
 

- 構建完之后,可以在Overview菜單下,看到新建的項目,至此項目已經創建完成,可以通過vercel自動配置的子域名訪問了
 

設置自定義域名
-  
首先,我們需要申請一個自己的域名,本網站的域名i-tech.tech是在萬網上購買的,其他人可以自行選擇域名提供商
 -  
點擊卡片上的粗黑色的標題(上圖中的"my-story")進入配置界面,該界面,有4個菜單,我們點擊Settings->Domains,並在輸入框中填入想設置的域名,點擊Add按鈕

 -  
Add之后,可能會看到下圖中的樣子,別着急,還需要配置一下我們的域名,設置一下解析
 

- 打開域名控制台,添加一條如下圖的解析記錄
 

- 添加完之后,卡片會變成如圖的樣子
 

接下來就可以通過我們設置的域名(如https://case.i-tech.tech)訪問我們的網站了,一個簡單的Hexo項目就部署完成了!
需要更新網站,只需要往github上提交新的commit,vercel就會自動重新構建了!完美!!!!
用vercel部署Serverless Api,不購買雲服務器也能擁有自己的動態網站,酷!!!!
有人可能會問了。能部署api還不行啊,沒有數據庫啊。身為一個混跡江湖多年的白嫖黨,請跟我繼續往下走~
去https://cloud.mongodb.com上白嫖一個數據庫如何?
- 首先我們打開https://cloud.mongodb.com並注冊登錄
 
https://cloud.mongodb.com提供512M免費的MongoDB存儲額度,作為個人網站使用足夠了,當然還有其他的免費數據庫,如db4free.net、mlab.com等各位各取所需。了解更多可以訪問免費在線 MySQL/PostgreSQL/MongoDB/Redis 數據庫雲服務合集了解
我是覺得https://cloud.mongodb.com最好用,所以,本文中我只介紹它的使用方式。
- 依次點擊Atlas->Clusters
 

- 大家可以看到有個Create a New Cluster的按鈕,點擊它
 

- 選擇如下圖的配置,如果需要設置密碼的話,設置並記住密碼,點擊Create Cluster即可
 

- 至此我們已經有了一個屬於我們自己的數據庫的,可以在Atlas->Clusters頁面看到剛創建好的MongoDB數據庫,接下來,我們要通過Navicat數據庫可視化管理工具連接一下吧
 
通過Navicat連接MondDb數據庫
- 按照上文的操作,我們可以看到如下圖的界面,點擊CONNECT
 

- 接下來,選擇Connect Using MongoDB Compass
 

- 接下來,點擊I have MongDB Compass,可以看到一串連接字符串,如下圖紅線框起來的地方
 

- 參照上圖中紅線框起來的連接字符串,我們按照下圖填下我們的Navicat連接配置信息,密碼處填寫創建數據庫時設置的密碼
 

- 點擊測試連接,我會發現,連接成功,隨后點擊確定即可
 

萬事具備,只差Api,開啟Serverless Api開發之旅
基於noodejs的Serverless Api
- 第一次使用首先需要安裝vercel
 

-  
使用npm init給當前目錄添加一個package.json文件
 -  
登錄vercel,在終端輸入以下命令,回車之后會讓你輸入郵箱,填完郵箱后,vercel會向該郵箱發送一個鏈接,點擊該鏈接確認登錄
 
vercel login
 
        - 登錄完畢之后,輸入以下命令,將當前目錄初始化為vercel項目目錄。回車之后,vercel會詢問你一些信息,一路回車就好
 
vercel
 
        - 給vercel配置路由信息,在根目錄新建vercel的配置文件vercel.json,並填入下面的配置,下面的意思是,當訪問的路徑返回狀態是404時,就訪問welcome.html頁面
 
{
    "routes": [
        {
            "handle": "filesystem"
        },
        {
            "src": "/(.*)",
            "status": 404,
            "dest": "/welcome.html"
        }
    ]
}
 
        - 當前我們還沒有welcome.html頁面,我們在根目錄新建welcome.html,並填入下面的內容
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>熱烈歡迎!</title>
</head>
<body>
    <h1>大寫的歡迎!</h1>
</body>
</html>
 
        - 現在,啟動一下我們的vercel項目,查看一下效果,直接在控制台輸入下面的命令即可,點擊控制台輸出的Preview后面的鏈接即可預覽
 
vercel
 
        
- 訪問鏈接后我們可以看到
 

- 這還只是最簡單的頁面,到這里,我們的項目目錄結構應該長這樣子的
 

- 為了讓我們的項目更強大,引入node相關的依賴。為了開發更便捷,我們使用typescript。執行以下命令
 
npm i typescript
npm i express
npm i @vercel/node -D
npm i babel-register -D
npm i babel-plugin-transform-es2015-modules-commonjs -D
 
        - 在根目錄新建typescript的配置文件tsconfig.json,輸入以下內容
 
{
    "compilerOptions": {
        "target": "es6",
        "module": "commonjs",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "sourceMap": true,
        "noEmitHelpers": false
    },
    "exclude": [
        "node_modules",
        "typings/main",
        "typings/main.d.ts",
        "typings/browser",
        "typings/browser.d.ts"
    ],
    "compileOnSave": true
}
 
        - 為了使我們的時區設置正確,我們新建一個文件.env。寫入以下內容
 
TZ='asia/shanghai'
 
        - 接下來開始准備api。在根目錄下添加一個新目錄,命名為api,我們后面新建的api將會放在里面
 - 在api目錄下,新建文件helloworld.ts,並寫入下面的內容,作為測試簡單地輸出hello world!
 
import { NowRequest, NowResponse } from '@vercel/node';
module.exports = async (req: NowRequest, res: NowResponse) => {
    var data = {
        msg: "hello world!"
    }
    res.status(200).json(data);
}
 
        - 至此,我們一個簡單的返回helloworld的serverless接口已經開發完畢了,我們預覽一下效果,輸入命令vercel,並訪問Preview鏈接查看效果
 

Serverless連接MongoDB數據庫
- 通過以下命令安裝依賴,我們就可以在nodejs中操作MongoDB數據庫了
 
 npm i mongodb
 npm i @types/mongodb -D
 
        - 為了方便我們測試,我們先用Navicat往MongoDB添加一條數據,添加后的數據長這樣,集合的名字叫做northwind,document為{name:"huangkemeng"}
 

- 接下來,我們用接口返回這條數據。我們在api目錄下創建名為getUsername.ts的文件,文件內容如下,注意:將方括號內的信息更換成你自己的!!!
 
import { NowRequest, NowResponse } from '@vercel/node';
import { MongoClient } from 'mongodb'
const CONNECTION_STRING = "mongodb+srv://huangkemeng:[yourpassword]@clusterblog.engmb.azure.mongodb.net/admin";
module.exports = async (req: NowRequest, res: NowResponse) => {
    const client = await MongoClient.connect(CONNECTION_STRING, { useNewUrlParser: true, useUnifiedTopology: true });
    const db = await client.db('[hkm-story]');
    var result = await db.collection("[northwind]").find().toArray();
    res.status(200).json(result);
}
 
        - 關於上圖中提到的CONNECTION_STRING變量的值,我們很輕而易舉得地找到,請看下圖
 


- 至此,一個通過MongoDB返回數據的serverless接口開發完畢,請看效果
 

- 通過運行vercel --prod命令即可將其發布。
 
關於更多關於vercel的介紹了,可以郵件聯系我,比如該serverless的調試等,篇幅太長,這里就不再贅述!。End!
轉載自葉子的博客
