【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项目的服务端相关推荐
- linux14.04设置DNS,Ubuntu 14.04.4 LTS设置DNS
Ubuntu 14.04.4 LTS中DNS信息是由/etc/resolv.conf提供的,它是每次开机时,由/sbin/resolvconf生成的 /etc/resolv.conf是/run/res ...
- Ubuntu 14.04.3 LTS 配置 DNS Server
我们目的是用一台局域网机器完成 192.168.1.113 <-->cloudshield.com的解析,指定A记录和CNAME; 0.关于Ubuntu 14.04.2 LTS 下载.安装 ...
- 戴尔PowerEdge R730 机架式服务器安装 Ubuntu 14.04.3 LTS
为服务器安装 Linux 硬件 戴尔PowerEdge R730 机架式 CPU: Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz × 16 MEM: 16GB ...
- 在Ubuntu 14.04.5 LTS上安装python模块selenium 3实录
简介 Selenium是python模块库中一组web自动化测试工具集,提供多种语言的API,例如java,python,ruby,.net等,支持Firefox,Chrome,IE,Safari 等 ...
- 在Ubuntu 16.04.3 LTS上运行go+https+json示例
下面是我依据网上资料的实操过程,记录以作备忘.该示例给出了https通信并处理json文件的例子. 平台:Ubuntu 16.04.3 LTS go版本:1.10 1.生成自签名的服务器端的私钥KEY ...
- linux下修复windows7启动项,Ubuntu 14.04.02 LTS 启动项误写入 /dev/sda1 (win 7 loader) 修复...
问题描述: 在Win7下安装Ubuntu 14.04,由于启动项 /boot loader 安装位置错误(/dev/sda1 (win 7 loader) )导致无法进入Windows(在GRUB界面 ...
- Anaconda安装(ubuntu 14.04.03 LTS 64bit)
Anaconda:用于科学计算的Python发行版本 1.下载网站: https://www.anaconda.com/download/#linux 选择64-Bit(x86) Installer ...
- 在Ubuntu 16.04.3 LTS上运行go install出错的问题
1.我在.go文件的当前目录下面运行go install出现下面的错误: go install hello.go go install: no install location for .go fil ...
- python程序发布 ubuntu_在ubuntu16.04的虚拟环境中运行Python程序作为服务
我正在尝试让一个Flask+SocketIO应用程序作为一个服务在ubuntu16.04上运行,在一个虚拟环境中.我的服务器每天凌晨3点重新启动(超出我的控制范围),所以我需要它在启动时自动启动.在 ...
最新文章
- 54 Node.js快速入门
- 数据流重定向和管道命令, grep, tr,sort, wc, cut,split,tee,sleep(shell 02)
- SCTF 2015 pwn试题分析
- Android --- RecycleView 中默认选择第一个 item,点击第 2 个 item 时改变其字体样式,其余的 item 的字体样式恢复默认
- 送给产品经理的一段代码 (!(~+[]) + {})[--[~+][+[]] * [~+[]] + ~~!+[]] + ({} + [])[[~!+[]] ...
- 史上最全的面试宝典,让你轻松入职
- 冰点还原离线激活_冰点还原密钥,详细教您如何激活冰点还原
- 一组NOKIA数据线电路图及制作图例
- Oracle ERP 模块
- 【TensorFlow】【数字货币】【单词记忆】【微信运营】【DIY电脑】 | Chat · 预告
- java 私有云_[原创]私有云中实现以应用程序为中心的PaaS
- 返款接口教程,转账到支付宝账户开通方法
- MacM1 AndroidStudio 自带模拟器安装不上apk
- 第六章 图论 AcWing 1635. 最大集团
- 开源IoT操作系统Mynewt使用简介
- linux开启514端口,查看linux服务器所开放的端口
- Laradock启用RabbitMQ
- 计算机时间戳转换时间在线,时间戳,Unix时间戳,时间戳转换
- 过来人谈《去360还是留在百度?》
- 前后端分离 ajax请求后台重定向