快速教程|如何在 AWS EC2上使用 Walrus 部署 GitLab

news2024/11/24 9:07:08

Walrus 是一款基于平台工程理念的开源应用管理平台,致力于解决应用交付领域的深切痛点。借助 Walrus 将云原生的能力和最佳实践扩展到非容器化环境,并支持任意应用形态统一编排部署,降低使用基础设施的复杂度,为研发和运维团队提供易用、一致的应用管理和部署体验,进而构建无缝协作的软件交付流程。
 

在本篇文章中,我们将手把手带您创建 AWS GitLab 模板,并使用 Walrus 在 AWS EC2 实例上部署一个 GitLab 服务器。
 

使用前提

  1. 用于存储模板的 GitHub 或 Gitlab 仓库。

  2. 安装 Walrus(https://seal-io.github.io/docs/zh/deploy/standalone)。
     

在 GitHub 上新建仓库

  1. 在 GitHub 上新建一个仓库,这里我们使用的是 demo 版本库。

  2. 将版本库克隆到本地。

 

git clone git@gitlab.com:seal-eyod/gitlab-on-aws.git

 

创建模板文件

打开克隆的版本库目录。

cd gitlab-on-aws

 

在该目录下创建文件,如下所示:

 - gitlab-on-aws
    - main.tf
    - outputs.tf
    - variables.tf
    - README.md

 

main.tf文件定义了要创建的资源。在这里,我们为模板定义了创建 AWS EC2 实例并在其上运行 Gitlab 服务器的资源。

 data "aws_ami" "ubuntu" {
    most_recent = true
  
    filter {
      name   = "name"
      values = ["ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*"]
    }
  
    filter {
      name   = "virtualization-type"
      values = ["hvm"]
    }
  
    owners = ["099720109477"] # Canonical
  }
  
  
  data "aws_security_group" "selected" {
    name = var.security_group_name
  }
  
  data "aws_subnets" "selected" {
    filter {
      name   = "vpc-id"
      values = [data.aws_security_group.selected.vpc_id]
    }
  }
  
  resource "aws_instance" "gitlab" {
    ami           = data.aws_ami.ubuntu.id
    instance_type = var.instance_type
    subnet_id     = data.aws_subnets.selected.ids.0
    vpc_security_group_ids = [data.aws_security_group.selected.id]
    key_name      = var.key_name
    user_data     = <<-EOF
                    #!/bin/bash
                    set -ex;
                    public_ip=$(curl http://169.254.169.254/latest/meta-data/public-ipv4)
                    curl -fsSL https://get.docker.com | bash && sudo usermod -aG docker ubuntu
                    docker run -d --privileged --restart=always -p 80:80 -p 443:443 \
                    -e GITLAB_ROOT_PASSWORD="${var.gitlab_root_password}" \
                    "${var.gitlab_image}"
                    EOF
    tags = {
      "Name" = "${var.gitlab_metadata_application_instance_name}-gitlab"
    }
  
    root_block_device {
      volume_size = var.disk_size
    }
  }
  
  resource "null_resource" "gitlab_health_check" {
    depends_on = [
      aws_instance.gitlab,
    ]
  
    triggers = {
      always_run = timestamp()
    }
  
    provisioner "local-exec" {
      command     = "for i in `seq 1 100`; do curl -k -s $ENDPOINT >/dev/null && exit 0 || true; sleep 5; done; echo TIMEOUT && exit 1"
      interpreter = ["/bin/sh", "-c"]
      environment = {
        ENDPOINT = "http://${aws_instance.gitlab.public_ip}"
      }
    }
  }

 

variables.tf文件定义了模板中使用的变量。Walrus 将使用这些变量生成供用户填写的表单。
 

Walrus 使用@label@group来定义变量的标签和组。可选的 @options用于定义变量的下拉选项,如果未定义 @options ,变量将在表单中显示为文本框。
 

在本示例中,我们定义了两个组: Basic组和 AWS 组。使用此模板创建服务时,表单中将显示为两个选项卡。
 

# @group "Basic"
variable "gitlab_image" {
  type        = string
  description = "gitlab image"
  default     = "gitlab/gitlab-ce"
}

# @group "Basic"
variable "gitlab_root_password" {
  type        = string
  description = "gitlab root password"
  default     = "seal123456"
  sensitive   = true
}

# @group "AWS"
# @options ["t3.medium", "c5.xlarge"]
variable "instance_type" {
  type        = string
  description = "Instance type"
  default     = "t3.medium"
}

# @group "AWS"
variable "disk_size" {
  type        = number
  description = "Root disk size in GiB"
  default     = 50
}

# @group "AWS"
variable "key_name" {
  type        = string
  description = "AWS key name"
  default     = "xueying"
}

# @group "AWS"
variable "security_group_name" {
  type        = string
  description = "Security group Name"
  default     = "all-open"
}

# @hidden
variable "gitlab_metadata_application_instance_name" {
  type        = string
  description = "gitlab metadata application instance name."
  default     = "bar"
}

 

outputs.tf文件定义了服务创建后将显示给用户的模板输出。服务模板的输出也可以被其他服务引用。在本例中,我们定义了输出 gitlab_url,它是 Gitlab 实例的 URL。

output "gitlab_url" {
    description = "The URL of the GitLab instance"
    value = "http://${aws_instance.gitlab.public_ip}"
  }

 

README.md文件是对模板的描述。在使用该模板创建服务时,它将显示给用户。
 

在此,我们可以使用 terraform-docs 工具生成模板说明。你需要根据项目文档在笔记本电脑上安装该工具,然后运行以下命令为模板生成 README.md 文件。

 terraform-docs markdown . > README.md

 

生成的 README.md 文件内容如下:

# Gitlab on AWS

This is a terraform module that will create a Gitlab instance on AWS.

## Providers

| Name | Version |
|------|---------|
| aws  | n/a     |

## Inputs

| Name                                      | Description                                |   Type   |       Default        | Required |
|-------------------------------------------|--------------------------------------------|:--------:|:--------------------:|:--------:|
| gitlab_image                              | Gitlab image                               | `string` | `"gitlab/gitlab-ce"` |    no    |
| gitlab_root_password                      | Gitlab root password                       | `string` |    `"seal123456"`    |    no    |
| instance\_type                            | Instance type                              | `string` |    `"t3.medium"`     |    no    |
| disk\_size                                | Root disk size in GiB                      | `number` |         `50`         |    no    |
| security\_group\_name                     | Security group Name                        | `string` |     `"all-open"`     |    no    |
| gitlab_metadata_application_instance_name | gitlab metadata application instance name. | `string` |       `"bar"`        |    no    |

## Outputs

| Name       | Description |
|------------|-------------|
| gitlab_url | Gitlab URL  |

 

提交和标记版本

git add .
  git commit -m "add template files"
  git push -u origin main

 

为模板版本创建一个标签。

git tag v0.0.1
  git push --tags

 

在 Walrus 上创建一个模板

  1. 在浏览器中打开 Walrus 并登录。

  2. 选择 Operations Hub 中的 Template ,然后选择我们最近创建的模板来制作一个新模板。这里我们将此模板命名为 gitlab-on-aws
     


 

Walrus 同步模板后,可以在 Operations Hub 中看到此模板。

 

导入任务完成后,可以发现模板显示在列表中。需要注意的是该模板有两个版本:v0.0.1v0.0.2


 

在 AWS 上部署 Gitlab 服务器

Operations HubConnectors 中添加 AWS。


 

在环境中添加 connector。

 

利用 gitlab-on-aws 模板创建服务。UI 表单中的分组和标签是根据我们之前定义的模板变量中对应的注释动态生成的。输入变量在模板的 variables.tf 文件中列出。为确保网络流量管理,EC2 实例需要一个安全组。我们可以创建一个名为all-open的安全组来允许所有网络流量,为了增强安全性,可以根据需要自定义规则。
 


 

在 AWS 目标区域创建安全组后,就可以保存和应用服务了。


 

部署完成后,Gitlab 实例就能在 AWS 上成功配置了。

 

GitLab URL 将显示在输出结果中。获得 URL 后,就可以访问 GitLab 服务器了。

 

总 结

以上就是在 Walrus 中创建模板的全步骤,我们借助 Walrus 大大简化了部署流程。此外,Walrus 还兼容 Terraform 社区的大量成熟模板,只需轻轻一点,即可轻松采用最佳实践。
 

欢迎小伙伴们试用 Walrus,如果您喜欢我们的项目,可以在 GitHub 上为我们点亮星星🌟
 

项目地址:https://github.com/seal-io/walrus
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1184154.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汽车生产RFID智能制造设计解决方案与思路

汽车行业需求 汽车行业正面临着快速变革&#xff0c;传统的汽车制造方式正在向柔性化、数字化、自动化和数据化的智能制造体系转变&#xff0c;在这个变革的背景下&#xff0c;汽车制造企业面临着物流、生产、配送和资产管理等方面的挑战&#xff0c;为了应对这些挑战&#xf…

为什么亚马逊的轻量应用服务器这么受欢迎 | 个人体验 | 优势所在

文章目录 &#x1f33a;前言⭐什么是轻量应用服务器&#x1f6f8;特点 &#x1f384;亚马逊轻量应用服务器体验如何&#x1f339;亚马逊轻量应用服务器的优势 &#x1f33a;前言 作为一为开发者&#xff0c;我们要开发部署一个自己的网站&#xff0c;要选择一个性能好的服务器…

Mercury性能测试模板

xxxxxxxxxx 性能测试报告 2023年11月8日 目 录 1 前言 1 1第一章XXXXXXXX核心业务系统性能测试概述 1 1.1 被测系统定义 1 1.1.1 功能简介 1 1.1.2 性能测试指标 2 1.2 系统结构及流程 2 1.2.1 系统总体结构 2 1.2.2 功能模块描述 3 1.2.3 业务…

简单免费工具帮你恢复Windows中已删除的文件!

​如果你在Windows上丢失了文件&#xff0c;有许多工具可以找到并恢复它们&#xff0c;但WinFR界面版既免费又好用&#xff0c;借助该软件你可以轻松恢复丢失的文件。 Microsoft提供了一款免费的工具&#xff0c;可以帮你找到并恢复因意外删除或磁盘或软件问题导致丢…

Nginx实现tcp代理并实现TLS加密

Nginx源码编译 关于nginx的搭建配置具体参考笔者之前的一篇文章&#xff1a;实时流媒体服务器搭建试验&#xff08;nginxrtmp&#xff09;_如何在线测试流媒体rtmp搭建成功了吗-CSDN博客中的前半部分&#xff1b;唯一变化的是编译参数&#xff08;添加stream模块并添加其对应ss…

竞赛选题 深度学习手势识别 - yolo python opencv cnn 机器视觉

文章目录 0 前言1 课题背景2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存 5 模型训练5.1 修…

java中拼接“

params " " paramName "\"" paramValue "\"";

为什么说数据安全运维难?有好用的数据安全运维平台吗?

随着息技术的快速发展&#xff0c;不少企业在实行数字化转型&#xff0c;同时也面临着越来越多的数据安全运维挑战。不少企业都觉得数据安全运维难&#xff0c;都在找好用的数据安全运维平台。今天我们就来聊聊为什么说数据安全运维难&#xff1f;以及是否有好用的数据安全运维…

指纹浏览器有什么用?盘点指纹浏览器八大应用场景

在网络世界中&#xff0c;浏览器指纹一词早已耳熟能详。比如你用的浏览器类型、设备信息&#xff0c;甚至是你的操作习惯等等这些浏览器指纹信息可以让网站轻松识别出你的身份&#xff0c;把你的信息发送给第三方的广告商&#xff0c;然后匹配你的情况进行广告营销。 即使在清除…

广州小程序开发公司怎么找?

在当今的数字化时代&#xff0c;小程序已经成为了企业拓展业务、提升品牌影响力的重要工具。广州作为国内经济中心之一&#xff0c;拥有众多的企业和商家&#xff0c;因此对于小程序开发的需求也日益增长。那么&#xff0c;如何在广州找到一家专业、可靠的小程序开发公司呢&…

六种最常见的软件供应链攻击

软件供应链攻击已成为当前网络安全领域的热点话题&#xff0c;其攻击方式的多样性和复杂性使得防御变得极为困难。以下我们整理了六种常见软件供应链攻击方法及其典型案例&#xff1a; 软件供应链攻击已成为当前网络安全领域的热点话题&#xff0c;其攻击方式的多样性和复杂性…

TSN协议解读系列 | (3) Qci:说书唱戏劝人方

你是谁&#xff1f;你从哪里来&#xff1f;你到哪里去&#xff1f;这是柳国旅问的最多的三个问题。他总在想&#xff0c;上辈子的自己一定是一个哲学家&#xff0c;不然也不会和这三个问题的关系如此密切。他站的笔挺&#xff0c;耳边是蝉鸣&#xff0c;眼前是蓝天&#xff0c;…

定岗定编设计:企业职能部门定岗定编设计项目成功案例

一、客户背景及现状分析 某大型车辆公司隶属于某央企集团&#xff0c;建于20世纪60年代&#xff0c;是中国高速、重载、专用铁路车辆生产经营的优势企业&#xff0c;轨道车辆制动机研发制造的主导企业&#xff0c;是隶属于国内最大的轨道交通设备制造上市企业的骨干二级公司。公…

JVM虚拟机:垃圾回收器之ParNew(年轻代)

本文重点 在前面的课程中,我们学习了新生代的垃圾回收器PS,本文我们将学习新生代的另一个垃圾回收器ParNew。 工作状态 这个垃圾回收器使用多线程进行垃圾回收,在垃圾回收时,会STW(stop-the-world)暂停其它所有的工作线程直到它的收集结束,如下所示: 配置 -XX:+UserP…

南昌大学漏洞报送证书

获取来源&#xff1a;edusrc&#xff08;教育漏洞报告平台&#xff09; url&#xff1a;https://src.sjtu.edu.cn/ 兑换价格&#xff1a;20金币 获取条件&#xff1a;南昌大学任意中危或以上级别漏洞

Matlab论文插图绘制模板第125期—特征渲染的三维气泡图

在之前的文章中&#xff0c;分享了很多Matlab三维气泡图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一下特征渲染的三维气泡图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载。有需要的…

编程系统化教程目录,中文编程工具下载

图下图是编程工具界面&#xff0c;其构件板构件非常丰富。想学编程&#xff0c;可以点击最下方卡片—— 软件下载——免费自由版软件下载及教程&#xff0c;了解详细资讯。 编程系统化教程视频课程总目录 链接&#xff0c;点击下方链接进入 https://jywxz.blog.csdn.net/art…

Linux的常见指令(三)

目录 一、管道 | 二、find 三、which 四、grep 五、zip/unzip 六、alias 七、输出重定向与输入重定向 1、echo 2、输出重定向 3、输入重定向 八、tar 九、bc 十、uname -r 十一、热键 一、管道 | 我们首先创建一个下面这样的文件 前面我们知道了使用head和tail分…

springboot调用第三方接口json转换成对象

请求接口是一个比较常见的需求&#xff0c;接口返回一般是一个json类型&#xff0c;需要进行组装成对应的类&#xff0c;例 {"status_code": 200,"message": "success","data": {"cost": 286.6933,"bom_list": […

C++结构体内存对齐

文章目录 介绍对齐数顺序问题结构体有效对齐数计算数组对齐 介绍 结构体的大小并不是简单地将每个结构体成员的大小相加就能得到。 cpu一次能读取多少内存要看数据总线是多少位&#xff0c;如果是16位&#xff0c;则一次只能读取2个字节&#xff0c;如果是32位&#xff0c;则…