使用Eclipse插件或VMC佈署Cloud Foundry應用

下面簡述我在Cloud Foundry部署個人應用「咖啡廳」的坎坷歷程,僅做爲筆記使用。我想每一個人遇到的問題都是不一樣的,佈署不成功找緣由最好、也是最有效的方法就是看Tomcat系統錯誤日誌logs! java

根據衆多教程及方法,咱們知道部署CF應用有多種方式,我所熟悉的是經過Ruby命令行和Eclipse插件,在此推薦Eclipse插件,由於這種方式更直觀,並且能夠很方便的查看系統日誌,便於錯誤調試。 node

1.Eclipse插件的下載 mysql

1)Help-- >Eclipse Marketplace,在彈出框裏,輸入Cloud Foundry,點擊安裝,安裝後重啓Eclipse,就表明安裝完成了。 git


2)安裝完成須要調出這個插件使用,方法是:Window --> Show View ,在彈出框裏選擇Server,點擊肯定,這是就會在平時咱們經常使用的控制檯欄(這個地方我不知道官方的說法是啥)出現了Server這個欄目。若是咱們曾使用過Tomcat的話,會在這裏看到Tomcat服務選項。 github

這裏雖沒有直接顯示Cloud Foundry Server的影子,並不表明安裝錯誤,而是咱們沒有新建!在Server選項框的「內容區」右鍵-->New -->Server,在彈出的對話框裏下拉,回出現VMware,點進去就看到CloudFoundry了,選擇它,肯定。這樣咱們就創建了Cloud Foundry Server。 web

3)在上一步裏調出的Cloud Foundry Server控制面板中,先驗證帳戶(用戶名是你申請時的郵箱,密碼是註冊時發給您的那幾個隨機字符---不知道如何修改密碼)。驗證完成後就能夠進入Cloud Foundry Server控制面板了,左上角列出了部署的應用,若是沒有,能夠直接把應用從Project Explorer拖到這裏,根據提示引導,就能夠完成部署了。 sql

4)數據庫支持:在上面的應用列表框的下面就是DataBase Service,點擊這個標題欄的帶星的圖標就能夠創建本身的數據了。但我不知道如何建表,據說是不支持,這樣咱們就須要在程序裏註冊了。 數據庫

5)部署應用:當咱們搭建好服務器環境和數據庫支持,就能夠把咱們的應用部署在CF上了。最簡單的方式是把應用用鼠標拖動到CF管理窗體中的Applications窗口中 api


6)調試應用:以上只是對Eclipse插件的簡單實用及部署,咱們的應用在部署的時候極可能不成功,最好的解決方法應該是查看系統日誌。查看部署應用文件列表的方法:Window-->Show View-->Remote Systems-->Remote Systems,這樣咱們就在Eclipse右側會看到咱們Remote Systems窗口,在這裏咱們就能夠檢查CF端部署的應用了。這個窗口是文件列表的形式,咱們一步步雙擊,就能耐心點到咱們的應用裏,在應用名的目錄裏會有logs 和 tomcat 選項,logs裏的內容不全面,建議看tomcat文件裏的logs,那裏會有更詳細的日子記錄,調試目標也應該注意針對這裏面的。 tomcat


以上就是關於Eclipse插件的使用介紹,也是推動使用的方式。若是你對這個不感興趣的話,興許命令行VMC的方式能夠給你點參考,命令行相對於Eclipse插件來講,操做起來功能更多,但不是很方便,它能帶給咱們最大的好處就是能夠直接使用命令提示行創建數據表,不須要程序去完成了。一樣的步驟:下軟件,安裝,部署,調試……

1)搭建VMC命令環境

下軟件:vmc須要Ruby支持,因此須要下載Ruby軟件(至關於JDK)。我是Windows用戶,因此須要下載安裝Windows下面的Ruby安裝包(http://www.rubyinstaller.org),下載後安裝便可。能夠經過Windows開始菜單來訪問命令行工具 (All Programs > Ruby <version> > Start Command Prompt with Ruby)。最後,經過下面Ruby命令行更新RubyGems:
    ....> gem update --system

安裝vmc

    ...> gem install vmc             Windows平臺

安裝完成就能夠與Cloud Foundry平臺鏈接了,命令:

    prompt$ vmc target api.cloudfoundry.com

登陸平臺的命令:

       prompt$ vmc login

輸入郵箱,根據提示正確輸入密碼就應該可以登陸成功,若是命令能夠,就能夠着手部署咱們的應用了。方法是先定位到咱們的應用目錄內(如kafeting這個應用,應先進入應用所在磁盤下,再使用cd命令,如:cd 應用目錄路徑,就進入應用中了【其實上傳的應用是把文件push到服務器tomcat/webapps/ROOT目錄裏面了】),使用 vmc push 就能夠佈署咱們的應用(在部署的時候會詢問你是否create service...,實際上是數據庫服務,根據須要)。

注:第一次安裝命令提示輸入參數,部署完成後會在應用目錄下生成一個manifest.yml文件,這是ruby文件,裏面記錄了咱們應用的一些部署參數,是爲了方便更新應用建立的。若是咱們想從新部署,能夠刪除此文件。

2)建數據庫:若是你的應用須要數據庫服務,就須要先下載工具,更加帖子:Cloud Foundry mysql 數據導入裏的介紹的方法安裝命令步驟以下:

gem install rest-client
gem install eventmachine --pre
gem install caldecott

若是安裝以上的提示能安裝成功,並使用部署完成後系統會檢查,若是檢查失敗,應用程序在本地是能夠運行的:vmc tunnel命令,就說明安裝成功,若是沒有的話我就不知道了*{*.

使用vmc tunnel命令實現了直接操做數據庫的功能,在mysql>命令裏就能夠建立數據表了。

3)其餘vmc的經常使用命令

vmc可使用的命令有:

Getting Started
    target [url]                                                    Reports current target or sets a new target
    login  [email] [--email, --passwd            Login
    info                                                               System and account information

   Applications
    apps                                                            List deployed applications

  Application Creation
    push [appname]                                      Create, push, map, and start a new application
    push [appname] --path                           Push application from specified path
    push [appname] --url                              Set the url for the application
    push [appname] --instances <N>        Set the expected number <N> of instances
    push [appname] --mem M                     Set the memory reservation for the application
    push [appname] --runtime RUNTIME  Set the runtime to use for the application
    push [appname] --no-start                     Do not auto-start the application

  Application Operations
    start <appname>                                     Start the application
    stop  <appname>                                    Stop the application
    restart <appname>                                  Restart the application
    delete <appname>                                  Delete the application
    rename <appname> <newname>       Rename the application

  Application Updates
    update <appname> [--path]                            Update the application bits
    mem <appname> [memsize]                         Update the memory reservation for an application
    map <appname> <url>                                    Register the application to the url
    unmap <appname> <url>                               Unregister the application from the url
    instances <appname> <num|delta>            Scale the application instances up or down

  Application Information
    crashes <appname>                             List recent application crashes
    crashlogs <appname>                          Display log information for crashed applications
    logs <appname> [--all]                          Display log information for the application
    files <appname> [path] [--all]               Display directory listing or file download for [path]
    stats <appname>                               Display resource usage for the application
    instances <appname>                          List application instances

  Application Environment
    env <appname>                                                             List application environment variables
    env-add <appname> <variable[=]value>                  Add an environment variable to an application
    env-del <appname> <variable>                                 Delete an environment variable to an application

  Services
    services                                                                             Lists of services available and provisioned
    create-service <service> [--name,--bind]                    Create a provisioned service
    create-service <service> <name>                                Create a provisioned service and assign it <name>
    create-service <service> <name> <app>                   Create a provisioned service and assign it <name>, and bind to <app>
    delete-service [servicename]                                        Delete a provisioned service
    bind-service <servicename> <appname>                  Bind a service to an application
    unbind-service <servicename> <appname>             Unbind service from the application
    clone-services <src-app> <dest-app>                        Clone service bindings from <src-app> application to <dest-app>

  Administration
    user                                                               Display user account information
    passwd                                                         Change the password for the current user
    logout                                                            Logs current user out of the target system
    add-user [--email, --passwd]                   Register a new user (requires admin privileges)
    delete-user <user>                                    Delete a user and all apps and services (requires admin privileges)

  System
    runtimes                                                       Display the supported runtimes of the target system
    frameworks                                                  Display the recognized frameworks of the target system

  Misc
    aliases                                                         List aliases
    alias <alias[=]command>                        reate an alias for a command
    unalias <alias>                                          Remove an alias
    targets                                                          List known targets and associated authorization tokens

  Help
    help [command]                              Get general help or help on a specific command
    help options                                     Get help on available options

---------------------------------------------------------------------------------------------------------------

最後特別提醒的是Cloud Foundry提供的數據庫用戶名和密碼的問題。先說說我遇到的狀況吧:

我以前部署了2個應用,建立了1個數據庫服務,2個應用都綁定在這個數據庫服務上。經過jsp頁面輸出系統環境變量的值(VCAP_SERVICES),比較獲得的2個JSON結果,發現結果並不相同。因此咱們在佈署時不能拿第一個應用獲得的值來設置第二個應用的用戶名和密碼,這算是個人發現吧。最好的辦法是使用自適應方式,JFinal自適應實現方式,能夠參考開源系統ChunMengLu jnode但要注意使用的JSON包,是普通的仍是FastJSON,2者是有區別的, 我就在這上面耗了很久才明白過來。

自適應的原理就是輸出環境安裝環境的環境變量信息,若是想知道系統全部的環境變量Key,能夠經過方法:

Map<String,String> m  = System.getenv(); 

獲取,但對咱們來講,最有用的仍是VCAP_SERVICES對應的值。

PS:我也曾不止一次嘗試使用本地安裝的SQLyog去遠程訪問佈署應用的數據庫,但沒有成功,不知道是我鏈接參數設置有問題仍是CF自己就不支持,若是支持的話,各有利弊吧~~其餘方式如:使用Navicate鏈接數據庫我並無嘗試過,若是你感興趣,能夠去嘗試一下。

附:社區裏一篇提問:Cloud Foundry 怎麼鏈接MYSQL數據庫,而後建立數據庫和表 裏面會有些有用的連接。

最後,預祝您的Cloud Foundry佈署之旅愉快~!

相關文章
相關標籤/搜索