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

在本篇文章中,咱们将手把手带您创立 AWS GitLab 模板,并运用 Walrus 在 AWS EC2 实例上布置一个 GitLab 服务器。

运用前提

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

  2. 装置 Walrus(seal-io.github.io/docs/zh/dep…

在 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

快速教程|如安在 AWS EC2上运用 Walrus 布置 GitLab

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

快速教程|如安在 AWS EC2上运用 Walrus 布置 GitLab

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

快速教程|如安在 AWS EC2上运用 Walrus 布置 GitLab

在 AWS 上布置 Gitlab 服务器

Operations HubConnectors 中添加 AWS。

快速教程|如安在 AWS EC2上运用 Walrus 布置 GitLab

在环境中添加 connector。

快速教程|如安在 AWS EC2上运用 Walrus 布置 GitLab

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

快速教程|如安在 AWS EC2上运用 Walrus 布置 GitLab

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

快速教程|如安在 AWS EC2上运用 Walrus 布置 GitLab

快速教程|如安在 AWS EC2上运用 Walrus 布置 GitLab

布置完成后,Gitlab 实例就能在 AWS 上成功装备了。

快速教程|如安在 AWS EC2上运用 Walrus 布置 GitLab

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

总 结

以上就是在 Walrus 中创立模板的全步骤,咱们借助 Walrus 大大简化了布置流程。此外,Walrus 还兼容 Terraform 社区的很多老练模板,只需轻轻一点,即可轻松采用最佳实践。

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

项目地址:github.com/seal-io/wal…