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

快速教程|如何在 AWS EC2上使用 Walrus 部署 GitLab的更多相关文章

  1. 在aws ec2上使用root用户登录

    aws ec2默认是使用ec2-user账号登陆的,对很多文件夹是没有权限的.如何使用root账号执行命令就是一个问题了.解决办法如下: 1.根据官网提供的方法登录连接到EC2服务器(官网推荐wind ...

  2. 如何在Cent OS上安装和部署jdk与tomcat?

    Cent OS是一款Linux系统.在商业应用中,Linux操作系统在服务器市场有着广泛的运用,这源于Linux系统的几大优点: 1.跨平台的硬件支持 由于Linux 的内核大部分是用C 语言编写的, ...

  3. AWS EC2笔记

    朋友想搭一个境外网站,找我帮忙,希望服务器.域名都在境外.我没有在境外建站的经历,只能先尝试.于是上网搜索了一下境外服务器,大家比较常用的是Digital Ocean和AWS,我索性打开这两家的官网, ...

  4. AWS EC2中部署Apache服务器(LAMP)

    关键词: 1.新建aws ec2实例 2.使用putty连接到aws ec2 实例(SSH协议) 3.使用filezilla连接到aws ec2实例(SFTP协议) 4.在aws ec2上部署apac ...

  5. [AWS] EC2 & GPU

    Amazon Elastic Compute Cloud (Amazon EC2) EC 2的使用 机型的选择 经验谈 Ref: Amazon EC2 实例类型 实践派 搭建网站:MediaWiki ...

  6. AWS EC2 外网不能访问的坑

    概述 今天我在 AWS EC2 上配置并启动了 nginx,但是通过外网不能访问,查了一下资料终于解决了,记录下来供以后开发时参考,相信对其它人也有用. 外网访问不了的原因 外网访问不了的原因不外乎有 ...

  7. 使用root用户登录到AWS EC2服务器,上传文件到/var/www目录

    关键词 1.aws ec2中上传文件到/var/www目录(使用filezilla) 2.使用root用户登录aws ec2实例 上一篇随笔中记录了在aws ec2实例中部署apache服务器的过程, ...

  8. 如何在Digital Ocean上申请服务器的教程

    本文会详细叙述如何在digital ocean上注册.申请.创建以及配置服务器,亲测有效. what's the Digital Ocean ? 根据度娘释义,Digital Ocean是digita ...

  9. AWS EC2 搭建 Hadoop 和 Spark 集群

    前言 本篇演示如何使用 AWS EC2 云服务搭建集群.当然在只有一台计算机的情况下搭建完全分布式集群,还有另外几种方法:一种是本地搭建多台虚拟机,好处是免费易操控,坏处是虚拟机对宿主机配置要求较高, ...

  10. AWS EC2+Docker+JMeter构建分布式负载测试基础架构

    目录 概述及范围 前提条件 Part 1: Local setup-本地配置 Part 2: Cloud端基础架构--Infrastructure 总结: 原文链接 @ 概述及范围 本文介绍有关如何使 ...

随机推荐

  1. Oracle 11g手工建库

    搭建环境 1.建立相应的目录 mkdir /u01/app/oracle/oradata/test1 mkdir /u01/app/oracle/fast_recovery_area/test1 mk ...

  2. Datahub稳定版本0.10.4安装指南(独孤风版本)

    大家好,我是独孤风,大数据流动的作者. 曾几何时,我在第一次安装JDK环境的时候也遇到了不小的麻烦,当时还有朋友就因为这个环境问题觉得自己根本不是编程的料,选择了放弃.当时有个段子说,"如果 ...

  3. 清理MySQL的binlog日志

    前言 MySQL的binlog是以二进制形式打印的日志,没设置自动删除的话,时间长了就会占用大量存储空间.删除MySQL的binlog日志有两种方法:自动删除和手动删除. 自动删除 永久生效:修改My ...

  4. 利用pytorch自定义CNN网络(二):数据集的准备

    本文是利用pytorch自定义CNN网络系列的第二篇,主要介绍构建网络前数据集的准备,关于本系列的全文见这里. 笔者的运行设备与软件:CPU (AMD Ryzen 5 4600U) + pytorch ...

  5. 推荐一款免费好用的远程桌面:Getscreen

    因为平时有多台设备要用,所以远程桌面是我经常要使用的工具. 最近,正好看到一款不错的远程桌面软件,马上拿出来推荐给大家,如果有需要的可以看看. 今天要推荐的远程桌面软件就是这款叫Getscreen的软 ...

  6. 《深入理解Java虚拟机》读书笔记:方法调用

      方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程.在程序运行时,进行方法调用是最普遍.最频繁的操作,但前面已经讲过 ...

  7. 【日常踩坑】修复 chrome 打不开微信或者部分第三方应用内链接

    目录 默认浏览器为 chrome 时,打不开微信或者部分第三方应用内链接(或者没有反应) 修复问题:卸载 KGChromePlugin 参考资料 默认浏览器为 chrome 时,打不开微信或者部分第三 ...

  8. QA|如何获取元素属性值|网页计算器自动化测试实战

    一般来说 类似于<value>123</value>这样的元素,我们获取元素值是用.text获取,但有时这个值不是写在这里,而是作为标签的属性值写进去的,此时我们就需要获取属性 ...

  9. Xshell7 / Xftp7 永久免费,官网直连下载地址

    主要目的是让大家随时随地从官网下载Xshell和Xftp免费版(个人/家庭/学校免费) 最新变动:官方目前仅提供最新版以及上一个版本的软件下载!其他版本不提供下载 免费版5版本(最后一个版本,无任何限 ...

  10. 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(4) -- 实现DataGrid数据的导入和导出操作

    在我们设计软件的很多地方,都看到需要对表格数据进行导入和导出的操作,主要是方便客户进行快速的数据处理和分享的功能,本篇随笔介绍基于WPF实现DataGrid数据的导入和导出操作. 1.系统界面设计 在 ...