用CI/CD工具Vela部署Elasticsearch + C# 如何使用
Vela 除了可以帮我们编译、部署程序,利用它的docker部署功能,也能用来部署其他线上的docker镜像,例如部署RabbitMQ、PostgreSql、Elasticsearch等等,便于集中管理。

部署 Elasticsearch
创建文件夹并赋予权限:
mkdir /usr/local/es/data
mkdir /usr/local/es/plugins
chmod 777 /usr/local/es/data
chmod 777 /usr/local/es/plugins
在 Vela 中新增部署程序,并指定使用docker容器运行。
- 设置其端口映射
9200:9200,9300:9300
- 文件夹映射
/usr/local/es/data:/usr/share/elasticsearch/data,/usr/local/es/plugins:/usr/share/elasticsearch/plugins
- 环境变量
discovery.type=single-node,ES_JAVA_OPTS=-Xms512m -Xmx512m
- dockerfile内容
FROM elasticsearch:8.6.0 AS base

保存这些基本信息,直接发布程序就可以了。
以非root用户运行docker容器
我们知道,docker默认是以root用户运行容器的,如果你希望以其他用户运行,并且容器里的程序也支持普通用户,可以在dockerfile中加入下面语句,可以让容器以Vela运行时的用户去运行。
RUN useradd -u %uid% -m job || true
USER %uid%
注意:此功能需要升级到最新的Vela才能支持,如何升级请参考官方文档:
http://jms.jacktan.cn?doc/43/3
关闭 密码安全验证
到config目录下,打开 elasticsearch.yml ,把 xpack.security.enabled 改为 false
安装IK分词器
进入docker容器 : docker exec -it es /bin/bash
输入命令:
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.6.0/elasticsearch-analysis-ik-8.6.0.zip
然后重启容器生效。
C# 如何使用
引入nuget包:Elastic.Clients.Elasticsearch
连接
var settings = new ElasticsearchClientSettings(new Uri("http://localhost:9200"));
ElasticsearchClient client = new ElasticsearchClient(settings);
插入数据
for (int i = 0; i < 100; i++)
{
client.Index<Document>(new Document
{
Id = 2 + i,
Name = "test" + (2 + i),
Content = "不断测试我的" + i + "多个文章内容",
Time = DateTime.Now.AddMinutes(i + 1)
}, "document");
}
更新数据
doc.Content += " 附加的。";
var response_update = await client.UpdateAsync<Document, Document>("document", 1, u => u.Doc(doc));
删除数据
var response = await client.DeleteAsync("document", 1);
获取数据
var response = await client.GetAsync<Document>(id, idx => idx.Index("document"));
if (response.IsValidResponse)
{
var doc = response.Source;
}
搜索数据(相等判断)
var response_search = await client.SearchAsync<Document>(s => s
.Index("document")
.From(0)
.Size(10)
.Query(q => q
.Term(t => t.Name, "test2")
)
);
搜索数据(全文检索)
var searchResponse = client.Search<Document>(s => s
.Index("document")
.From(0)
.Size(10)
.Query(q => q
.Match(m => m
.Field(f => f.Content) // 替换为你的实际字段名
.Query("测试内容")
)
)
.Sort(sort => sort
.Field(f => f.Time, d => d.Order(SortOrder.Desc)) // 按时间降序排序
)
);
or 条件语句
var response_search = await client.SearchAsync<Document>(s => s
.Index("document")
.From(0)
.Size(10)
.Query(q => q
.Bool(b=>b
.Should(
s => s.Term(t => t.Name, "test2"),
s => s.Term(t => t.Name, "test3")
)
)
)
);
自定义字段检索类型
var createIndexResponse = client.Indices.Create("document", c => c
.Mappings(ms => ms
.Properties<Document>(props => props
.Text(t => t.Content) // 设置为文本类型,进行全文检索
.Keyword(k => k.Name)// 设置为关键字类型,不进行全文检索
.DateRange(n => n.Time)
)
)
);
用CI/CD工具Vela部署Elasticsearch + C# 如何使用的更多相关文章
- 从零入门 Serverless | 企业级 CI/CD 工具部署 Serverless 应用的落地实践
背景知识 通过以往几节课程的学习,相信大家对于 SAE 平台已经有了一定的了解.SAE 为客户免除了很多复杂的运维工作,开箱即用.按用量付费:与此同时 SAE 提供了丰富的 Open API,可以很容 ...
- 7款不错的 CI/CD工具
时至今日,越来越多的工程团队开始实行敏捷开发,借以推动更短.更快的发布周期.而代码库的增长与更高的生产构建频率,也带动持续集成与持续部署/交付工具快速兴起.如果您有意提升发布频率,或者是不太清楚哪些工 ...
- 8款不错的 CI/CD工具
Jenkins Jenkins是CI市场中最知名且最常见的名号之一.其最初是由Sun公司的一位工程师打造的一个辅助项目,并迅速扩展为最大的开源CI工具之一,可帮助工程团队实现自动化部署.顺带一提:我们 ...
- 持续集成指南:GitLab 的 CI/CD 工具配置与使用
前言 写代码这项工作,本质就是将工作自动化,减少手工操作提供效率,因为人的本质都是懒狗,程序员也不能例外,为了各种意义的效率提升(懒),我们需要持续集成工具,将代码测试.编译.发布这些重复性很高的工作 ...
- 通读《构建之法》与CI/CD工具尝试
项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 作业要求 我在这个课程的目标是 积累软件开发经验,提高工程能力 这个作业在哪个具体方面帮助我实现目标 通读课 ...
- 使用CI/CD工具Github Action发布jar到Maven中央仓库
之前发布开源项目Payment Spring Boot到Maven中央仓库我都是手动执行mvn deploy,在CI/CD大行其道的今天使用这种方式有点"原始".于是我一直在寻求一 ...
- Jenkins 配置CI/CD任务
本文演示如何通过Jenkins创建CI/CD任务,部署一整套微服务体系结构,并运行在之前搭建的mini云平台上. 如果是初始尝试实践,可能需要参考 快速搭建云原生架构的实践环境 和 Jhipster技 ...
- 近期关于CI/CD策略以及git分支模型的思考
近两个月由于个人处于新环境.新项目的适应阶段,没怎么提笔写些文章.中间有好几个想法想记录下来分享,但受限于没有很好的时间段供自己总结思考(也可以总结为间歇性懒癌和剧癌发作),便啥也没有更新.借这个周末 ...
- GitLab CI/CD的官译【原】
CI / CD方法简介 软件开发的持续集成基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性.从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预. 它涉及在每次小迭代中不断 ...
- DevOps - CI&CD
1 - CI与CD的联系与区别 持续集成(Continuous Integration).持续交付(Continuous Delivery)和持续部署(Continuous Deployment)的过 ...
随机推荐
- 【推荐】Helix 常用命令与设置
目录 Helix常用命令 配置 编辑器 [editor]字段 [editor.statusline] 字段 [editor.lsp] 字段 [editor.cursor-shape] 字段 [edit ...
- CSS3学习笔记-文字特效
CSS3中提供了许多有趣和实用的文字特效,可以让我们的文本内容更加生动有趣,下面介绍一些常用的文字特效. 文本阴影 使用text-shadow属性可以为文本添加阴影效果,语法如下: text-shad ...
- Unicode编码:打破语言壁垒,实现无缝交流
Unicode编码是一种用于表示文本字符的编码系统,它旨在解决不同字符集之间相互兼容的问题,使各种语言和文化得以在数字世界中无缝交流.本文将从多个方面介绍Unicode编码的概念.原理及其在现实中的应 ...
- Head First 的学习之道
<Head First 设计模式>是一本好书,正如书的封面上说的那样,这是一本重视大脑的学习指南.里面提到了一些学习方法,可以尝试下,看看哪些对你有用: 1. 慢一点,理解的越多,需要记得 ...
- gmap构建离线地图,用createCustomerTiledLayer方法,瓦片地址尾部多了 ?x={x}&y={y}&z&{z} 导致无法显示地图。
gmap构建离线地图,用createCustomerTiledLayer方法,瓦片地址尾部多了 ?x={x}&y={y}&z&{z} 导致无法显示地图. function in ...
- 限制左键拖拽图片阴影vue
<template> <div> <img ref="image" :src="imageUrl" :style="im ...
- Asp .Net Core系列:AutoMapper自动映射框架介绍、使用
1.介绍 AutoMapper是一个对象-对象映射器.对象-对象映射通过将一种类型的输入对象转换为另一种类型的输出对象来工作.使AutoMapper变得有趣的是,它提供了一些有趣的约定,以免去搞清楚如 ...
- react+antd选择框输入
react+antd选择框输入 const onSearch=(fn,value)=>{ if(value){//这个if无比重要 form.setFieldsValue({"Owne ...
- Go 1.18 新特性:多模块工作区模式
摘要:在 Go 1.18 推出多模块工作区模式--Multi-Module Workspaces,用以支持模块的多个工作空间,我们来看看到底有什么特别. 本文分享自华为云社区<一起看看 Go 1 ...
- css过去及未来展望—分析css演进及排版布局的考量
读初二的时候,学校有了计算机,也简单地介绍了下网页,不过那是的html 都是table,也没有去细看.到了高中,qq空间有个html模式,为了让文章好看点.也浅尝辄止地学了下css css简介 在HT ...