zoukankan      html  css  js  c++  java
  • 【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/。基本上有两种方式:一种是直接从发布版本进行编译安装,另一种是通过克隆代码库然后编译安装。当然,无论哪种方式,在编译之前,请先通过下面的命令确保所有所需的软件包都已经正确安装:

    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/。直接选择最新版本下载解压即可。

    解压完成后,进入解压后的目录,依次执行下面的命令完成编译安装:

    ./configure --prefix=/usr/local
    make
    make install

    第一条命令中的—prefix参数可以根据自己的情况设定。

    安装MongoDB

    在WeText中,MongoDB被用作Event Store(事实上Event Sourcing暂时还未实现)。使用MongoDB的原因,是因为事件数据本身是非结构化的,而且MongoDB在replication方面有着很好的解决方案。安装过程如下:

    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文件。

    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. 刷新本地包数据库

    sudo apt-get update

    4. 安装最新版本的MongoDB

    sudo apt-get install -y mongodb-org

    5. 启动MongoDB服务

    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目录下

    echo 'deb http://www.rabbitmq.com/debian/ testing main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list

    2. 将RabbitMQ的公钥加入受信秘钥列表中

    wget -O- https://www.rabbitmq.com/rabbitmq-signing-key-public.asc | sudo apt-key add -

    3. 刷新本地包数据库

    sudo apt-get update

    4. 安装RabbitMQ

    sudo apt-get install rabbitmq-server

    如果需要更加详细的安装步骤,请直接参考官方文档

    安装MySQL

    1. 刷新本地包数据库

    sudo apt-get update

    2. 安装MySQL

    sudo apt-get install mysql-server

    3. 使用以下命令尝试连接MySQL服务

    mysql -u root -p

    如果需要更加详细的安装步骤,请直接参考这篇文章

    从源代码编译

    1. 使用下面的git命令将WeText源代码克隆到本地

    git clone https://github.com/daxnet/we-text.git

    2. 进入we-textscripts目录,执行mysql –u root –p命令启动MySQL客户端。并在MySQL中执行下面的命令,初始化WeText所需使用的查询数据库:

    . mysql_query_databases.sql

    3. 注意:在Linux下的nuget.exe还是有些问题,在WeText下执行nuget.exe restore命令无法将所有的依赖库下载下来(我还没找到解决方案)。因此,只能在Windows中先使用Visual Studio 2015编译WeText.sln,然后再将下载下来的packages目录复制到Linux下we-textsrc目录下。可以通过Samba服务,或者使用FTP将packages目录上传到Linux系统中

    4. 进入we-textsrc目录,使用下面的命令完成WeText服务端的编译:

    xbuild /p:TargetFrameworkVersion=v4.6.1 /p:Configuration=ServerDebug WeText.sln

    5. 编译完成后,会出现一些Assembly Binding的警告,请暂且忽略

    运行WeText服务端

    进入we-textin目录,执行./WeText.Service.exe命令,启动WeText服务端,将看到以下画面:

    image

    在Windows中通过Visual Studio 2015打开WeText项目,修改WeText.Web项目的web.config文件,将下图中的设置更改为Linux中的WeText服务端地址:

    image

    启动WeText.Web项目,新建一个daxnet的用户:

    image

    登录后点击菜单栏的My Texts菜单,创建一个新的Text:

    image

    现在,查看Linux下的MongoDB数据库:

    image

    查看MySQL查询数据库:

    image

    查看RabbitMQ消息队列:

    image

    OK,整个流程运行下来没什么问题。最后,只要在WeText.Service.exe的窗口中直接回车,即可退出服务端的运行(退出需要花几秒钟时间)。

    总结

    本文详细介绍了在Linux环境中编译运行WeText客户端的方法,并成功走通了整个流程。正如前文所述,WeText还有很多需要改进的地方,我也会一步步对其进行改进调整,如果有新的心得体会,我也会继续分享给大家。

  • 相关阅读:
    Selenium简单测试页面加载速度的性能(Page loading performance)
    Selenium Page object Pattern usage
    Selenium如何支持测试Windows application
    UI Automation的两个成熟的框架(QTP 和Selenium)
    分享自己针对Automation做的两个成熟的框架(QTP 和Selenium)
    敏捷开发中的测试金字塔(转)
    Selenium 的基础框架类
    selenium2 run in Jenkins GUI testing not visible or browser not open but run in background浏览器后台运行不可见
    eclipse与SVN 结合(删除SVN中已经上传的问题)
    配置Jenkins的slave节点的详细步骤适合windows等其他平台
  • 原文地址:https://www.cnblogs.com/daxnet/p/5426806.html
Copyright © 2011-2022 走看看