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# 如何使用的更多相关文章

  1. 从零入门 Serverless | 企业级 CI/CD 工具部署 Serverless 应用的落地实践

    背景知识 通过以往几节课程的学习,相信大家对于 SAE 平台已经有了一定的了解.SAE 为客户免除了很多复杂的运维工作,开箱即用.按用量付费:与此同时 SAE 提供了丰富的 Open API,可以很容 ...

  2. 7款不错的 CI/CD工具

    时至今日,越来越多的工程团队开始实行敏捷开发,借以推动更短.更快的发布周期.而代码库的增长与更高的生产构建频率,也带动持续集成与持续部署/交付工具快速兴起.如果您有意提升发布频率,或者是不太清楚哪些工 ...

  3. 8款不错的 CI/CD工具

    Jenkins Jenkins是CI市场中最知名且最常见的名号之一.其最初是由Sun公司的一位工程师打造的一个辅助项目,并迅速扩展为最大的开源CI工具之一,可帮助工程团队实现自动化部署.顺带一提:我们 ...

  4. 持续集成指南:GitLab 的 CI/CD 工具配置与使用

    前言 写代码这项工作,本质就是将工作自动化,减少手工操作提供效率,因为人的本质都是懒狗,程序员也不能例外,为了各种意义的效率提升(懒),我们需要持续集成工具,将代码测试.编译.发布这些重复性很高的工作 ...

  5. 通读《构建之法》与CI/CD工具尝试

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 作业要求 我在这个课程的目标是 积累软件开发经验,提高工程能力 这个作业在哪个具体方面帮助我实现目标 通读课 ...

  6. 使用CI/CD工具Github Action发布jar到Maven中央仓库

    之前发布开源项目Payment Spring Boot到Maven中央仓库我都是手动执行mvn deploy,在CI/CD大行其道的今天使用这种方式有点"原始".于是我一直在寻求一 ...

  7. Jenkins 配置CI/CD任务

    本文演示如何通过Jenkins创建CI/CD任务,部署一整套微服务体系结构,并运行在之前搭建的mini云平台上. 如果是初始尝试实践,可能需要参考 快速搭建云原生架构的实践环境 和 Jhipster技 ...

  8. 近期关于CI/CD策略以及git分支模型的思考

    近两个月由于个人处于新环境.新项目的适应阶段,没怎么提笔写些文章.中间有好几个想法想记录下来分享,但受限于没有很好的时间段供自己总结思考(也可以总结为间歇性懒癌和剧癌发作),便啥也没有更新.借这个周末 ...

  9. GitLab CI/CD的官译【原】

    CI / CD方法简介 软件开发的持续集成基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性.从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预. 它涉及在每次小迭代中不断 ...

  10. DevOps - CI&CD

    1 - CI与CD的联系与区别 持续集成(Continuous Integration).持续交付(Continuous Delivery)和持续部署(Continuous Deployment)的过 ...

随机推荐

  1. 【Redis】一文掌握Redis原理及常见问题

    Redis是基于内存数据库,操作效率高,提供丰富的数据结构(Redis底层对数据结构还做了优化),可用作数据库,缓存,消息中间件等.如今广泛用于互联网大厂,面试必考点之一,本文从数据结构,到集群,到常 ...

  2. redis + AOP + 自定义注解实现接口限流

    限流介绍 限流(rate limiting) ​ 是指在一定时间内,对某些资源的访问次数进行限制,以避免资源被滥用或过度消耗.限流可以防止服务器崩溃.保证用户体验.提高系统可用性. 限流的方法有很多种 ...

  3. 劫持 PE 文件:搜索空间缝隙并插入ShellCode

    因近期项目需要弄一款注入型的程序,但多次尝试后发现传统的API都会被安全软件拦截,比如 CreateRemoteThread.SetWindowHookEx.APC.GetThreadContext. ...

  4. uni-app+vue3+ts项目搭建完整流程

    项目代码同步更新至码云 uni-vue3-ts-template 开发前准备 利用 uni-app 开发,有两种方法: 通过 HBuilderX 创建(需安装 HBuilderX 编辑器) 通过命令行 ...

  5. GaussDB技术解读丨数据库迁移创新实践

    本文分享自华为云社区<DTCC 2023专家解读丨GaussDB技术解读系列之数据库迁移创新实践>,作者:GaussDB 数据库. 近日,以"数智赋能 共筑未来"为主题 ...

  6. DevSecOps“内置安全保护”,让软件研发“天生健康”

    摘要:我们主要是围绕安全架构设计保证安全落地有法可依,进行威胁建模让安全落地有迹可循.做好隐私和敏感数据保护让安全落地在每一个细节和实处这几个方面进行阐述. 本文分享自华为云社区<DevSecO ...

  7. 华山论“件”:Kafka、RabbitMQ、RocketMQ技能大比拼

    摘要:主流的消息中间件包含Kafka.RabbitMQ和RocketMQ,本期云图说为您介绍它们之前的差异. 本文分享自华为云社区<第234期 华山论"件"-Kafka.Ra ...

  8. Plus版SBOM:流水线物料清单PBOM

    相信大家对软件物料清单(SBOM)并不陌生,它是指用于构建软件解决方案的所有软件组件(开源或商业)的列表.但在软件物料清单中,并不包括用于部署软件的微服务和其他组件.为了更全面了解所用的组件,我们需要 ...

  9. 十大 CI/CD 安全风险(五)

    在本篇文章中,我们将了解第三方服务的监管不足,工件完整性验证及日志可见性不足这三个关键 CI/CD 安全风险,并给出缓解相应风险的建议与措施. 第三方服务监管不足 CI/CD 攻击面包括企业资产,例如 ...

  10. Gartner 权威解读: SBOM 采用率将于2025年达到60%

    随着现代软件开发越来越依赖于第三方资源,针对软件供应链的恶意攻击数量也随之激增.据业内权威机构 Gartner 预计,软件物料清单 (SBOM) 的采用率在 2025 年将会达到 60%. Gartn ...