快速教程|如何在 AWS EC2上使用 Walrus 部署 GitLab
Walrus 是一款基于平臺工程理念的開源應用管理平臺,致力于解決應用交付領域的深切痛點。借助 Walrus 將云原生的能力和最佳實踐擴展到非容器化環境,并支持任意應用形態統一編排部署,降低使用基礎設施的復雜度,為研發和運維團隊提供易用、一致的應用管理和部署體驗,進而構建無縫協作的軟件交付流程。
?
在本篇文章中,我們將手把手帶您創建 AWS GitLab 模板,并使用 Walrus 在 AWS EC2 實例上部署一個 GitLab 服務器。
?
使用前提
-
用于存儲模板的 GitHub 或 Gitlab 倉庫。
-
安裝 Walrus(https://seal-io.github.io/docs/zh/deploy/standalone)。
?
在 GitHub 上新建倉庫
-
在 GitHub 上新建一個倉庫,這里我們使用的是 demo 版本庫。
-
將版本庫克隆到本地。
?
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 上創建一個模板
-
在瀏覽器中打開 Walrus 并登錄。
-
選擇
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 上為我們點亮星星??
?
項目地址:https://github.com/seal-io/walrus
?
總結
以上是生活随笔為你收集整理的快速教程|如何在 AWS EC2上使用 Walrus 部署 GitLab的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端如何防止数据被异常篡改并且复原数据
- 下一篇: 二叉树简介