作者:AppCoda,原文鏈接,原文日期:2016-04-16
譯者:Crystal Sun;校對(duì):numbbbbb;定稿:Channe
我之前寫過這篇文章 Migrating a parse database to a self-host MongoDB instance,在這次的春季輔導(dǎo)教程中,我們看一下如何將 parse 服務(wù)器遷移到 Heroku 或 Amazon Web Service。
對(duì)于還不了解 Parse 之死的人來(lái)說(shuō),這意味著服務(wù)器(處理數(shù)據(jù)、與數(shù)據(jù)庫(kù)互動(dòng)、發(fā)送接收請(qǐng)求等待)需要遷移到其他地方了。Parse,后端即服務(wù)(BaaS),為開發(fā)者提供服務(wù)器和數(shù)據(jù)庫(kù)的服務(wù)。然而,Parse 已在一月份關(guān)閉,官方建議,在 2017 年 1 月 28 日徹底停止服務(wù)之前,請(qǐng)遷移 Parse 應(yīng)用。Parse 官方建議你先遷移數(shù)據(jù)庫(kù),然后在遷移服務(wù)器。本教程假定你已經(jīng)完成了數(shù)據(jù)庫(kù)的遷移,正如我們?cè)谏掀坛?a target="_blank" rel="nofollow">第一部分中所做的。
幸運(yùn)的是,parse-server(GitHub 項(xiàng)目,由 Facebook 開源,『偉大的』 Parse 統(tǒng)治者)可以部署在大部分的云服務(wù)上。在本節(jié)教程里,我們會(huì)講述如何將 parse-server 部署到Salesforce 旗下知名的云服務(wù)供應(yīng)商 Heroku。在本篇文章的最后部分,我們會(huì)演示如何部署到 Amazon Web Services(AWS)上,世界上很多知名的 App 都在使用 AWS 的服務(wù)。
準(zhǔn)備開始
首先到 Heroku.com 網(wǎng)站注冊(cè)一個(gè)帳號(hào)。為了演示 demo,我選擇了免費(fèi)方案。你根據(jù)自己的需要,選擇合適的方案,比如付費(fèi)方案。你可以在這里看到所有的付費(fèi)方案。
部署到 Heroku 有兩種方法可供選擇。第一種是點(diǎn)擊 Deploy to Heroku 按鈕,然后出現(xiàn)一步接一步的提示流程,因?yàn)?Parse 已經(jīng)在 Heroku 的服務(wù)器上設(shè)置過 parse-server 了,對(duì)非 JavaScript 程序員來(lái)說(shuō),這可能是最簡(jiǎn)單的方法了。如果你熟悉 git 和命令行,請(qǐng)使用克隆應(yīng)用然后用命令行完成。話雖如此,但是你不能一輩子都避免使用命令行。不管你選擇那種方式,都會(huì)涉及到命令行的。
方法 1:使用 Heroku 按鈕
點(diǎn)擊上面的按鈕,創(chuàng)建一個(gè)新的 heroku 應(yīng)用,你會(huì)看到類似下方圖片的界面:

設(shè)置向?qū)С霈F(xiàn),讓你輸入應(yīng)用名稱(全部小寫且不允許有空格)。
接下來(lái),選擇 runtime 選項(xiàng)。如果你住在美國(guó),選擇 United States(美國(guó)),其他地方,選擇 Europe(歐洲)。runtime 選項(xiàng),就是你希望你的應(yīng)用部署在哪個(gè)地方??紤]到性能和速度,最好將應(yīng)用服務(wù)器部署在離你較近的地方。

接下來(lái)更新配置,填寫 Parse 賬戶里對(duì)應(yīng)的密鑰(或者生成新的密鑰,如果你不是遷移現(xiàn)存應(yīng)用的話,這點(diǎn)以后再說(shuō))。安裝路徑為 /parse。
當(dāng)你填完所有的字段后,點(diǎn)擊 deploy 按鈕,暫時(shí)先空著 MongoLab(也就做 mLab)開發(fā)。

可能需要你輸入你的信用卡。
方法 2:克隆 Heroku 應(yīng)用
parse-server 是開源項(xiàng)目,可以在 GitHub 上下載。如果你選擇的是命令行而不是點(diǎn)擊 Heroku 按鈕,那么繼續(xù)下方的操作。開始前,先打開終端(Terminal),使用下方的命令來(lái)克隆應(yīng)用:
bash
cd ~
cd Desktop
git clone https://github.com/ParsePlatform/parse-server-example.git
git add .
git init
git commit -m "Initial Commit"

現(xiàn)在,你已經(jīng)成功地將 parse-server 克隆到桌面了。
修改數(shù)據(jù)庫(kù)的 URI
不管你在上面選擇了哪個(gè)方式,現(xiàn)在你的應(yīng)用在一定程度上已經(jīng)設(shè)置過了。如果你使用是方法 1,你需要在你電腦里復(fù)制一份本地代碼副本,首先用下列命令行(也會(huì)將 App 克隆到電腦桌面)。
注意:下方的選項(xiàng)適用于選擇了方法 1 的人
bash
$ heroku login
$ cd ~/Desktop
$ heroku git:clone -a your-app-name
$ cd your-app-name
$ git add .
$ git commit -am "make it better"
$ git push heroku master
登錄后,需要輸入認(rèn)證(之后會(huì)詳細(xì)說(shuō)明,不過現(xiàn)在只需要輸入 Heroku 帳號(hào)的郵箱和密碼,密碼不會(huì)出現(xiàn)在屏幕上)。
現(xiàn)在,打開你最喜歡的文本編輯器(我比較喜歡 Sublime Text),打開新克隆的庫(kù)(repository)(對(duì)于新手來(lái)說(shuō),你可以直接將整個(gè)文件夾拖到 sublime text 圖標(biāo)上,然后 sublime text 會(huì)自動(dòng)打開文件,或者使用頂部菜單的 File -> Open)。

現(xiàn)在,我們需要打開 index.js 文件,修改 API 變量。注意第 14-23 行。

從第 14 行開始,我們需要修改 databaseURL 參數(shù)。使用在本教程第一部分生成的路徑來(lái)替換參數(shù)。我會(huì)使用下面的 url,不過你必須用你自己的 url 來(lái)替換。
mongodb://admin:mypassword@ds017678.mlab.com:17678/appcoda-test
接下來(lái),我們需要填寫 appId 和 masterKey 參數(shù)。如果你是在遷移一個(gè)已經(jīng)存在的應(yīng)用,到 parse.com 上找到對(duì)應(yīng)的數(shù)據(jù)。如果這是你第一次使用 parse-server 創(chuàng)建一個(gè)新工程,你可以生成隨機(jī)的字母數(shù)字密鑰。
在 parse.com 網(wǎng)站上登錄你的 Parse 帳號(hào),找到 Settings(設(shè)置),選擇 Security & Keys。復(fù)制粘貼你的 Application ID(復(fù)制這個(gè)應(yīng)用,不要復(fù)制成其他應(yīng)用的)和 Master Key。下面的圖片可供你參考(我的密鑰出于安全考慮遮擋)。

注意:如果你選的是方法 1,那已經(jīng)設(shè)置了你的密鑰,你可以直接跳過這一步。即使如此,我還是建議你看一下,這樣你能對(duì) parse-server 的工作機(jī)制有更深入的理解。
在 index.js 文件里替換上你剛剛復(fù)制來(lái)的新密鑰,你也可以添加 clientKey 作為一個(gè)參數(shù),從 Parse 中獲取。
最后,記住保存你的操作,快捷鍵 Command+S(Mac 電腦上)。
如果你不是遷移應(yīng)用,那么使用隨機(jī)生成器(例如 random.org 或其他類似的東西)來(lái)生成字母數(shù)字密鑰。
接下來(lái),部署 Heroku。
將 Parse 服務(wù)器部署到 Heroku
首先在電腦上安裝 Heroku 工具條,從鏈接中可以找到官方安裝指南。安裝完成后,在終端(Terminal)中輸入下列命令行:
bash
heroku login
接下來(lái)輸入登錄 Heroku 信息,注意當(dāng)你輸入密碼的時(shí)候,密碼不會(huì)出現(xiàn)在屏幕上。
如果你選擇的是方法 1,就沒有必要用下面的命令行創(chuàng)建一個(gè) Heroku 應(yīng)用了。如果你選擇的是方法 2,確保輸入下列命令行來(lái)創(chuàng)建一個(gè) Heroku 應(yīng)用。
bash
heroku create
Heroku 會(huì)給你創(chuàng)建一個(gè)應(yīng)用,現(xiàn)在提交修改內(nèi)容,代碼如下:
bash
git add .
git init
git commit -m "Updated api config"
git push heroku master
現(xiàn)在,你已經(jīng)成功部署了 Heroku!如果你遇到任何錯(cuò)誤,請(qǐng)?jiān)谙路降脑u(píng)論欄中留言,我將盡力幫助你。
設(shè)置 Heroku 的環(huán)境變量
接下來(lái),我們需要設(shè)置 Heroku 的環(huán)境變量,回到終端(Terminal),輸入下列命令(使用你的 MongoDB 實(shí)例中的 URI,我們之前介紹過)。
bash
heroku config:set DATABASE_URI=mongodb://admin:mypassword@ds017678.mlab.com:17678/appcoda-test
回到 Heroku 網(wǎng)頁(yè)上,點(diǎn)擊你的應(yīng)用,在 Settings tab 頁(yè)下,點(diǎn)擊 reveal config variables。

現(xiàn)在你應(yīng)該可以看到 Heroku 的 config Variables 里有了 database URI。
恭喜你!你的 parse-server 已經(jīng)成功地部署到了 Heroku。唯一的問題是:還沒有連接到你的 iOS 應(yīng)用上。
定位 Parse 服務(wù)器的 URL
為了能夠?qū)⒛愕膽?yīng)用連接到新的 parse-server,首先要從 Heroku 應(yīng)用設(shè)置里定位托管地址(hosting url)。

回到 index.js ,找到第 27 行,注意找 moutPath 變量是 /parse。

這個(gè)變量表示 parse 在 Heroku 服務(wù)器上的地址。目前來(lái)說(shuō),地址是 /parse。所以,可以在 yourapp.herokuapp.com/parse(改成你自己的域名) 中訪問 parse-server。
設(shè)置 iOS 應(yīng)用
現(xiàn)在,我們已經(jīng)正確地配置和部署了服務(wù)器,是時(shí)候來(lái)設(shè)置 iOS 應(yīng)用設(shè)置選項(xiàng)了,讓 iOS 應(yīng)用連接到新的 parse 服務(wù)器上。
在 Xcode 里,打開應(yīng)用,選擇 appdelegate.swift 文件,刪除你以前的 app key 和 client key(然后寫上你自己的密鑰和服務(wù)器的 url)。
把下面這段代碼刪掉:
Parse.setApplicationId(“xxxxxxxxxxxxxxxxxxxxxxxx”, clientKey: “xxxxxxxxxxxxxxxxxxxxxxxx”)
替換成:
let config = ParseClientConfiguration(block: {
(ParseMutableClientConfiguration) -> Void in
ParseMutableClientConfiguration.applicationId = "xxxxxxxxxxxxxxxxxxxxxxxx";
ParseMutableClientConfiguration.clientKey = "xxxxxxxxxxxxxxxxxxxxxxxx";
ParseMutableClientConfiguration.server = "xxxxxxxxxxxxxxxxxxxxxxxx.com/parse";
});
Parse.initializeWithConfiguration(config);
完成操作后,點(diǎn)擊 Run 按鈕,測(cè)試一下應(yīng)用。正常情況下應(yīng)用會(huì)和遷移以前一樣運(yùn)行。如果你使用云代碼,可能需要修改一下代碼,來(lái)適應(yīng)新的 parse 服務(wù)器環(huán)境。我們會(huì)在下一個(gè)教程中涉及這個(gè)話題。另外,在下一個(gè)教程里,我們還會(huì)介紹在服務(wù)器里托管 Parse 的 dashboard。不過現(xiàn)在而言,你可以繼續(xù)使用 parse.com 的 dashboard,直到官方徹底關(guān)閉服務(wù),也就是 2017 年的一月。
恭喜!你已經(jīng)成功地在 Heroku 上部署了 parse-server。
將 Parse 服務(wù)器部署到 AWS
注意:如果你已經(jīng)將 parse-server 部署到了 Heroku 上,那么就不需要再部署到 AWS 上了,畢竟你的服務(wù)器只能使用一個(gè)云服務(wù)。這部分主要是用來(lái)參考。如果你不想使用 Heroku,想使用 AWS,可以繼續(xù)閱讀下面的章節(jié)。我會(huì)假設(shè)你已經(jīng)閱讀過上面 Heroku 部分的教程內(nèi)容,如果出現(xiàn)同樣的設(shè)置內(nèi)容,我不會(huì)贅述。
Amazon Web Services(AWS)是全球知名的云服務(wù)提供商,為科技界許多知名的大型公司提供云服務(wù)。實(shí)際上,很多大型科技公司都在使用 AWS 的服務(wù),例如蘋果公司的 iCloud,Hulu,AirBnb,Lyft,Adobe,Slack (這些都是國(guó)外知名的科技公司)等等,這些只是使用 AWS 云存儲(chǔ)服務(wù)的眾多公司中一小部分。
那么,為什么我先介紹 Heroku 呢?不同于 AWS 的是,Heroku 更容易設(shè)置。對(duì)于大部分的設(shè)置,你可以直接進(jìn)行無(wú)需輸入賬單信息。AWS 則不一樣,設(shè)置方法比較復(fù)雜。為了演示如何部署到 AWS 上,我們將使用另外一個(gè)部署按鈕和設(shè)置向?qū)?,?lái)讓所有的工作簡(jiǎn)單流暢。
再次強(qiáng)調(diào)一下,如果你已經(jīng)將應(yīng)用部署到了 Heroku,而且對(duì) Heroku 的服務(wù)比較滿意,你可以直接跳過這部分了。然而,如果你對(duì)如何部署到 AWS 上感興趣,那么讓我們開始吧!
第一件事,到 AWS 上注冊(cè)一個(gè) AWS 帳號(hào),需要提供你的付款信息,這樣才能使用免費(fèi)方案。
完成后,點(diǎn)擊下方的按鈕,創(chuàng)建一個(gè)新的 AWS 應(yīng)用,AWS 提供一組云服務(wù)工具,每個(gè)工具都有自己的獨(dú)特的功能,在本節(jié)教程中,我們使用 Elastic Beanstalk(和 Elastic Cloud Compute Engine 或簡(jiǎn)稱 EC2 緊密相關(guān))。
什么是 Elastic Beanstalk ?
根據(jù) Amazon 上的簡(jiǎn)介,Elastic Beanstalk 是一個(gè)易于使用的,用于部署和擴(kuò)展網(wǎng)頁(yè)應(yīng)用和服務(wù),適用的語(yǔ)言有 Java、.NET、PHP、Node.js、Python、Ruby、Go、Docker,例如 Apache、Nginx、Passenger 和 IIS。
是不是很炫酷?或許吧,總而言之,我們將使用這個(gè)服務(wù)來(lái)設(shè)置和運(yùn)行我們的 parse 服務(wù)器。如果你想了解更多有關(guān) Elastic Beanstalk 的信息,請(qǐng)參考官方網(wǎng)頁(yè)。
點(diǎn)擊按鈕后,會(huì)出現(xiàn)一個(gè)增加應(yīng)用名稱的界面,如下圖。

下一步,確保你的設(shè)置如下圖,然后繼續(xù)。

在接下來(lái)的界面里使用正確的密鑰上傳 parse 設(shè)置,parse 裝在 /parse 下。

現(xiàn)在,點(diǎn)擊 upload and deploy 按鈕,完成最后一步。不出意外應(yīng)用已經(jīng)正確設(shè)置在 AWS 上了。
當(dāng)你設(shè)置 iOS 應(yīng)用時(shí),確保你已經(jīng)定位了 AWS 的 URL,可以在 elastic beanstalk 里找到(如下圖)。

恭喜!你成功將 parse 服務(wù)器部署到了 AWS 上!剩下需要做的事情就是用適當(dāng)?shù)拿荑€和新的服務(wù)器 url 來(lái)設(shè)置 iOS 應(yīng)用(后綴 /parse)。
結(jié)束
在本節(jié)教程中,我們深入了解了部署 parse 服務(wù)器的過程,估計(jì)現(xiàn)在你對(duì)部署過程已經(jīng)掌握的比較牢固了。
注意,有些細(xì)節(jié)本文沒有討論。如果你使用的是云代碼,你可能需要做一些改動(dòng)才能正常運(yùn)行。另外,你可能還需要一個(gè) Parse dashboard 的替代品。幸運(yùn)的是,Parse 團(tuán)隊(duì)已經(jīng)將 dashboard 開源了,并提供了詳盡的云代碼更新指南。在之后的教程中,我們會(huì)詳細(xì)討論這些內(nèi)容。不過現(xiàn)在,你首先要將應(yīng)用部署到 Heroku 或 AWS 上!
你覺得本教程怎么樣?請(qǐng)留下評(píng)論,分享你的想法。
本文由 SwiftGG 翻譯組翻譯,已經(jīng)獲得作者翻譯授權(quán),最新文章請(qǐng)?jiān)L問 http://swift.gg。