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

Seal數澈發表於2023-11-08

Walrus 是一款基於平臺工程理念的開源應用管理平臺,致力於解決應用交付領域的深切痛點。藉助 Walrus 將 雲原生的能力和 有效實踐擴充套件到非容器化環境,並 支援任意應用形態統一編排部署,降低使用基礎設施的複雜度,為研發和運維團隊提供易用、一致的應用管理和部署體驗,進而構建無縫協作的軟體交付流程。
 

在本篇文章中,我們將手把手帶您建立 AWS GitLab 模板,並使用 Walrus 在 AWS EC2 例項上部署一個 GitLab 伺服器。
 

使用前提

  1. 用於儲存模板的 GitHub 或 Gitlab 倉庫。

  2. 安裝 Walrus(
     

在 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 )
                    curl -fsSL | 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 = "{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"}
# @hiddenvariable "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 = "{aws_instance.gitlab.public_ip}"
  }

 

README.md檔案是對模板的描述。在使用該模板建立服務時,它將顯示給使用者。
 

在此,我們可以使用 terraform-docs 工具生成模板說明。你需要根據專案文件在膝上型電腦上安裝該工具,然後執行以下命令為模板生成  README.md 檔案。

 terraform-docs markdown . > README.md

 

生成的  README.md 檔案內容如下:

# Gitlab on AWSThis 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.1 和  v0.0.2


 

在 AWS 上部署 Gitlab 伺服器

在  Operations Hub 的  Connectors 中新增 AWS。


 

在環境中新增 connector。

 

利用  gitlab-on-aws 模板建立服務。UI 表單中的分組和標籤是根據我們之前定義的模板變數中對應的註釋動態生成的。輸入變數在模板的  variables.tf 檔案中列出。為確保網路流量管理,EC2 例項需要一個安全組。我們可以建立一個名為 all-open的安全組來允許所有網路流量,為了增強安全性,可以根據需要自定義規則。
 


 

在 AWS 目標區域建立安全組後,就可以儲存和應用服務了。


 

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

 

GitLab URL 將顯示在輸出結果中。獲得 URL 後,就可以訪問 GitLab 伺服器了。

 

總 結

以上就是在 Walrus 中建立模板的全步驟,我們藉助 Walrus 大大簡化了部署流程。此外,Walrus 還相容 Terraform 社群的大量成熟模板,只需輕輕一點,即可輕鬆採用 有效實踐。
 

歡迎小夥伴們試用 Walrus,如果您喜歡我們的專案,可以在 GitHub 上為我們點亮星星?
 

專案地址:
 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026925/viewspace-2993439/,如需轉載,請註明出處,否則將追究法律責任。

相關文章