Dockerize ASP。净样板项目
- Get the source code from the Github repository.
介绍 在这篇文章中,我将一步步地向你展示如何在Docker上运行ABP模块零核心模板。然后,我们将讨论其他的场景,如使用网络场的redisdisand Haproxy。 正如你现在看到的,Docker 是最流行的软件容器平台。我不会详细介绍如何在windows上安装/配置Docker,或者使用Docker有什么好处。你可以在这里找到相关的文件。还有一个正在启动的文档。 什么是ABP模块零核心模板? Module zero core模板是一个初学者项目模板,使用ASP开发。净样板框架。这是一个。net核心项目,是一个单页应用程序,使用角度。还有一个多页面的MVC应用程序。但在这篇文章中,我将解释角度版本。 在module zero core template项目中有两个独立的项目,一个是作为web UI的angular4project,另一个是由angular UI使用的host project。在Docker上运行它之前,让我们先检查一下,以便更好地理解这个项目。 开始 从站点创建模板 首先,我将从https://www.aspnetboilerplate.com/Templates 站点下载模块零核心模板。 框架:。net core2.0 +单页Web应用程序角度+包含模块0 项目名称:Acme.ProjectName 在准备在Docker上运行项目之前,让我们先运行项目。我正在打开文件夹ProjectName\aspnet-core. 使用EF迁移创建数据库 在运行项目之前,我们应该在包管理器控制台使用EF migrations创建数据库。首先,我将acme . projectname . web . host设置为启动项目。(右键单击主机项目并选择设置为启动项目)。然后,打开包管理器控制台,选择default project to EntityFrameworkCore,运行下面的命令 - database就 运行此命令后,将创建名为ProjectNameDb的数据库。 主机运行项目 现在,主机项目已经准备好运行了。按visual studio Ctrl+F5。它打开swagger方法的索引页。 所有这些服务都在项目的应用层提供,并由Angular UI. 角运行项目 当主机已经运行时,我们可以运行使用api的角度项目。要运行Angular项目,确保你的机器上已经安装了node和npm。 首先,运行cmd 位置ProjectName\角度和运行命令通过“npm install”或“yarn”来获取客户端包。 在同一个目录下运行npm start 命令来启动angular项目。 最后,您必须在输出屏幕中看到一行“webpack:已成功编译”。 我们started Angular 项目成功。打开浏览器并导航到http://localhost:4200/ 使用下面的凭据登录 管理员密码123qwe 登录后,您将看到下面的屏幕。 Check HERE 为更多的细节。 总结一下我们为跑动角度项目所做的工作: 在locationprojectname \angular上运行cmd。运行yarn or npm install 命令(在上面的示例中,我使用了yarn)。Run npm start 命令。浏览localhost: 4200查看angular项目是否在运行。 一切运行正常。准备在docker上运行… 在Docker上运行项目 如果你还没有安装Angular CLI,你必须安装它。运行下面的命令来安装Angular CLI。 npm安装- g @angular / cli 确保安装了Angular CLI之后,让我们看看要配置docker环境的文件和文件夹。在ProjectName/aspnet-core下有一个名为docker的文件夹。 在docker/ng 文件夹中有一个docker- composition .yml 文件和两个powershell脚本运行docker compose(up.ps1)和停止(down.ps1)它。还有一个文件夹和一个powershell脚本文件。 此脚本文件用于构建和发布主机和agular项目。并且,这个脚本将文件复制到docker文件夹中以构建文件夹。首先,我将运行使用ng构建。ps1脚本定位ProjectName/aspnet-core/build。 运行脚本之后,当您查看构建文件夹时,您将看到输出文件夹。 之前running up.ps1 命令, 你必须共享驱动器。要共享它,右键单击Docker系统托盘,进入设置,导航到共享文件夹,然后单击所有驱动器。数据库托管在本地机器上,而不是docker上。网站托管在docker将连接到您的本地数据库。如果使用可信连接字符串,则连接将失败。所以设置你的sql数据库用户名&密码又是;为了求得th是修改文件"…\aspnet-core\src\Acme.ProjectName.Web.Host\appsettings.Staging.json". Update Default connectionstring >“服务器= 10.0.75.1;数据库= ProjectNameDb;用户= sa);密码= & lt;编写password>;“ 运行up.ps1脚本在docker的locationprojectname /aspnet-core/build/outputs下运行这两个项目。 Angular和host项目现在都在运行。用于Host project的浏览器是http://localhost:9901/ 用于Angular UI的浏览器是http://localhost:9902/ 模块零核心Tepmlate网站农场Docker与使用Redis和Haproxy 在一个web场中有多个web服务器,在这些服务器的前端有一个负载均衡器,还有一个服务器用于存储共享会话/缓存。 在我们的例子中,angular应用将是客户端,haproxy将是负载均衡器,host应用将是web服务器,而redis将是共享服务器。 为haproxy创建一个配置文件,命名为haproxy.cfg 定位ProjectName\aspnet-core\docker\ng haproxy.cfg (复制粘贴代码行导致编码问题,下载文件=> 下载haproxy.cfg) 隐藏,复制Code
global
maxconn 4096
defaults
mode http
timeout connect 5s
timeout client 50s
timeout server 50s
listen http-in
bind *:8080
server web-1 outputs_abp_host_1:80
server web-2 outputs_abp_host_2:80
stats enable
stats uri /haproxy
stats refresh 1s
重要的线路haproxy.cfg是server web-1和server web-2。我介绍了主机应用程序。这将在docker容器上创建两个主机应用程序。 Modified docker-compose.yml (复制粘贴代码行使编码问题,下载文件=> 下载docker- composition .yml) 隐藏,收缩,复制Code
version: '2' services: abp_redis:
image: redis
ports:
- "6379:6379" abp_host:
image: abp/host
environment:
- ASPNETCORE_ENVIRONMENT=Staging
volumes:
- "./Host-Logs:/app/App_Data/Logs" abp_ng:
image: abp/ng
ports:
- "9902:80"
load_balancer:
image: haproxy:1.7.1
volumes:
- "./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg"
ports:
- "9904:8080"
build-with-ng.ps1 替换下面一行
(Get-Content $ngConfigPath) -replace "21021", "9901" | Set-Content $ngConfigPath
与这条线 隐藏,复制Code
(Get-Content $ngConfigPath) -replace "21021", "9904" | Set-Content $ngConfigPath
现在Angular UI将连接到haproxy。Haproxy将请求分发到web服务器。 用下面的内容覆盖 隐藏,复制Code
docker rm $(docker ps -aq)
docker-compose up -d abp_redis
sleep 3
docker-compose up -d abp_host
docker-compose up -d abp_ng
sleep 2
docker-compose scale abp_host=2
sleep 2
docker-compose up -d load_balancer
要使用redis缓存install&bb . rediscache 库到projectname . web . core项目。和update ProjectNameWebCoreModule.cs 如: 隐藏,复制Code
[DependsOn(...,
typeof(AbpRedisCacheModule))]
public class ProjectNameWebCoreModule : AbpModule
{
在预先初始化方法中增加redis缓存配置。 隐藏,复制Code
public override void PreInitialize()
{
... Configuration.Caching.UseRedis(options =>
{
var connectionString = _appConfiguration["Abp:RedisCache:ConnectionString"];
if (connectionString != null && connectionString != "localhost")
{
options.ConnectionString = AsyncHelper.RunSync(() => Dns.GetHostAddressesAsync(connectionString))[0].ToString();
}
})
...
添加复述,configurations appsettings.staging.json。 appsettings.staging.json 隐藏,复制Code
{
...,
"Abp": {
"RedisCache": {
"ConnectionString": "outputs_abp_redis_1"
}
}
}
outputs_abp_redis_1是redis容器的名称,这个名称是docker自动定义的。更改之后,主机项目将解析所部署的机器的dns。现在,当我运行build-with-ng.ps1和up.ps1时,web farm项目将运行。,结果: 可以看到,所有容器都在工作。当你浏览http://localhost:9902 你可以看到Angular UI正在工作。 我怎么知道Haproxy和redisis是否有效呢? 有工具跟踪haproxy活动(haproxy web接口)和获取redis存储数据(redis cli)。 Haproxy web界面 当您浏览http://localhost:9904/haproxy 时,您将看到如下内容。 当你在angular应用程序页面之间导航或者在host项目上运行任何api (http://localhost:9904)时,你会发现haproxy正在将请求路由到不同的机器上。您可以通过正在为web-1和web-2更改的会话速率选项卡跟踪哪台机器正在运行。 复述,cli 要了解redis是否在工作,您可以使用redi -cli。运行docker exec - outputs_abp_redis_1 redis- cli&command 运行redis-cli 交互模式连接redis服务器是运行在docker容器。然后测试是否redis运行,写ping 命令,它将返回PONG 如果它工作。现在,当我写入keys * 命令时,我应该获得应用程序缓存键。 正如你所看到的,redis运行得很好。缓存键存储在redis,正确。 源代码 您可以在这里获得修改后的源代码:https://github.com/aspnetboilerplate/aspnetboilerplate-samples/tree/master/ModuleZeroCoreWebFarm , 本文转载于:http://www.diyabc.com/frontweb/news19840.html
最新文章
- 黑马程序员——【Java高新技术】——类加载器
- redis linux安装与简单集群配置
- ITK 4.8.1 Qt 5.4 MinGW 4.9.1 Configuration 配置
- 如何让Advanced Installer卸载软件时保留一些文件
- Light oj 1234 - Harmonic Number
- javascript实现暂停
- Jquery 判断滚动条到达顶部或底部
- SQL基础笔记
- 爬虫协议robots
- mpvue——动态渲染echarts图表
- 提升算法——Adaboost
- 构建之法 chapter1 心得
- poj3617 Best Cow Line(贪心,字典序问题)
- Java工程师学习指南 完结篇
- day23面向对象编程基础
- 移动端实现上拉加载更多(使用dropload.js vs js)
- 第二阶段每日站立会议Fifth Day
- plsql链接数据库配置
- 剑指Offer——数组中的逆序对
- Linux目录结构与文件权限——(五)
热门文章
- 手机预览本地html
- Activiti7 流程变量(UEL-Value方式)
- DSRC和USRP的购买调研
- 按照BNF语法重新写就的JsonAnalyzer2
- Tomcat cluster方案共享session配置成功,yeah....
- Mybatis-使用注解开发
- 微信小程序爬坑记
- git 快速入门及常用命令
- 【二叉树-所有路经系列(根->;叶子)】二叉树的所有路径、路径总和 II、路径总和、求根到叶子节点数字之和(DFS)
- [LeetCode]547. 朋友圈(DFS)