【DDD/CQRS/微服务架构案例】在Ubuntu 14.04.4 LTS中运行WeText项目的服务端
在《WeText項目:一個基于.NET實現的DDD、CQRS與微服務架構的演示案例》文章中,我介紹了自己用Visual Studio 2015(C# 6.0 with .NET Framework 4.6.1)開發的DDD/CQRS/微服務架構的案例項目:WeText。文章發出后反響很好,也很感謝大家的關注。在本文中我將介紹如何在Ubuntu 14.04.4 LTS中運行WeText項目的服務端。
為跨平臺而生
從一開始的設計,我就把WeText的服務端跨平臺納入了實踐目標,因此,所選擇的框架和技術全部都是可以跨平臺運行的。在這個過程中我沒有嘗試最新的.NET Core RC,而是繼續使用最新版本的Mono。Mono目前對微軟官方的.NET Framework兼容性已經做得非常好了,一句話概括:除了WPF、WWF不支持,以及部分WCF與ASP.NET 4.5異步支持不完善以外,其它功能完全支持。.NET Framework已經支持到4.6.1,C#語言規范已經支持到C# 6.0。具體詳情可以參考Mono的官方說明:http://www.mono-project.com/docs/about-mono/compatibility/。在最近工作上遇到一個項目需要能夠運行在Linux下,項目本身不大,也非常簡單,但美國團隊一聽說我打算采用Mono就不太愿意接受,最后還是選擇使用Java。當然我承認Java在多平臺的支持方面的確非常出色,但我還是想親身實踐一下Mono,想證明基于Mono的方案的確也能做得很好。這也是我將WeText定位為能夠跨平臺的一個原因吧。話說回來,從客戶的角度,微軟的開源為解決方案的技術選型提供了更為廣闊的選擇余地,客戶的整套方案不需要像以前那樣,一個部分使用了微軟技術,就整個解決方案都要使用微軟技術(比如,選擇了.NET Framework,就需要運行Windows的服務器;使用了Windows服務器,LDAP就是Active Directory最合適;使用Entity Framework,就需要SQL Server做數據庫,客戶一想,我還有一大堆的服務程序都是運行于Linux的,憑什么我的服務器一定要選擇Windows?于是,客戶也不會選擇.NET Framework)。當然,這是另外的話題,在這里我還是繼續介紹WeText服務端的跨平臺特性吧。
我在Ubuntu 14.04.4 LTS版本的Linux系統中成功安裝并運行了WeText的服務端,而且成功從Windows下的WeText.Web項目訪問這臺Linux服務器并跑通了所有的業務邏輯。聽起來是不是很讓人興奮?現在,就請和我一起了解一下整個安裝和運行過程吧。
環境準備
首先,得要有一臺Ubuntu 14.04.4 LTS的機器(如果是其它系列的Linux,以下安裝過程會有些不同,請大家自行參考各種組件在相應版本的Linux下的安裝步驟進行安裝,但不會影響后續WeText的編譯和執行)。在準備完這臺機器之后,就可以開始一步步地準備環境了。
安裝Mono
在Linux系統中安裝Mono,可以參考http://www.mono-project.com/docs/compiling-mono/linux/。基本上有兩種方式:一種是直接從發布版本進行編譯安裝,另一種是通過克隆代碼庫然后編譯安裝。當然,無論哪種方式,在編譯之前,請先通過下面的命令確保所有所需的軟件包都已經正確安裝:
| 1 | sudo apt-get install git autoconf libtool automake build-essential mono-devel gettext |
我自己是通過下載Release Package完成安裝的,Mono所有的Release Package位于:http://download.mono-project.com/sources/mono/。直接選擇最新版本下載解壓即可。
解壓完成后,進入解壓后的目錄,依次執行下面的命令完成編譯安裝:
| 1 2 3 | ./configure --prefix=/usr/local make make install |
第一條命令中的—prefix參數可以根據自己的情況設定。
安裝MongoDB
在WeText中,MongoDB被用作Event Store(事實上Event Sourcing暫時還未實現)。使用MongoDB的原因,是因為事件數據本身是非結構化的,而且MongoDB在replication方面有著很好的解決方案。安裝過程如下:
1. 為包管理系統導入公鑰
| 1 | sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 |
2. 為MongoDB創建list文件
這將為MongoDB在/etc/apt/sources.list.d目錄下創建mongodb-org-3.2.list文件。
| 1 | echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list |
3. 刷新本地包數據庫
| 1 | sudo apt-get update |
4. 安裝最新版本的MongoDB
| 1 | sudo apt-get install -y mongodb-org |
5. 啟動MongoDB服務
| 1 | sudo service mongod start |
6. 直接執行mongo命令,檢查MongoDB是否已經正確安裝
如果需要更加詳細的安裝步驟,請直接參考官方文檔,或者也可以上網搜索相關的中文資料參考。注意:目前暫時建議整個安裝過程采用默認設置,因為MongoDB的配置目前是寫死在服務端代碼中的(具體位置是:WeText.DomainRepositories項目下的WeTextMongoSetting.cs文件中)。如果更改了MongoDB的配置,那么也需要相應地更改這部分代碼,然后重新編譯WeText服務端(本文后半部分會介紹編譯過程)。今后會將MongoDB的配置移到配置文件中。
安裝RabbitMQ
1. 使用以下命令將RabbitMQ的APT Repository加到/etc/apt/sources.list.d目錄下
| 1 | echo 'deb http://www.rabbitmq.com/debian/ testing main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list |
2. 將RabbitMQ的公鑰加入受信秘鑰列表中
| 1 | wget -O- https://www.rabbitmq.com/rabbitmq-signing-key-public.asc | sudo apt-key add - |
3. 刷新本地包數據庫
| 1 | sudo apt-get update |
4. 安裝RabbitMQ
| 1 | sudo apt-get install rabbitmq-server |
如果需要更加詳細的安裝步驟,請直接參考官方文檔。
安裝MySQL
1. 刷新本地包數據庫
| 1 | sudo apt-get update |
2. 安裝MySQL
| 1 | sudo apt-get install mysql-server |
3. 使用以下命令嘗試連接MySQL服務
| 1 | mysql -u root -p |
如果需要更加詳細的安裝步驟,請直接參考這篇文章。
從源代碼編譯
1. 使用下面的git命令將WeText源代碼克隆到本地
| 1 | git clone https://github.com/daxnet/we-text.git |
2. 進入we-text\scripts目錄,執行mysql –u root –p命令啟動MySQL客戶端。并在MySQL中執行下面的命令,初始化WeText所需使用的查詢數據庫:
| 1 | \. mysql_query_databases.sql |
3.?注意:在Linux下的nuget.exe還是有些問題,在WeText下執行nuget.exe restore命令無法將所有的依賴庫下載下來(我還沒找到解決方案)。因此,只能在Windows中先使用Visual Studio 2015編譯WeText.sln,然后再將下載下來的packages目錄復制到Linux下we-text\src目錄下。可以通過Samba服務,或者使用FTP將packages目錄上傳到Linux系統中
4. 進入we-text\src目錄,使用下面的命令完成WeText服務端的編譯:
| 1 | xbuild /p:TargetFrameworkVersion=v4.6.1 /p:Configuration=ServerDebug WeText.sln |
5. 編譯完成后,會出現一些Assembly Binding的警告,請暫且忽略
運行WeText服務端
進入we-text\bin目錄,執行./WeText.Service.exe命令,啟動WeText服務端,將看到以下畫面:
在Windows中通過Visual Studio 2015打開WeText項目,修改WeText.Web項目的web.config文件,將下圖中的設置更改為Linux中的WeText服務端地址:
啟動WeText.Web項目,新建一個daxnet的用戶:
登錄后點擊菜單欄的My Texts菜單,創建一個新的Text:
現在,查看Linux下的MongoDB數據庫:
查看MySQL查詢數據庫:
查看RabbitMQ消息隊列:
OK,整個流程運行下來沒什么問題。最后,只要在WeText.Service.exe的窗口中直接回車,即可退出服務端的運行(退出需要花幾秒鐘時間)。
總結
本文詳細介紹了在Linux環境中編譯運行WeText客戶端的方法,并成功走通了整個流程。正如前文所述,WeText還有很多需要改進的地方,我也會一步步對其進行改進調整,如果有新的心得體會,我也會繼續分享給大家。
原文地址:http://www.cnblogs.com/daxnet/p/5426806.html
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
贊賞
人贊賞
總結
以上是生活随笔為你收集整理的【DDD/CQRS/微服务架构案例】在Ubuntu 14.04.4 LTS中运行WeText项目的服务端的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于CefSharp构建基于Chromi
- 下一篇: HoloLens开发手记 - HoloL